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

时间:2020-10-10 09:57:46

标签: flutter flutter-provider riverpod

在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的示例,然后给出了避免使用该警告的警告。为什么?

1 个答案:

答案 0 :(得分:3)

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

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