Firebase 扑动firestore,在数组中添加新对象

Firebase 扑动firestore,在数组中添加新对象,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我有一个对象数组,我想在用户在数组中输入新数据时添加新对象 Firestore.instance.collection(city).document('Attractions').updateData( "data", FieldValue.arrayUnion(obj) ); 这显示了错误,如何使用颤振实现这一点?正确的格式是: Firestore.instance.collection(city).

我有一个对象数组,我想在用户在数组中输入新数据时添加新对象

Firestore.instance.collection(city).document('Attractions').updateData(
                        "data", FieldValue.arrayUnion(obj)
                      );
这显示了错误,如何使用颤振实现这一点?

正确的格式是:

Firestore.instance.collection(city).document('Attractions').updateData({"data": FieldValue.arrayUnion(obj)});
updateData
Map
作为数据


在您的代码中,您使用的是作为键值之间的分隔符,而它应该是

@anmol.majhail's是正确的,但要解决@Sami Ullah的问题,您必须首先创建一个列表,并将对象添加到列表中,如下所示:

var list = [objectBeingAdded];
Firestore.instance.collection('city').document('Attractions').updateData({"data": FieldValue.arrayUnion(list)});


这是我构建的一个工作函数,它将新映射添加到Firestore服务类中的数组中。我正在使用Json Serializable注释我的所有模型类。userTemplateSections是我的userTemplate firestore文档中的一个数据字段。我将userTemplate作为“addUserTemplateSection”函数的构造函数,以确保我正在编辑正确的文档

我还添加了从firestore文档数组中删除地图的功能

'''

Future addUserTemplateSection(
{UserTemplate UserTemplate,字符串标题,字符串摘要})异步{
试一试{
最终用户模板节用户模板节=
UserTemplateSection(标题:标题,摘要:摘要);
等待!
.document(FirestorePath.userTemplate(uid,userTemplate.id))
更新数据(
{
“userTemplateSections”:
FieldValue.arrayUnion([userTemplateSection.toJson()])
},
);
}捕获(e){
印刷品(e);
}
}
'''

'''

Future deleteUserTemplateSection({
用户模板用户模板,
UserTemplateSection UserTemplateSection,
})异步的{
试一试{
等待!
.document(FirestorePath.userTemplate(uid,userTemplate.id))
更新数据(
{
“userTemplateSections”:
FieldValue.arrayRemove([userTemplateSection.toJson()])
},
);
}捕获(e){
印刷品(e);
}
}
''”

空安全代码: 假设这是您要添加的数据

Map someData={
"福":1,,
“酒吧”:没错,
};
  • 添加具有唯一自动生成ID的数据:

    var collection=FirebaseFirestore.instance.collection('collection');
    收集
    .添加(某些数据)
    。然后(())=>打印('Added'))
    .catchError((error)=>打印('Add failed:$error');
    
  • 使用您自己的ID添加数据:

    var collection=FirebaseFirestore.instance.collection('collection');
    收集
    .doc('document_id')//打印('Added'))
    .catchError((error)=>打印('Add failed:$error');
    
  • 将对象添加到数组:

    var collection=FirebaseFirestore.instance.collection('collection');
    收集
    .doc('document_id')//打印('Add failed:$error');
    

感谢您的帮助,我尝试过,但现在我遇到了错误:错误状态:参数类型“Map”无法分配给参数类型“List”,您需要添加更多代码,以便我进行调试。另外,新的错误也可能是其他代码区域的错误。FieldValue.arrayUnion接受一个列表。使用此选项,它将修复您的错误-Firestore.instance.collection(city.document('Attractions')).updateData({“data”:FieldValue.arrayUnion([obj]);使用更新的代码和新错误编辑您的问题在firestore中更新数据时,您在哪里使用“列表”对象?他打算使用它而不是FieldValue.arrayUnion(obj)中的“obj”。更简单的方法是只做FieldValue.arrayUnion([obj])。@AlexHartford我知道,我只是觉得如果我做了两个陈述而不是一个陈述,那么会更容易理解和注意到。你仍然需要用你当前的答案更正obj->list。用[]包装obj帮了我。谢谢
Future<void> addUserTemplateSection(
      {UserTemplate userTemplate, String title, String summary}) async {
    try {
      final UserTemplateSection userTemplateSection =
          UserTemplateSection(title: title, summary: summary);
      await _firestore
          .document(FirestorePath.userTemplate(uid, userTemplate.id))
          .updateData(
        {
          'userTemplateSections':
              FieldValue.arrayUnion([userTemplateSection.toJson()])
        },
      );
    } catch (e) {
      print(e);
    }
  }
Future<void> deleteUserTemplateSection({
    UserTemplate userTemplate,
    UserTemplateSection userTemplateSection,
  }) async {
    try {
      await _firestore
          .document(FirestorePath.userTemplate(uid, userTemplate.id))
          .updateData(
        {
          'userTemplateSections':
              FieldValue.arrayRemove([userTemplateSection.toJson()])
        },
      );
    } catch (e) {
      print(e);
    }
  }