簡體   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