Files
2026-09-21 17:37:53 +08:00

38 lines
1.5 KiB
Dart
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'account_provider.dart';
import 'bill_provider.dart';
import 'budget_provider.dart';
import 'statistics_provider.dart';
/// 账单数据的统一失效入口。
///
/// 任何写操作(手动记账、OCR 批量存储、编辑、删除)成功后调用这里,
/// 首页与统计页会自动重新取数——替代 uniApp 的 `uni.$emit('refreshBills')` 事件总线。
///
/// 传入的是 **family 对象**,Riverpod 会失效该 family 的所有 key,
/// 所以即使用户之前浏览过其它月份,那些缓存也一并作废,不会出现脏数据。
///
/// 账户信息也要一起失效:余额和总收支都是由账单汇总出来的。
///
/// 说明:Ref 与 WidgetRef 没有公共父类(且 invalidate 的参数类型 ProviderOrFamily
/// 未公开导出),所以这里写成两个入口,各自直接调用而不是抽公共函数。
void invalidateBillData(Ref ref) {
ref.invalidate(billsProvider);
ref.invalidate(monthlyStatisticsProvider);
ref.invalidate(statisticsProvider);
ref.invalidate(budgetProvider);
ref.invalidate(billDetailProvider);
ref.invalidate(accountProvider);
}
/// 供 Widget 层调用(下拉刷新、页面重试)
void invalidateBillDataFromWidget(WidgetRef ref) {
ref.invalidate(billsProvider);
ref.invalidate(monthlyStatisticsProvider);
ref.invalidate(statisticsProvider);
ref.invalidate(budgetProvider);
ref.invalidate(billDetailProvider);
ref.invalidate(accountProvider);
}