Flutter Riverpod context.read vs Provider的构建方法

问题描述

在Riverpod documentation中说:

这就是context.read(myProvider)是解决方案的地方。

使用它,我们可以将之前的代码重构为:

@override 
Widget build(BuildContext context) {   
  return RaisedButton(
    onPressed: () => context.read(counterProvider).state++,child: Text('increment'),); 
} 

这样做,单击我们的按钮仍会增加计数器。但是我们不再听 提供程序,避免不必要的重建。

但是它说:

注意

避免在Widget的context.read方法内调用build。如果你 要优化重建,提取提供程序中侦听的值 代替。

这让我有些困惑。首先,文档提供了在context.read方法内使用build的示例,然后给出了避免使用该警告的警告。为什么?

解决方法

在布局期间可以多次调用build方法。因此,您应该避免在其中进行任何额外的工作(例如在模型上调用方法)。

但是,在调用onPressed时实际上并未调用RaisedButton的{​​{1}}回调。 build仅在用户按下按钮时被调用。只有这样,Riverpod才会读取您的提供程序并在模型上调用该方法。因此,文档中的警告不适用于这种情况。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...