如何设置 StateNotifierProvider 的状态
Posted
技术标签:
【中文标题】如何设置 StateNotifierProvider 的状态【英文标题】:How to set state of StateNotifierProvider 【发布时间】:2021-09-23 03:29:39 【问题描述】:我想在生命周期中恢复后初始化 StateNotifierProvider 的状态。
// provider
final timerProvider = StateNotifierProvider<TimerNotifier, TimerModel>((ref)
return TimerNotifier();
);
// provider for timeleft
final _timeLeftProvider = Provider<String>((ref)
return ref.watch(timerProvider).timeLeft;
);
// provider for timeleft
final timeLeftProvider = Provider<String>((ref)
return ref.watch(_timeLeftProvider);
);
// provider for buttonState
final _buttonState = Provider<ButtonState>((ref)
return ref.watch(timerProvider).buttonState;
);
// provider for buttonState
final buttonProvider = Provider<ButtonState>((ref)
return ref.watch(_buttonState);
);
// resumed method lifecycleState
if (state == AppLifecycleState.resumed)
// fecthing data from hive
final lastInsert = await HiveManager.getItem() ?? [];
String timeLeft = lastInsert.last.countdownValue.toString();
// Attempting to set the state of the timerProvider
context.read(timerProvider.notifier).state = TimerModel(timeLeft, ButtonState.initial);
我的问题在于最后一行;我设置状态的尝试不起作用。
【问题讨论】:
【参考方案1】:您不会将StateNotifierProvider
的状态设置为StateNotifier
类本身。这就是您与StateProvider
互动的方式。
相反,创建一个改变 StateNotifier
类中状态的方法。
在你的情况下:
class TimerNotifier extends StateNotifier<TimerModel>
...
void setTimerModel(TimerModel timerModel)
state = timerModel;
...
然后你可以这样调用方法:
final timerNotifier = context.read(timerProvider.notifier);
final timerModel = TimerModel(timeLeft, ButtonState.initial);
timerNotifier.setTimerModel(timerModel);
【讨论】:
以上是关于如何设置 StateNotifierProvider 的状态的主要内容,如果未能解决你的问题,请参考以下文章