如何设置 StateNotifierProvider 的状态
How to set state of StateNotifierProvider
我想在生命周期恢复后初始化 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);
}
我的问题是最后一行;我设置状态的尝试无效。
您不会在 StateNotifier
class 本身之外设置 StateNotifierProvider
的状态。这就是您与 StateProvider
.
互动的方式
相反,创建一个方法来改变 StateNotifier
class 中的状态。
你的情况:
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 的状态。
// 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);
}
我的问题是最后一行;我设置状态的尝试无效。
您不会在 StateNotifier
class 本身之外设置 StateNotifierProvider
的状态。这就是您与 StateProvider
.
相反,创建一个方法来改变 StateNotifier
class 中的状态。
你的情况:
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);