Can';不要让flifter基于Firebase数据创建多个小部件
我已经尝试了一个星期,搜索和更改我的代码,但我就是无法让它工作。。 我想在堆栈中创建一个小部件列表,并尝试了许多方法。以下是我使用forEach方法和StreamBuilder方法的测试代码: 方法1: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
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(),
);
},
),