Jos*_*eve 37
用于read仅获取提供者的值一次(一次性读取)
用于watch第一次和每次值更改时获取提供程序的值(就像您订阅提供程序一样,因此只要有更改,您就会收到通知)
listen类似于watch。主要区别在于返回类型。\nwatch直接返回新值,listen返回 avoid但通过回调提供对新值和旧值的访问(请参阅下面的示例)
您可以read在诸如initState、 回调之类的onPressed地方使用watch,并且listen不应异步调用,例如在onPressedElevatedButton 的内部。initState它也不应该在内部和其他状态生命周期中使用。
正如 Kaan Taha K\xc3\xb6ken 指出的:
\n\n\n避免使用 [read] 创建值永不改变的小部件,并考虑使用 [Provider] 或
\nselect过滤不需要的重建。
read当您只想对提供者进行一次赋值时使用。
watch当您想要始终获得该值时使用。
StateProviderfinal counterProvider = StateProvider((ref) => 0);\nclass HomePage extends ConsumerWidget {\n const HomePage({Key? key}) : super(key: key);\n\n @override\n Widget build(BuildContext context, WidgetRef ref) {\n final counter = ref.watch(counterProvider);\n ref.listen(\n counterProvider,\n (previous, next) {\n print("The new value is $next");\n if (next == 5) {\n print("I just reached 5");\n }\n },\n );\n return Scaffold(\n body: Center(\n child: Text(\n counter.toString(),\n ),\n ),\n floatingActionButton: FloatingActionButton(\n onPressed: () {\n ref.read(counterProvider.state).state += 1;\n },\n ),\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\nwatch上面的示例显示了,read和的用法listen。
watch计算该counter值,以便在发生更改时它会在 UI 中更新。listen要counter打印更新后的值并I've reached 5在它为 5 时打印。read提供程序状态并在按下1时添加。FloatingActionButton| 归档时间: |
|
| 查看次数: |
17348 次 |
| 最近记录: |