Могу ли я получить доступ к идентификатору документа с помощью этого вызова снимка? - PullRequest
0 голосов
/ 20 июня 2020

Это streambuilder, который я использую для доступа ко всем документам одновременно

 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 для получить доступ к идентификаторам документов индивидуально? если нет, то какой вариант? Спасибо

Ответы [ 3 ]

2 голосов
/ 20 июня 2020

Вы можете создать собственный конструктор объекта для использования данных из моментального снимка документа.

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]
);
0 голосов
/ 20 июня 2020

ЭТО РАБОТАЕТ ДЛЯ МЕНЯ:

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,
      );
0 голосов
/ 20 июня 2020

Вы можете получить 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,
          );
        },
      ),
    )
...