繁体   English   中英

flutter firestore,在数组中添加新对象

[英]flutter firestore, add new object in array

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

Firestore.instance.collection(city).document('Attractions').updateData(
                        "data", FieldValue.arrayUnion(obj)
                      );

这显示错误,我怎样才能用 flutter 实现这个?

正确的格式是:

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

updateDataMap<String,dynamic>作为数据。

在您的代码中,作为键值之间的分隔符应该是:

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

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

空安全代码:

假设这是您要添加的数据

Map<String, dynamic> someData = {
  'foo': 1,
  'bar': true,
};
  • 添加具有唯一自动生成 ID 的数据:

     var collection = FirebaseFirestore.instance.collection('collection'); collection.add(someData).then((_) => print('Added')).catchError((error) => print('Add failed: $error'));
  • 添加带有您自己的 ID 的数据:

     var collection = FirebaseFirestore.instance.collection('collection'); collection.doc('document_id') // <-- Document ID.set(someData).then((_) => print('Added')).catchError((error) => print('Add failed: $error'));
  • 将对象添加到数组:

     var collection = FirebaseFirestore.instance.collection('collection'); collection.doc('document_id') // <-- Document ID.set({'data': FieldValue.arrayUnion(list)}) // <-- Add data.then((_) => print('Added')).catchError((error) => print('Add failed: $error'));

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

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

'''

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);
    }
  }

'''

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM