Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 在Flatter中从Firebase实时数据库检索数据时,是否有任何方法显示加载小部件_Flutter_Dart_Firebase Realtime Database - Fatal编程技术网

Flutter 在Flatter中从Firebase实时数据库检索数据时,是否有任何方法显示加载小部件

Flutter 在Flatter中从Firebase实时数据库检索数据时,是否有任何方法显示加载小部件,flutter,dart,firebase-realtime-database,Flutter,Dart,Firebase Realtime Database,以下是将数据从firebase实时数据库加载到列表的代码片段: var CategoryName = FirebaseDatabase.instance.reference().child('CategoryNames').once() .then((DataSnapshot dataSnapshot){ var key = dataSnapshot.value.keys; for(var i in key) { // pr

以下是将数据从firebase实时数据库加载到列表的代码片段:

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中。
我想在数据完全加载后显示屏幕,同时显示某种加载小部件或加载屏幕,但在我的情况下,屏幕看起来是空白的,过了一段时间,它会显示数据。如果互联网连接速度较慢,则会出现几分钟的空白屏幕并将其加载(因为我的数据也包含图像)。我还想,如果加载时间超过某个特定时间,它将显示重试重新加载或互联网连接错误。请帮忙。

正如其他人已经说过的那样,我认为最好的解决方案是像这样的未来建设者:

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'
              }
        }), 
FutureBuilder(
future://您希望从中获取数据的未来,
生成器:(BuildContext上下文,异步快照){
交换机(快照.连接状态){
案例连接状态。无:
返回文本(“无”);
案例连接状态.active:
返回文本(“活动”);
case ConnectionState.waiting:/在等待数据时。。。
return CupertinoActivityIndicator();//这是典型的苹果加载
return CircularProgressIndicator();//这将是一个蓝色的圆圈
案例连接状态。完成:
//您拥有数据,可以使用“snapshot.data”访问它
}
}), 

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