【问题标题】:Getting the document ID of a ListTile item获取 ListTile 项的文档 ID
【发布时间】:2022-01-19 21:58:09
【问题描述】:

当点击 Tile 时,我正在尝试从 Flutter 中的 Firebase 获取 ListTile 的文档 ID:

Stream collectionStream = FirebaseFirestore.instance.collection('items').snapshots();
Stream documentStream = FirebaseFirestore.instance.collection('items').doc('ABC123').snapshots();

class AllItemList extends StatefulWidget {
  @override
  _AllItemListState createState() => _AllItemListState();
}

class _AllItemListState extends State<AllItemList> {
  final Stream<QuerySnapshot> _itemStream = FirebaseFirestore.instance.collection('items').snapshots();

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

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

        return ListView(
          //physics: const NeverScrollableScrollPhysics(),
          shrinkWrap: true,
          children: snapshot.data!.docs.map((DocumentSnapshot document) {
            Map<String, dynamic> data = document.data()! as Map<String, dynamic>;
            return ListTile(
              title: Text(data['title']),
              subtitle: Text(data['userName']),
              trailing: Text('Priority: '+data['priority'].toString()),
              onTap: (){
                print('This Document ID');
              },
            );
          }).toList(),
        );
      },
    );
  }
}

我查看了这篇文章: Flutter - How can i query the same document id - on the next page - as a ListTile that was previously clicked

但我还是卡住了

【问题讨论】:

  • 放置文档时可以将该docid保存为字段,这样就可以从保存的文档中获取id

标签: flutter google-cloud-firestore


【解决方案1】:

我的实现可能与你的有点不同,但我使用:

document.reference.id

例子:

_dataSource.snapshots().listen((event) {
  final List<Thing> documents = event.docs.map((document) => document
    .data()
    .rebuild((doc) => doc..firebaseDocumentId = document.reference.id)).toList();
    // doing my biz logic here

});

忽略.rebuild,它只是我正在使用的built_value 库的一部分

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2021-07-20
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多