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

Flutter Web 向Firebase写入Map列表时categories字段被覆盖如何解决

问题原因

你当前的代码存在两个问题:

  • 循环中每次都向data写入key为categories的条目,相同key的赋值会直接覆盖原有值
  • 你需要的categories字段是一个存储所有分类对象的列表,而非每次写入单个分类对象

修复后的代码

final Map<String, dynamic> data = await partnerModifyData.toMap();

final List<int> listCategoriesIds =
    partnerModifyData.companyCategoriesPtrSelected.cast<int>().toList();

final List<CategoryData> categoriesData =
    listCategoyData.where((category) => listCategoriesIds.contains(category.id)).toList();

// 1. 取出原data中已有的categories列表,不存在则初始化空列表
List<dynamic> existingCategories = data['categories'] ?? [];

// 2. 格式化生成需要新增的分类对象列表
// 如果你的目标结构需要外层包categories键,可自行调整此处map的返回结构
final newCategories = categoriesData
    .map(
      (category) => {
        'id': category.id,
        'title': category.title,
      },
    )
    .toList();

// 3. 合并新旧分类后赋值回data的categories字段
existingCategories.addAll(newCategories);
data['categories'] = existingCategories;

修改后data['categories']会是包含原有分类+新增分类的列表,符合Firebase数组类型字段的存储要求。


内容的提问来源于stack exchange,提问作者Mathias Scherer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:03