方案说明:使用:import'package:cloud_firestore / cloud_firestore.dart';
Cloud Firestore:一个集合“ sessionsLog”,其中包含具有以下字段的文档:“ sessionId”一个字符串“ isClosed”一个布尔值“ locationId”一个字符串和其他一些字段...
我只想检索所有带有'isClosed'错误布尔值的文档,然后执行一些操作。因此,我选择使用FutureBuilder(而不是streambuilder)进行操作:
FutureBuilder(
future: Firestore.instance.collection('sessionsLog')
.where('isClosed', isEqualTo: false).getDocuments();
builder: (ctx, sessionSnapshot) {
return RaisedButton(
child: Text('Search'),
onPressed: () async {
//some other code here, that needs async I added on top
if (sessionSnapshot.connectionState !=
ConnectionState.done) {
return CircularProgressIndicator();
}
if (!sessionSnapshot.hasData) {i should
print('nothing to show here');
}else {
//the below line of code is wrong, it could be print / or Text / or any other widget
//I've just added it for the sake of an example.
print(sessionSnapshot.data.documents[0]['parkingLocationName']);}});}),
上面的代码不起作用,我只是为了简单的代码结果创建了它,以便能够打印我正在检索的值,所以请不要在我的代码中修复某些问题。
还要注意,在我的代码逻辑中,总是只有一个文档带有'isClosed' = false
。因此,我应该总是收到一个文件。
但是,如果有所不同,请给我两个示例,一个示例,如果检索到的数据包含1个单个文档,另一个示例,如果可能包含多个文档,那么我将如何对数据进行迭代。
我只希望能够以正确的方式读取/访问我接收的数据,无论是打印字段信息还是将其显示为文本。任何事情,但是在上述情况下,我该怎么做。
真的很感谢基于我的代码场景的简单示例示例。
我将不使用FutureBuilder来执行此操作:
return Scaffold(
body: Container(
child: Center(
child: RaisedButton(
child: Text('Search'),
onPressed: () {
searchForDocs();
}),
),
),
);
未来:
void searchForDocs() async {
await Firestore.instance
.collection('sessionsLog')
.where('isClosed', isEqualTo: false)
.getDocuments()
.then((snapshot) {
if (snapshot.documents != null && snapshot.documents.length > 0) {
snapshot.documents.forEach(
(document) {
print(document['parkingLocationName']);
},
);
} else {
print('No Documents Found');
}
});}
我的输出:
I/flutter ( 2933): Example
I/flutter ( 2933): Example2`
如果您仍想使用FutureBuilder,请使用以下代码:
return Scaffold(
body: Container(
child: Center(
child: FutureBuilder(
future: Firestore.instance
.collection('sessionsLog')
.where('isClosed', isEqualTo: false)
.getDocuments(),
builder: (context, snapshot) {
return RaisedButton(
child: Text('Search'),
onPressed: () {
if (!snapshot.hasData) {
print('Nothing to show here');
} else {
if (snapshot.data.documents != null &&
snapshot.data.documents.length > 0) {
List<DocumentSnapshot> documents =
snapshot.data.documents;
documents.forEach((document) {
print(document['parkingLocationName']);
});
}
}
});
}),
),
),
);
我得到的输出与以前的解决方案相同:
I/flutter ( 2933): Example
I/flutter ( 2933): Example2`
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句