Flutter中使用multi_select_flutter获取选中数据并写入Firestore
解决multi_select_flutter选中项提取数据存Firestore的问题
直接打印_selectedAnimals2显示Instance of 'Animal'是因为默认打印对象会输出类实例的描述,要提取id和name存Firestore,按以下方法操作:
1. 直接访问选中项的属性
遍历选中列表,逐个提取id和name并转换为Firestore支持的Map格式:
// 遍历选中的Animal对象 for (var animal in _selectedAnimals2) { // 提取属性 String animalId = animal.id; String animalName = animal.name; // 转换为Firestore可存储的Map Map<String, dynamic> animalData = { 'id': animalId, 'name': animalName }; // 写入Firestore(示例代码) await FirebaseFirestore.instance.collection('animals').add(animalData); }
2. 批量转换为Map列表
如果需要将所有选中项作为数组字段写入Firestore文档,可批量转换:
// 将选中列表转为Map列表 List<Map<String, dynamic>> selectedAnimalsData = _selectedAnimals2.map((animal) { return { 'id': animal.id, 'name': animal.name }; }).toList(); // 写入到某个文档的数组字段(示例) await FirebaseFirestore.instance .collection('users') .doc('当前用户ID') .update({ 'selected_animals': selectedAnimalsData });
3. (可选)重写toString方便调试
如果想打印选中项时直接看到具体值,可在Animal类中重写toString方法:
class Animal { final String id; final String name; Animal({required this.id, required this.name}); // 重写toString @override String toString() { return 'Animal(id: $id, name: $name)'; } }
之后打印_selectedAnimals2就能看到包含id和name的描述,但存储数据时仍需按前两种方法提取属性。
注意:确保
Animal类的id和name是公开可访问的(没有_前缀),如果是私有属性,需要添加getter方法或改为公开。
内容的提问来源于stack exchange,提问作者Kavishika_Kahandawala
相关产品推荐
相关产品推荐

