You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Flutter的autoDispose StateNotifierProvider添加disposeDelay?

组件销毁后短时间保留状态的实现方案

要实现组件销毁后短时间内保留message值、供后续组件获取的需求,你可以利用Riverpod的autoDispose Provider提供的延迟销毁能力,具体修改代码如下:

修改后的完整代码

final chatBeingEdited = StateNotifierProvider.autoDispose
    .family<_ChatBeingEdited, String?, int>( 
  (ref, chatId) {
    // 设置2秒的销毁延迟,可根据实际需求调整时长
    ref.keepAliveFor(const Duration(seconds: 2));
    return _ChatBeingEdited(chatId);
  },
);

class _ChatBeingEdited extends StateNotifier<String?>{
  _ChatBeingEdited(this.chatId) : super(null);

  int chatId;

  void storeChatDataObj(String message) {
    state = message;
  }
}

关键说明

  • ref.keepAliveFor(Duration)方法用于指定Provider在失去所有监听者后,延迟多久销毁状态。设置合适的时长后,当前组件销毁时状态不会立即清除,后续组件能在短时间内获取到之前存储的message。
  • 当延迟时间结束且没有新组件监听该Provider时,状态才会被销毁,避免不必要的内存占用。
  • 后续组件只要监听同一个chatId对应的chatBeingEdited Provider,就能立即拿到保留的message值。

内容的提问来源于stack exchange,提问作者Sunil Gupta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 06:42:07