【问题标题】:can i access the document id using this snapshot call?我可以使用此快照调用访问文档 ID 吗?
【发布时间】:2020-06-20 07:10:47
【问题描述】:

这是我用来一次访问所有文档的流构建器

 StreamBuilder(
        stream: Firestore.instance.collection('projects').snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) return Text('data is loading');
          return ListView.builder(
            itemBuilder: (ctx, index) {
              return ProjectItem(
                id: snapshot.data.documents[index]['id'],
                title: snapshot.data.documents[index]['title'],
                members: snapshot.data.documents[index]['members'],
                complexity: snapshot.data.documents[index]['complexity'],
                affordability: snapshot.data.documents[index]['affordability'],
                duration: snapshot.data.documents[index]['duration'],
                docid: snapshot.data.document[index].documentid,


              );
            },
            itemCount: snapshot.data.documents.length,
}

我可以使用 docid: snapshot.data.document[index].documentid 单独访问文档 ID 吗?如果不是什么选择?谢谢

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore snapshot


    【解决方案1】:

    您可以创建自定义对象构造函数来使用文档快照中的数据。

    class ProjectItem {
      String id;
      String title;
      String members;
      String complexity;
      String affordability;
      String duration;
      String docid;
    
      ProjectItem({....});
    
      factory ProjectItem.fromFirestore(DocumentSnapshot doc) {
        return ProjectItem(
          id: doc.data['id'],
          title: doc.data['title'],
          members: doc.data['members'],
          complexity: doc.data['complexity'],
          affordability: doc.data['affordability'],
          duration: doc.data['duration'],
          docid:  doc.documentID,
        );
      }
    }
    

    然后在列表视图中使用这个构造函数来创建对象

    return ProjectItem.fromFirestore(
       snapshot.data.documents[index]
    );
    

    【讨论】:

    • 将问题标记为已回答
    【解决方案2】:

    这样就可以得到documentID了

    StreamBuilder(
            stream: Firestore.instance.collection('projects').snapshots(),
            builder: (context, snapshot) {
              if (!snapshot.hasData) return Text('data is loading');
              return ListView.builder(
                itemBuilder: (ctx, index) {
                  QuerySnapshot snap = snapshot.data; // Snapshot
                  List<DocumentSnapshot> items = snap.documents; // List of Documents
                  DocumentSnapshot item = items[index]; Specific Document
                  return ProjectItem(
                    id: item.data['id'],
                    title: item.data['title'],
                    members: item.data['members'],
                    complexity: item.data['complexity'],
                    affordability: item.data['affordability'],
                    duration: item.data['duration'],
                    docid: item.documentID, // Document ID
                  ); 
                },
                itemCount: snapshot.data.documents.length,
              );
            },
          ),
        )
    

    【讨论】:

    • 让我的代码与另一个 sn-p 一起工作,但这看起来也合法,谢谢!
    【解决方案3】:

    这对我有用:

    StreamBuilder(
        stream: Firestore.instance.collection('projects').snapshots(),
        builder: (context, snapshot) {
          if (!snapshot.hasData) return Text('data is loading');
          return ListView.builder(
            itemBuilder: (ctx, index) {
              return ProjectItem(
                id: snapshot.data.documents[index]['id'],
                title: snapshot.data.documents[index]['title'],
                members: snapshot.data.documents[index]['members'],
                complexity: snapshot.data.documents[index]['complexity'],
                affordability: snapshot.data.documents[index]['affordability'],
                duration: snapshot.data.documents[index]['duration'],
                docid: snapshot.data.documents[index].documentID,
                
                
              );
            },
            itemCount: snapshot.data.documents.length,
          );
    

    【讨论】:

      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 2020-09-26
      • 2021-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-19
      • 2020-05-02
      相关资源
      最近更新 更多