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)
他们是一样的还是不一样的?如果是,那么为什么read在build()方法内部使用时会出现此错误,而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()。
有关更多见解,请参阅此、此和此。
嗯,它们不一样。
你不应该read在build方法内部使用。而是坚持旧的黄金模式:
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)
| 归档时间: |
|
| 查看次数: |
2953 次 |
| 最近记录: |