【发布时间】:2023-04-01 08:20:01
【问题描述】:
我对如何根据文档实现 Flutter 的 FutureBuilder 有点困惑。我在这里有一个 Future Builder 可以工作,唯一的问题是每次运行 build 方法时都会使用 future :
FutureBuilder(
future: DBProvider.db.getUser(),
builder: (_, userData) {
switch (userData.connectionState) {
case ConnectionState.none:
return Container();
case ConnectionState.waiting:
return Container();
case ConnectionState.active:
case ConnectionState.done:
newUser = userData.data;
return ListView(
shrinkWrap: true,
children: <Widget>[
... // Lot's of things
],
);
}
return null;
},
),
然后我意识到这部分文档的重要性,它说未来必须“更早获得”,这样这个问题就不会发生:
未来一定是更早获得的,例如中 State.initState、State.didUpdateConfig 或 State.didChangeDependencies。期间不得创建 构造时调用 State.build 或 StatelessWidget.build 方法 未来建造者。如果未来与 FutureBuilder,那么每次重建 FutureBuilder 的父级时, 异步任务将重新启动。
这就是我的问题的来源,我明白这些话在说什么,但就根据它编写代码而言,究竟是什么意思/看起来像什么?
我是否只是简单地创建一个函数并像这样在 initState 中调用它:
@override
void initState() {
super.initState();
_getUser();
}
_getUser() async {
newUser = await DBProvider.db.getUser();
}
在这种情况下,FutureBuilder 的未来参数会发生什么?或者这完全不对?
【问题讨论】: