Flutter遍历Firestore文档ID并获取索引(解决Iterable错误)
获取Firestore文档ID的索引并修复遍历错误
问题说明
已成功获取Firestore集合prova中所有文档的ID,但尝试获取每个ID的索引时,代码报错:"Spread elements in a list or set literals must implement 'Iterable'"。
原代码如下:
FirebaseFirestore.instance .collection('prova') .get() .then((QuerySnapshot querySnapshot) { querySnapshot.docs.forEach((doc) { print(doc.id); // 这行代码报错 var a = <String>{...doc.id}; print(a); }); });
当前输出仅打印文档ID:
I/flutter (29392): G0luyVnh1ahW5bfSqh8k I/flutter (29392): V7ts6hEYqQiM4creal1O I/flutter (29392): Xf3zzLzBzF3dzQ4OT9oO I/flutter (29392): iKSjc3HQCAvzmaCMpFcg I/flutter (29392): jxHT2TwMTfRf8SjbidK2
错误原因
报错的核心是var a = <String>{...doc.id};这行代码:
doc.id是单个字符串类型,并非Iterable(比如列表、集合这类可迭代对象)- 扩展运算符
...要求右侧必须是可迭代类型,用来将元素展开到集合/列表中,这里用在单个字符串上不符合语法要求,而且这行代码和你获取索引的需求无关,完全可以删除。
正确解法
要获取每个文档ID对应的索引,有两种简单的实现方式:
方法1:使用forEachIndexed(需导入collection包)
通过forEachIndexed可以直接拿到遍历的索引和对应的文档对象:
// 先导入collection包 import 'package:collection/collection.dart'; FirebaseFirestore.instance .collection('prova') .get() .then((QuerySnapshot querySnapshot) { querySnapshot.docs.forEachIndexed((index, doc) { print('索引:$index,文档ID:${doc.id}'); }); });
方法2:普通for循环遍历
将文档列表取出后,用标准for循环遍历,直接通过循环变量i获取索引:
FirebaseFirestore.instance .collection('prova') .get() .then((QuerySnapshot querySnapshot) { final docs = querySnapshot.docs; for (int i = 0; i < docs.length; i++) { final doc = docs[i]; print('索引:$i,文档ID:${doc.id}'); } });
两种方法都能输出每个文档ID对应的索引,满足你的需求。
内容的提问来源于stack exchange,提问作者Giovanni
相关产品推荐
相关产品推荐

