首页 > 解决方案 > Flutter & Cloud-Firestore:如何阅读链接到 Flutter FutureBuilder 的 Firestore 文档

问题描述

场景解释:使用:import 'package:cloud_firestore/cloud_firestore.dart';

Cloud Firestore:一个集合'sessionsLog',包含具有以下字段的文档:'sessionId'一个字符串'isClosed'一个布尔'locationId'一个字符串和一些其他字段......

我想检索所有带有 false bool 的“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. 所以,我应该总是收到一份文件。

但如果不同,请给我 2 个示例,一个如果检索到的数据包含 1 个单个文档,另一个如果可能有多个文档,因此我将如何迭代数据。

我只想要正确的方法来读取/访问我收到的数据,无论是打印字段信息,还是以文本形式显示它们。任何事情,但是在上面确切解释的场景中,我将如何做到这一点。

非常感谢基于我的代码场景的简单示例示例。

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


你可以在未来这样做:

Future<void> performActionsOnClosed() async {
    await FirebaseFirestore.instance
        .collection('sessionsLog')
        .where('isClosed', isEqualTo: false)
        .get()
        .then(
      (snapshot) {
        if (snapshot.docs.isNotEmpty) {
          // Perform actions
        } else {
          print('No Documents Found');
        }
      },
    );
  }

推荐阅读