first commit
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
|
||||
import '../api/statistics_api.dart';
|
||||
import '../models/statistics_response.dart';
|
||||
import '../utils/date_util.dart';
|
||||
|
||||
/// 统计页的时间粒度
|
||||
enum StatisticsTab { daily, weekly, monthly }
|
||||
|
||||
class StatisticsTabNotifier extends Notifier<StatisticsTab> {
|
||||
@override
|
||||
StatisticsTab build() => StatisticsTab.monthly; // 对齐 uniApp 默认按月
|
||||
|
||||
void set(StatisticsTab tab) => state = tab;
|
||||
}
|
||||
|
||||
final statisticsTabProvider =
|
||||
NotifierProvider<StatisticsTabNotifier, StatisticsTab>(StatisticsTabNotifier.new);
|
||||
|
||||
/// 按时间粒度取统计。日期范围在 provider 内按"当前时刻"计算,
|
||||
/// 与 uniApp 行为一致:日=今天,周=本周一~今天,月=本自然月。
|
||||
final statisticsProvider =
|
||||
FutureProvider.autoDispose.family<StatisticsResponse, StatisticsTab>((ref, tab) {
|
||||
final api = ref.watch(statisticsApiProvider);
|
||||
final now = DateTime.now();
|
||||
switch (tab) {
|
||||
case StatisticsTab.daily:
|
||||
final today = formatDate(now);
|
||||
return api.getDaily(startDate: today, endDate: today);
|
||||
case StatisticsTab.weekly:
|
||||
return api.getWeekly(weekStart: formatDate(weekStart(now)));
|
||||
case StatisticsTab.monthly:
|
||||
return api.getMonthly(year: now.year, month: now.month);
|
||||
}
|
||||
});
|
||||
Reference in New Issue
Block a user