如何使用 QuerySnapshot 在 firestore flutter 中获取文档 ID

How to get document id in firestore flutter using QuerySnapshot

我正在尝试使用 QuerySnapshot 从我的数据库中获取数据(实时)。 我也需要更新我的数据。这是我的方法,我不知道如何在这个方法中获取我的 documentID。

class LoadData extends StatefulWidget {
  const LoadData({Key? key}) : super(key: key);

  @override
  _LoadDataState createState() => _LoadDataState();
}

class _LoadDataState extends State<LoadData> {
  //Read Data in realTime Snapshot
  final Stream<QuerySnapshot> _cupCakeStream = FirebaseFirestore.instance
      .collection('cupcake')
      .snapshots(includeMetadataChanges: true);

  @override
  Widget build(BuildContext context) {
    return StreamBuilder<QuerySnapshot>(
      stream: _cupCakeStream,
      builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
        if (snapshot.hasError) {
          return Text('Something went wrong');
        }

        if (snapshot.connectionState == ConnectionState.waiting) {
          return Text("Loading");
        }

        return ListView(
          shrinkWrap: true,
          children: snapshot.data!.docs.map((DocumentSnapshot document) {
            Map<String, dynamic> data =
                document.data()! as Map<String, dynamic>;
            print(data); //**Print collection only..I need to get documentID with each collection**
            return ListTile(
              title: Text(data['cupcake_name']),
              subtitle: Text(data['description']),
            );
          }).toList(),
        );
      },
    );
  }
}

documentDocumentSnapshot and has an id 属性.

所以,下面应该可以解决问题:

    return ListView(
      shrinkWrap: true,
      children: snapshot.data!.docs.map((DocumentSnapshot document) {
        Map<String, dynamic> data =
            document.data()! as Map<String, dynamic>;
        print(data); 
        
        print(document.id);   // <= Should print the doc id             

        return ListTile(
          title: Text(data['cupcake_name']),
          subtitle: Text(data['description']),
        );
      }).toList(),
    );