Provider.of(context, listen: false) 等价于 context.read() 吗?

iDe*_*ode 9 flutter flutter-provider

// Are these the same?
final model = Provider.of<Model>(context, listen: false); 
final model = context.read<Model>(); 

// Are these the same?
final model = Provider.of<Model>(context);
final model = context.watch<Model>();
Run Code Online (Sandbox Code Playgroud)

他们是一样的还是不一样的?如果是,那么为什么readbuild()方法内部使用时会出现此错误,而Provider.of()有效?

试图context.read<Model>build方法或update提供者的回调中使用。

San*_*iya 16

final model = context.read<Model>();
这将返回模型而不监听任何更改。

final model = context.watch<Model>();
这使小部件侦听模型上的更改。

final model = Provider.of<Model>(context, listen: false);
这与 context.read<Model>();

final model = Provider.of<Model>(context);
这与 context.watch<Model>();

建议:
使用context.read(),context.watch()而不是Provider.of()有关更多见解,请参阅

  • 我相信您在回答之前一定已经仔细阅读了问题。-1 来自我,抱歉!!! (2认同)

iDe*_*ode 8

嗯,它们不一样。

你不应该readbuild方法内部使用。而是坚持旧的黄金模式:

final model = Provider.of<Model>(context, listen: false); 
Run Code Online (Sandbox Code Playgroud)

read 当您想在回调中使用上述模式时使用,例如,当按下按钮时,我们可以说它们都在执行相同的操作。

onPressed: () {
  final model = context.read<Model>(); // recommended
  final model = Provider.of<Model>(context, listen: false); // works too
}
Run Code Online (Sandbox Code Playgroud)