首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Provider.of(上下文,侦听: false)是否等同于context.read()?

Provider.of(上下文,侦听: false)是否等同于context.read()?
EN

Stack Overflow用户
提问于 2020-06-08 07:30:33
回答 3查看 8.2K关注 0票数 13
代码语言:javascript
复制
// 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>();

他们是一样的还是不一样的?如果它们是,那么当我在read方法中使用build()方法时,当Provider.of()工作时,为什么要得到这个错误呢?

尝试在build方法或提供程序的update回调中使用update

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-06-12 16:04:30

嗯,他们不一样。

您不应该在read方法中使用build。相反,坚持旧的是黄金模式:

代码语言:javascript
复制
final model = Provider.of<Model>(context, listen: false); 

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

代码语言:javascript
复制
onPressed: () {
  final model = context.read<Model>(); // recommended
  final model = Provider.of<Model>(context, listen: false); // works too
}
票数 9
EN

Stack Overflow用户

发布于 2020-06-11 17:47:30

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>();的工作原理相同

Recommendations:

使用context.read()context.watch()而不是Provider.of()。关于的更多见解,,请参考 &

票数 29
EN

Stack Overflow用户

发布于 2021-08-03 16:28:20

context.read<T>()内部返回Provider.of<T>(context, listen: false)

现在,用你认为最好的或者你喜欢的那个。

这是read in Provider的实现:

代码语言:javascript
复制
extension ReadContext on BuildContext {
  T read<T>() {
    return Provider.of<T>(this, listen: false);
  }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62257064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档