等效于 Riverpod 中的 ChangeNotifierProvider 小部件

Posted

技术标签:

【中文标题】等效于 Riverpod 中的 ChangeNotifierProvider 小部件【英文标题】:Equivalent of ChangeNotifierProvider widget in Riverpod 【发布时间】:2021-02-02 08:31:50 【问题描述】:

是否有与 Riverpod 中 Provider 的 ChangeNotifierProvider 小部件等效的小部件?

仅当父窗口小部件为 ChangeNotifierProvider/或在其窗口小部件树中具有 ChangeNotifierProvider 的页面已使用 create 推送到 Navigator 堆栈时,才创建提供程序。我希望在弹出页面时自动处理提供程序,并从小部件树中删除 ChangeNotifierProvider 小部件,就像在 Provider 中一样。

【问题讨论】:

【参考方案1】:

Riverpod 也有一个ChangeNotifierProvider,所以你可以使用它。

至于“我希望在弹出页面时自动释放提供程序”,这个功能改为使用autoDispose实现

所以最后的语法是:

class MyNotifier extends ChangeNotifier 

final myNotifierProvider = ChangeNotifierProvider.autoDispose<MyNotifier>((ref) 
  return MyNotifier();
);

...

class MyWidget extends ConsumerWidget 
  @override
  Widget build(BuildContext context, ScopedReader watch) 
    MyNotifier myNotifier = watch(myNotifierProvider);
  

这样,当所有使用MyNotifier 的小部件都被销毁时(也就是当路由被弹出时),那么MyNotifier 将被释放。

【讨论】:

谢谢,它实际上在文档中 (riverpod.dev/docs/concepts/modifiers/auto_dispose)。仍然掌握它??‍♂️。 好的,但是“.when”不能与 ChangeNotifierProvider 一起使用,对吧?

以上是关于等效于 Riverpod 中的 ChangeNotifierProvider 小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何组合 2 个 Riverpod StreamProviders,其中 1 个流依赖于另一个流的数据?

Riverpod 错误:未定义的类“ScopedReader”

RiverPod - 如何在不在小部件中的 AsyncValue 上等待使用 FutureProvider

python中的GNU拆分等效于啥? [复制]

等效于 Julia 中的 c\c++ 编译器指令

等效于 Javascript 中的 python 范围 [重复]