Firebase 快照数据为空,并保持加载状态

Firebase 快照数据为空,并保持加载状态,firebase,flutter,dart,google-cloud-firestore,snapshot,Firebase,Flutter,Dart,Google Cloud Firestore,Snapshot,快照为空,并不断提供无休止的循环进度指示器,而不是加载帖子。我试图让它将文章加载到页面上,并将其添加到数据库中,但在屏幕上看到文章只会给出一个无止境的加载状态。代码如下: Widget feed = FutureBuilder( future: _getFeedFuture, builder: (BuildContext ctx, AsyncSnapshot snapshot) { if (snapshot.connectionState == C

快照为空,并不断提供无休止的循环进度指示器,而不是加载帖子。我试图让它将文章加载到页面上,并将其添加到数据库中,但在屏幕上看到文章只会给出一个无止境的加载状态。代码如下:

    Widget feed = FutureBuilder(
      future: _getFeedFuture,
      builder: (BuildContext ctx, AsyncSnapshot snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting ||
            snapshot.data == null) {
          return Column(
            mainAxisAlignment: MainAxisAlignment.center,
            mainAxisSize: MainAxisSize.max,
            children: <Widget>[
              CircularProgressIndicator(),
              SizedBox(
                height: 16.0,
              ),
              Text('Loading ....'),
            ],
          );
        } else if (snapshot.data.length == 0) {
          return Text('No data to display');
        } else {
          return Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisAlignment: MainAxisAlignment.start,
            children: _posts,
          );
        }
      },
    );

    _items.add(feed);

    return _items;
  }
Widget feed=FutureBuilder(
未来:_getFeedFuture,
生成器:(BuildContext ctx,异步快照){
如果(snapshot.connectionState==connectionState.waiting||
snapshot.data==null){
返回列(
mainAxisAlignment:mainAxisAlignment.center,
mainAxisSize:mainAxisSize.max,
儿童:[
CircularProgressIndicator(),
大小盒子(
身高:16.0,
),
文本(“加载…”),
],
);
}else if(snapshot.data.length==0){
返回文本(“无数据显示”);
}否则{
返回列(
crossAxisAlignment:crossAxisAlignment.start,
mainAxisAlignment:mainAxisAlignment.start,
儿童:_posts,
);
}
},
);
_添加(提要);
退货(物品);;
}
getFuturefeed等于下面的get Feed

  Future _getFeed() async {
    _posts = [];

    Query _query = _firestore
        .collection('posts')
        .orderBy('created', descending: true)
        .limit(10);
    QuerySnapshot _quertSnapshot = await _query.getDocuments();

    _postDocuments = _quertSnapshot.documents;
    _lastDocument = _postDocuments[_postDocuments.length - 1];

    for (var i = 0; i < _postDocuments.length; ++i) {
      Widget w = _makeCard(_postDocuments[i]);

      _posts.add(w);
    }

    return _postDocuments;
  }
Future\u getFeed()异步{
_员额=[];
查询(Query=)
.collection(“posts”)
.orderBy('created',降序:true)
.限额(10);
QuerySnapshot\u QuerySnapshot=wait\u query.getDocuments();
_postDocuments=\u querysnapshot.documents;
_lastDocument=_postDocuments[_postDocuments.length-1];
对于(变量i=0;i<\u postDocuments.length;++i){
Widget w=_makeCard(_postDocuments[i]);
_增加(w);
}
归还邮寄文件;
}

因此我建议在if(snapshot.connectionState==connectionState.waiting | | snapshot.data==null)上方放置两个print语句{查看连接状态和SnAsHOTH.DATA。此外,GETFIX方法似乎假定它总是得到它所期望的。也需要考虑可能出现的错误。@ GRAAMHD SNAPHOTH.DATA打印为NULL。因此,当快照为NULL时,您将总是看到SpnEnter。它不会返回任何东西。您需要优雅地处理它,不要显示无休止的旋转。这在我的设备中发生,但在emulator中工作正常。