Flutter Firestore - 查找 `Document Snapshot` id

Flutter Firestore - Find `Document Snapshot` id

我有一个带有产品列表的简单应用程序。产品存储在 Firebase Firestore 上。我想下载产品列表并让用户有可能更新一些数据。

所以我准备了产品清单:

Widget _buildProductsList() {
  return new StreamBuilder(
    stream: Firestore.instance
        .collection('products')
        .snapshots,
    builder: (context, snapshot) {
      if (!snapshot.hasData) return new Text("Loading...");

      return new ListView(
        children: snapshot.data.documents.map((document) {
          Product product = new Product(document.data);
          _ProductCell cell = new _ProductCell();
          cell.product = product;
          return cell;
        }).toList(),
      );
    },
  );
}

我将文档快照序列化到我的产品对象:

class Product {

    static const NAME_KEY = 'name';
    static const DESC_KEY = 'desc';
    static const PHOTO_URL_KEY = 'photoUrl';
    static const AUTHOR_ID_KEY = 'authorId';
    static const CREATED_AT_KEY = 'createdAt';

    String name;
    String description;
    String photoUrl;
    String authorId;
    int createdAt;

    Product(Map<String, dynamic> json) {
        name = json[NAME_KEY];
        description = json[DESC_KEY];
        photoUrl = json[PHOTO_URL_KEY];
        authorId = json[AUTHOR_ID_KEY];
        createdAt = json[createdAt];
    }
}

现在,当用户与 ProductCell 进行一些交互时,我想更新与之链接的 Firestore 中的产品文档,但我没有 ID,因此无法创建正确的 Firestore 引用。

如何实现?

昨天我遇到了同样的错误,所以我已经就此提出了一个问题。你可以在这里跟踪它:https://github.com/flutter/flutter/issues/12471

目前 FireStore 插件还有一些问题。 您可以通过过滤插件来查看 Firebase 插件的所有问题: https://github.com/flutter/flutter/labels/plugin%3A%20firebase

由于问题 #12471 已解决,您可以从文档对象中获取文档 ID。

print(document.documentID)

此语法已经更新,您现在可以从

获取它
print(document.id);

https://pub.dev/documentation/firebase/latest/firebase_firestore/DocumentSnapshot/id.html