Flutter FutureBuilder返回空错误已触发

时间:2018-10-17 04:57:48

标签: flutter google-cloud-firestore

我正在尝试从Firestore数据库中的给定文档返回评论和文章字段。我利用将来的构建器通过ListTile返回此数据。

当我运行它时,在成功成功显示平铺之前,屏幕短暂变为红色,并呈现以下错误。错误是: 生成函数返回null。令人讨厌的小部件是:FutureBuilder生成函数绝不能返回null。要返回使建筑物小部件填充可用空间的空白空间,请返回“ new Container()”。要返回占用尽可能少空间的空白空间,请返回“新容器(宽度:0.0,高度:0.0)”。

这是我的代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class PostGetter extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
// TODO: implement build
return new Scaffold(
  body: new Container(
    child: new FutureBuilder(
        future: Firestore.instance
            .collection('post')
            .where('article', isEqualTo: 'lpquVtoRNsu0vBLjNByS')
            .getDocuments(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if (snapshot.hasData) {
            if (snapshot.data != null) {
              return new Column(
                children: <Widget>[
                  new Expanded(
                    child: new ListView(
                      children: snapshot.data.documents
                          .map<Widget>((DocumentSnapshot document) {
                        return new ListTile(
                          title: new Text(document['comment']),
                          subtitle: new Text(document['author']),
                        );
                      }).toList(),
                    ),
                  ),
                ],
              );
            } else {
              return new CircularProgressIndicator();
            }
          }
        }),),
);
  }
}

为什么循环进度指示器不能满足返回小部件的需要?

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

尝试一下:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';

class PostGetter extends StatelessWidget {

  @override
  Widget build(BuildContext context) {
// TODO: implement build
return new Scaffold(
  body: new Container(
    child: new FutureBuilder(
        future: Firestore.instance
            .collection('post')
            .where('article', isEqualTo: 'lpquVtoRNsu0vBLjNByS')
            .getDocuments(),
        builder: (BuildContext context, AsyncSnapshot snapshot) {
          if (snapshot.hasData) {
            if (snapshot.data != null) {
              return new Column(
                children: <Widget>[
                  new Expanded(
                    child: new ListView(
                      children: snapshot.data.documents
                          .map<Widget>((DocumentSnapshot document) {
                        return new ListTile(
                          title: new Text(document['comment']),
                          subtitle: new Text(document['author']),
                        );
                      }).toList(),
                    ),
                  ),
                ],
              );
            } 
          }else {
              return new CircularProgressIndicator();
            }
        }),),
);
  }
}

否则应位于快照上。具有数据,而不应位于快照上。= null