首页 > 解决方案 > 如何在 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!'));
                 }
               },
             )
           ],
         ),
       ),
     );
   }
}

标签: flutterwidgetrefreshfuture

解决方案


正如上面评论中提到的@pskink,我只是替换_givers.addAll(await NetworkHelper().fetchGivers());_givers = await NetworkHelper().fetchGivers();

谢谢您的帮助!


推荐阅读