【问题标题】:How to set state of StateNotifierProvider如何设置 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);
}

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

【问题讨论】:

    标签: flutter dart riverpod flutter-hive


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      • 2021-03-24
      • 2021-04-05
      • 1970-01-01
      • 2022-06-11
      • 2021-10-17
      • 2021-06-30
      相关资源
      最近更新 更多