我正在将 Riverpod 与 Freezed Union 一起使用。
我正在尝试合并/观察两个FutureProviders都返回相同类型的两个StateNotifierProvider并使用它们来设置状态。
我注意到,因为我正在观察两个 futureProviders,所以它创建了两个实例StateNotifierProvider......
从日志记录中我可以看到 init 方法被调用两次,clocking state被调用两次,DPS state被调用一次。
我在第一个障碍上失败了,但我的希望是:
我意识到下面的示例没有实现计时器,但我需要找出 StateNotfierProvider 的问题,然后我将继续添加暂停等。
老实说,我什至不确定这是正确的做事方式吗?
我考虑过也许为小部件中的每个未来提供者设置两个消费者,但这似乎有点麻烦。如果我可以在州立提供商中管理多个未来的提供商,那就太好了。
final clockingState = StateNotifierProvider<ClockingNotifier, ClockingState>(
(ref) => ClockingNotifier(
ref.watch(loadingItineraryProvider), ref.watch(clockingDps)));
class ClockingNotifier extends StateNotifier<ClockingState> {
final AsyncValue<ClockingState> itineraryState;
final AsyncValue<ClockingState> clockingDps;
ClockingNotifier(this.itineraryState, this.clockingDps)
: super(ClockingState.init()) {
init();
}
void init() {
logger.d("the init method");
itineraryState.whenData((ClockingState clockingState) {
logger.d("clocking state");
state = clockingState;
});
clockingDps.whenData((ClockingState dps) {
logger.d("DPS state");
state = dps;
});
}
}
Run Code Online (Sandbox Code Playgroud)
小智 0
如果您仅需要 ClockingNotifier 的 FutureProvider,则应该考虑将它们完全移至 ClockingNotifier 内部(在 init() 方法内调用 Futures 或在 ClockingNotifier 内部添加函数来加载 future 并随后直接更新 Notifier 的状态)。
这为您提供了更多控制权和更好的通知程序流程。
| 归档时间: |
|
| 查看次数: |
974 次 |
| 最近记录: |