flutter - 如何在 FutureBuilder() 中正确“刷新”小部件
问题描述
我有一个显示从 API 获取的数据的Listview.builder()
内部。FutureBuilder()
我可以成功检索数据。但是当我调用该refreshData()
函数时,以前的数据会附加到列表中。如何正确“刷新” a 中的小部件FutureBuilder()
?
注意:我get
这里只使用request,所以后端的数据不可能重复。所以问题实际上在于显示数据。
这是我的代码:
class _MyHomePageState extends State<MyHomePage> {
List<Giver> _givers = [];
Future giversList;
getData() async {
_givers.addAll(await NetworkHelper().fetchGivers());
return _givers;
}
refreshData() {
giversList = getData();
}
@override
void initState() {
super.initState();
giversList = getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: Column(
children: <Widget>[
RaisedButton(
onPressed: (){
setState(() {
refreshData();
});
},
child: Text('Refresh'),
),
FutureBuilder(
future: giversList,
builder: (context, snapShot){
switch(snapShot.connectionState) {
case ConnectionState.none:
return Center(child: Text('none'));
case ConnectionState.active:
case ConnectionState.waiting:
return Center(child: CircularProgressIndicator());
//this is where the listview is created
case ConnectionState.done:
return ListView.builder(
shrinkWrap: true,
itemCount: _givers.length,
itemBuilder: (context, index) {
return ListTile(
title: Text(snapShot.data[index].name),
subtitle: Text(snapShot.data[index].address),
);
});
default:
return Center(child: Text('Default!'));
}
},
)
],
),
),
);
}
}
解决方案
正如上面评论中提到的@pskink,我只是替换_givers.addAll(await NetworkHelper().fetchGivers());
为_givers = await NetworkHelper().fetchGivers();
谢谢您的帮助!
推荐阅读
- websocket - Nest js从websockets微服务中的rabbitmq读取事件
- php - 为 PHP 升级 gRPC 的最佳方法是什么?
- python - AttributeError:模块“llvmlite.binding.ffi”没有属性“register_lock_callback”
- mongodb - Mongoose/ MongoDB:获取原始数组元素的时间戳
- python - 从 varchar 列中提取由“-”分隔的最后一个数字
- html - 文本的填充超出父容器(显示:内联)
- shell - 我正在尝试在终端上运行此命令,但 shell 返回 find: missing argument to `-exec'
- next.js - 谷歌搜索控制台将我的 21 个 URL 添加到核心网络生命力的不良部分,并将其显示为 126 个 URL
- ios - iOS swift sonarQube 命令./run-sonar-swift.sh -v 抛出错误
- php - 数组元素在下拉 PHP 中以不同的顺序出现