【发布时间】:2019-02-14 09:05:19
【问题描述】:
由于各种原因,有时我的小部件的build方法会被再次调用。
我知道这是因为父母更新了。但这会导致不良影响。
导致问题的典型情况是以这种方式使用FutureBuilder:
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: httpCall(),
builder: (context, snapshot) {
// create some layout here
},
);
}
在本例中,如果再次调用 build 方法,则会触发另一个 HTTP 请求。这是不受欢迎的。
考虑到这一点,如何处理不需要的构建?有什么方法可以阻止构建调用?
【问题讨论】:
-
在provider documentation 中,您在此处链接说“请参阅此 stackoverflow 答案,其中详细解释了为什么不希望使用 .value 构造函数来创建值。”但是,您没有在此处或您的答案中提及值构造函数。您的意思是链接到其他地方吗?
-
@Suragch 这是正确的链接。该问题并非特定于提供者,“.value”构造函数的问题与此处描述的相同。即用 SomeProvider.value 替换 FutureBuilder
-
我建议直接在文档中解释不良副作用(第一选择)或在此处添加更多解释(第二选择)。我不知道我是否代表普通 Provider 用户,但是当我来到这里时,我仍然不明白使用
.value和不需要的小部件构建或build方法之间的关系需要纯. -
@Suragch 我还发现提供程序文档的that part 非常混乱。更清晰的解释可以在Flutter by Example找到。
标签: flutter dart flutter-layout flutter-widget unbound