You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 22:32:41