扑火,在数组中添加新对象

时间:2018-12-07 07:36:26

标签: firebase flutter google-cloud-firestore

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

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

这显示了错误,我该如何用颤振来实现?

4 个答案:

答案 0 :(得分:5)

正确格式为:

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

updateDataMap<String,dynamic>作为数据。

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

答案 1 :(得分:1)

这是我构建的工作功能,它将新的Map添加到Firestore Services类中的数组。我正在使用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);
    }
  }

'''

答案 2 :(得分:0)

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

var list = List<ObjectType>();
list.add(obj);
Firestore.instance.collection('city').document('Attractions').updateData({"data": FieldValue.arrayUnion(obj)});

答案 3 :(得分:0)

空安全码:

说这是你要添加的数据

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