first commit
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user