【问题标题】:Is there any method to show loading widget while retrieving data from Firebase Realtime Database in flutter是否有任何方法可以在颤动中从 Firebase 实时数据库中检索数据时显示加载小部件
【发布时间】:2020-10-24 10:52:14
【问题描述】:

这里是从 firebase 实时数据库加载数据到列表的 sn-p 代码:

var CategoryName =  FirebaseDatabase.instance.reference().child('CategoryNames').once()
        .then((DataSnapshot dataSnapshot){
      var key  = dataSnapshot.value.keys;
      for(var i in key)
      {
        // print(dataSnapshot.value[i]['Name']);
        CategoriesOnly categoriesOnly = new CategoriesOnly(
            dataSnapshot.value[i]['Name']
        );
        categoriesOnlyList.add(categoriesOnly);
      }
      setState(() {
        print(categoryItemList.length);
      });

    });

我将这些数据存储到一个列表中并将它们显示到 ListView.builder 中。 我想在数据完全加载后显示屏幕,同时它显示某种加载小部件或加载屏幕,但在我的情况下,屏幕看起来是空白的,一段时间后它会显示数据。如果互联网连接速度很慢,则会出现一分钟的空白屏幕并加载它(因为我的数据也包含图像)。而且我还想如果加载时间超过某个特定时间,它将显示尝试重新加载或互联网连接错误。请帮忙。

【问题讨论】:

  • @ChristopherMoore,我可以添加延迟并显示加载小部件,但我如何知道数据何时完全加载。假设我使用了 5 秒延迟,而网速快的人必须等待 5 秒,而网速慢的人即使在 5 秒后也无法看到数据。
  • 你永远不应该故意添加延迟。这样做没有真正的目的。正如我所说,您应该查看FutureBuilder。您从Future 获取数据的当前方式并不理想且混乱。

标签: flutter dart firebase-realtime-database


【解决方案1】:

正如其他人已经说过的,我认为最好的解决方案是这样的 FutureBuilder:

FutureBuilder(
            future: //your future you want the data from,
            builder: (BuildContext context, AsyncSnapshot<dynamic> snapshot) {
              switch (snapshot.connectionState) {
                case ConnectionState.none:
                  return Text("None");
                case ConnectionState.active:
                  return Text("active");
                case ConnectionState.waiting:  /while you are waiting for the data...
                return CupertinoActivityIndicator(); //thats the typical apple loading
                return CircularProgressIndicator(); // this would be a blue circle
                case ConnectionState.done:
                  //you have the data and can access it with 'snapshot.data'
              }
        }), 

【讨论】:

    猜你喜欢
    • 2020-12-05
    • 1970-01-01
    • 2019-05-23
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2019-04-16
    • 2020-12-09
    • 2018-09-11
    相关资源
    最近更新 更多