向上滑动刷新颤振 FUTUREBUILDER

时间:2021-01-31 11:19:38

标签: flutter

我有一个应用程序,它从 firebase 获取一些数据,然后根据来自 firebase 的数据调用一个类来显示一个小部件。我尝试添加向上滑动刷新,但我不知道将它放在哪里以及在刷新时调用什么。我正在尝试使用 RefreshIndicator。

在这里,我将把我的代码放在其中调用数据库(firebase),然后为数据库中的每个事件创建一个小部件。

如果您需要更多信息,请随时发表评论。非常感谢您的帮助!

FutureBuilder(
      future: databaseReference.once(),
      builder: (context, AsyncSnapshot<DataSnapshot> snapshot) {
        List lists = [];
        if (snapshot.hasData) {
        lists.clear();
        Map<dynamic, dynamic> values = snapshot.data.value;
        values.forEach((key, values) {
            lists.add(values);
        });
        return new ListView.builder(
          primary: false,
          padding: EdgeInsets.only(left:12.0,right:12,bottom: 15,),
          shrinkWrap: true,
          itemCount: lists.length,
          itemBuilder: (BuildContext context, int index) {
          if(lists[index]["Status"]== "Active"){;
          return Container(
          child:EvendWidget(lists[index]["EventImage"], 
                Text(lists[index]["EventName"]).data,
                Text(lists[index]["EventLocation"]+ ", "+lists[index] 
                ["EventCounty"] ).data,
                Text(lists[index]["Date"]+ ", "+lists[index]["Time"]+ 
                " - "+lists[index]["Time"]).data,
                Text(lists[index]["Duration"]+ " H").data,
                Text(lists[index]["Genre"]).data,
                Text(lists[index]["Price"]).data,false));}else{return 
                SizedBox.shrink(); };
            });
        }
        return Container(
          margin: const EdgeInsets.only(top: 300),
          child:CircularProgressIndicator());
    }),

如果您需要更多信息,请随时发表评论。非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

在滑动操作中调用 setState。它会触发小部件中的 build 方法并再次调用您的未来。

onRefresh: () {
  setState(() {});
}

答案 1 :(得分:0)

您可以使用 RefreshIndicator 进行滑动刷新。 https://api.flutter.dev/flutter/material/RefreshIndicator-class.html

使用 ListView.Builder 作为 RefreshIndicator 的子项,并在 onRfresh 中使用您未来的方法

像这样:

//define in widget
var refreshkey = GlobalKey<RefreshIndicatorState>();

FutureBuilder(
  future: databaseReference.once(),
  builder: (context, AsyncSnapshot<DataSnapshot> snapshot) {
    List lists = [];
    if (snapshot.hasData) {
    lists.clear();
    Map<dynamic, dynamic> values = snapshot.data.value;
    values.forEach((key, values) {
        lists.add(values);
    });
    return RefreshIndicator(
        key: refreshkey,
        onRefresh: databaseReference.once(),
        child: ListView.builder(
          primary: false,
          padding: EdgeInsets.only(left:12.0,right:12,bottom: 15,),
          shrinkWrap: true,
          itemCount: lists.length,
          itemBuilder: (BuildContext context, int index) {
          if(lists[index]["Status"]== "Active"){;
          return Container(
          child:EvendWidget(lists[index]["EventImage"], 
                Text(lists[index]["EventName"]).data,
                Text(lists[index]["EventLocation"]+ ", "+lists[index] 
                ["EventCounty"] ).data,
                Text(lists[index]["Date"]+ ", "+lists[index]["Time"]+ 
                " - "+lists[index]["Time"]).data,
                Text(lists[index]["Duration"]+ " H").data,
                Text(lists[index]["Genre"]).data,
                Text(lists[index]["Price"]).data,false));}else{return 
                SizedBox.shrink(); };
        });
    )
      
    }
    return Container(
      margin: const EdgeInsets.only(top: 300),
      child:CircularProgressIndicator());
}),

也许需要一些编辑。