flutter - 在 Flutter 中从 FutureBuilder 设置状态
问题描述
我一直在尝试根据 a 的响应设置属性,FutureBuilder
但似乎无法使其正常工作。_activityLength
未来解决后如何设置而不在构建期间设置?
FutureBuilder<QuerySnapshot>(
future: _future,
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.none:
return Text('Press button to start');
case ConnectionState.waiting:
return Center(
child: CircularProgressIndicator(),
);
default:
if (snapshot.hasError) {
return Text('Error: ${snapshot.error}');
} else {
final documents = snapshot.data.documents;
_activityLength = documents.length;
return Expanded(
child: ListView.separated(
shrinkWrap: true,
separatorBuilder: (context, index) => Divider(
color: Colors.black,
height: 0,
),
itemCount: documents.length,
itemBuilder: (context, index) => _activityTile(
documents[index],
),
),
);
}
}
},
)
位于主体中FutureBuilde
的小部件中,我需要设置的值位于类似这样的东西中:Column
Scaffold
_itemsHeaderText
body:
...
child: Column(
children: <Widget>[
Container(
width: double.infinity,
decoration: BoxDecoration(
border: Border(
bottom:
BorderSide(color: Colors.grey, width: 1.0),
),
),
child: Padding(
padding: const EdgeInsets.only(
left: 15.0,
right: 15.0,
top: 10.0,
bottom: 10.0),
child: _itemsHeaderText(),
),
),
_itemsBody(),
],
),
解决方案
您的问题有一些解决方法。
- 您可以将 futureBuilder 提升到小部件树上,而不是设置状态,一旦 ConnectionState.done 状态将被重置。
- 您可以将未来放在一个在初始化状态下调用的函数中,然后将未来的结果放在上面设置状态。
推荐阅读
- javascript - React - FC - 如何在反应环境中停止执行
- vue.js - 如何从实时 vue 站点 url 中删除端口号?
- spacy-3 - 如何安装以前版本的 spacy
- javascript - 如何在 mongo 聚合中获取当前时间?
- deep-learning - 我的训练和验证损失突然增加了 3 的幂
- python - 装饰器注解
- reactjs - React AntD 选择组件:悬停状态
- c# - 具有 Windows 身份验证的防伪令牌在初始页面加载时不起作用
- windows - 我的 Windows 应用程序在启动时经常崩溃
- c# - EF Core:blazor 服务器应用程序中的 dbcontext 问题