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
Can';不要让flifter基于Firebase数据创建多个小部件_Firebase_Dart_Google Cloud Firestore_Flutter - Fatal编程技术网

Can';不要让flifter基于Firebase数据创建多个小部件

Can';不要让flifter基于Firebase数据创建多个小部件,firebase,dart,google-cloud-firestore,flutter,Firebase,Dart,Google Cloud Firestore,Flutter,我已经尝试了一个星期,搜索和更改我的代码,但我就是无法让它工作。。 我想在堆栈中创建一个小部件列表,并尝试了许多方法。以下是我使用forEach方法和StreamBuilder方法的测试代码: 方法1: class Recordlist extends StatelessWidget { @override Widget build(BuildContext context) { Firestore.instance.collection('records').documen

我已经尝试了一个星期,搜索和更改我的代码,但我就是无法让它工作。。 我想在堆栈中创建一个小部件列表,并尝试了许多方法。以下是我使用forEach方法和StreamBuilder方法的测试代码:

方法1:

class Recordlist extends StatelessWidget {

  @override
  Widget build(BuildContext context) {

    Firestore.instance.collection('records').document(uid).collection("pdrecords").getDocuments().then( (querySS) {
      querySS.documents.forEach( (doc) {
        return new Container();

      });

    }).catchError( (e) {
      return new Container();
    });
 }
}
上面提到的函数从未返回小部件

方法2:

class Recordlist extends StatelessWidget {


  @override
  Widget build(BuildContext context) {
Double count = 0.5;
return new StreamBuilder <QuerySnapshot>(
      stream: Firestore.instance.collection('records').document(uid).collection("pdrecords").snapshots(),
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {

        //final int recordCount = snapshot.data.documents.length;


        if (snapshot.hasData) {
          final int recordCount = snapshot.data.documents.length;
            print("got data. records: $recordCount");
            if (recordCount >0) {

              switch (snapshot.connectionState) {
                case ConnectionState.none: return new Text('');
                case ConnectionState.waiting: return new Text('Fetching data ...');
                case ConnectionState.active: {

                    count = count + 1.0; print("count: $count");
                    return new ListPDRecord(
                      margin: new EdgeInsets.only(bottom: 10.0) * count, // listSlidePosition * 5.5,
                      width: listTileWidth.value,
                      title: snapshot.data.documents.elementAt(0)['starttime'],
                      subtitle: snapshot.data.documents.elementAt(0)['endtime'],
                      image: nodata,
                      );

                }
                break;


                case ConnectionState.done: return new Text('Done:'); 
              }


            } else {
                return noDataListData(
                  listSlidePosition: listSlidePosition,
                  listTileWidth: listTileWidth,
                );
            }


 }
}
类记录列表扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
重复计数=0.5;
返回新的StreamBuilder(
流:Firestore.instance.collection('records').document(uid).collection('pdrecords').snapshots(),
生成器:(BuildContext上下文,异步快照){
//final int recordCount=snapshot.data.documents.length;
if(snapshot.hasData){
final int recordCount=snapshot.data.documents.length;
打印(“获取数据。记录:$recordCount”);
如果(记录计数>0){
交换机(快照.连接状态){
case ConnectionState.none:返回新文本(“”);
case ConnectionState.waiting:返回新文本('Fetching data…');
案例连接状态.active:{
计数=计数+1.0;打印(“计数:$count”);
返回新的ListPDRecord(
边距:仅新边集(底部:10.0)*计数,//listSlidePosition*5.5,
宽度:listTileWidth.value,
标题:snapshot.data.documents.elementAt(0)['starttime'],
字幕:snapshot.data.documents.elementAt(0)['endtime'],
图片:野田,
);
}
打破
case ConnectionState.done:返回新文本('done:');
}
}否则{
返回noDataListData(
listSlidePosition:listSlidePosition,
listTileWidth:listTileWidth,
);
}
}
}
无论Firebase数据库中有多少项,此方法始终显示1项。我怀疑它返回的位置相同,因此它有许多项堆叠在一起


我真的很困惑。非常感谢您的帮助。

您只构建了一次。您必须获取快照中的每个文档并将其映射到一个小部件。Firebase的操作方法如下

     StreamBuilder(
        stream: Firestore.instance
            .collection('flutter-posts')
            .orderBy('postTime', descending: true)
            .snapshots(),
        builder:
            (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          if (!snapshot.hasData)
            return const Center(child: CircularProgressIndicator());
          return ListView(
            padding: const EdgeInsets.only(top: 8.0),
            children:
                snapshot.data.documents.map((DocumentSnapshot document) {
              return SinglePost(
                document: document,
                currentUID: appState.firebaseUser.uid,
              );
            }).toList(),
          );
        },
      ),
StreamBuilder(
流:Firestore.instance
.collection('flatter-posts')
.orderBy('postTime',降序:true)
.snapshots(),
建设者:
(BuildContext上下文,异步快照){
如果(!snapshot.hasData)
返回常量中心(子项:CircularProgressIndicator());
返回列表视图(
填充:仅限常量边集(顶部:8.0),
儿童:
snapshot.data.documents.map((DocumentSnapshot文档){
回程单柱(
文件:文件,,
currentUID:appState.firebaseUser.uid,
);
}).toList(),
);
},
),