微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何设置 StateNotifierProvider 的状态

如何解决如何设置 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);
}

我的问题是最后一行;我尝试设置状态不起作用。

解决方法

您没有在 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);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。