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

Flutter中如何向Firebase现有数组添加Map数据

问题

我用以下代码向Firebase上传数据:

List<Map<String, dynamic>> mapData = [
    {
      'name': 'name1',
      'done': false,
      'frequency': '1',
    },
    {
      'name': 'name2',
      'done': false,
      'frequency': '5',
    },
  ];

if (isExist == false && listNameController.text.isNotEmpty) {
        await Firestore.instance
            .collection(widget.user.uid)
            .document(listNameController.text.toString().trim())
            .setData({
          'users': mapData,
        });

现在我想添加更多数据,尝试了下面的代码但会覆盖全部内容,请问如何仅向'users'数组中添加新数据?

Firestore.instance
.collection(widget.user.uid)
.document(widget.currentList.keys.elementAt(widget.i))
.updateData({
'users': {
'name': 'name3',
'done': false,
'frequency': '7'
},

解决方案

你当前的updateData写法是直接替换users字段,自然会覆盖原有数组。要向Firestore数组中追加元素,需要使用**FieldValue.arrayUnion()**方法——它会把新元素添加到数组末尾,还能自动避免重复(不需要去重也可以使用,默认行为是去重)。

修改后的代码如下:

Firestore.instance
    .collection(widget.user.uid)
    .document(widget.currentList.keys.elementAt(widget.i))
    .updateData({
  'users': FieldValue.arrayUnion([
    {
      'name': 'name3',
      'done': false,
      'frequency': '7'
    }
  ]),
});

注意事项

  • arrayUnion()接收的参数是数组,哪怕只添加一个元素也要用数组包裹
  • 确保新添加的Map结构和原有数组里的元素结构一致,避免数据格式混乱
  • 如果你的Firestore版本较新,需要导入package:cloud_firestore/cloud_firestore.dart来获取FieldValue

内容的提问来源于stack exchange,提问作者Mat Koffman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:30:27