如何在 FutureBuilder() 中正确“刷新”小部件
Posted
技术标签:
【中文标题】如何在 FutureBuilder() 中正确“刷新”小部件【英文标题】:How to properly "refresh" Widgets inside FutureBuilder() 【发布时间】:2020-08-27 03:06:43 【问题描述】:我在 FutureBuilder()
中有一个 Listview.builder()
,它显示从 API 获取的数据。我可以成功检索数据。但是当我调用refreshData()
函数时,以前的数据会附加到列表中。如何正确“刷新”FutureBuilder()
中的小部件?
注意:我这里只使用get
请求,所以数据不可能在后端重复。所以问题实际上在于显示数据。
这是我的代码:
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!'));
,
)
],
),
),
);
【问题讨论】:
顺便说一句,我忘了附上应用程序如何运行的屏幕截图。这是链接:imgur.com/m7Rx3v0 @pskink,您可以将其发布为答案而不是评论吗?解决了这个问题。谢谢! :) 【参考方案1】:正如上面评论中提到的@pskink,我只是用_givers = await NetworkHelper().fetchGivers();
替换了_givers.addAll(await NetworkHelper().fetchGivers());
感谢您的帮助!
【讨论】:
以上是关于如何在 FutureBuilder() 中正确“刷新”小部件的主要内容,如果未能解决你的问题,请参考以下文章
如何将快照数据从 futurebuilder 传递到同一页面中的另一个 futurebuilder?
如何在 FutureBuilder 中解析从本地主机接收的 JSON 对象
如何在 FutureBuilder Flutter 中停止循环 SetState