如何设置 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 的状态的主要内容,如果未能解决你的问题,请参考以下文章

如何设置div铺满

如何进入电脑BIOS设置?

如何设置窗口在最前面?

自己购买的域名如何设置子域名,如何设置访问多个项目,万网

outlook如何设置自动回复

如何设置默认字体功能设置?