【问题标题】:Flutter Firestore add Map inside of ArrayFlutter Firestore 在 Array 中添加 Map
【发布时间】:2021-03-22 01:05:27
【问题描述】:

在我的颤振应用程序中,我想添加具有如下地图样式的 firestore 新数组:

但我做不到。我正在使用这个函数来添加数组,但它不是那样工作的。这段代码添加这样的数组,例如:

如何更改此代码以添加如图一所示的数组?

void addData2() {
final FirebaseAuth auth = FirebaseAuth.instance;
final User user = auth.currentUser;
final uid = user.uid;

var map = new Map<String, dynamic>();
map['doOne'] = do1TextEditingController.text ;
map['doTwo'] = do2TextEditingController.text ;


FirebaseFirestore.instance.
collection('users').
doc(uid).
set({

  "arrayData": FieldValue.arrayUnion([
    map['doOne'],
    map['doTwo']

  ])

},SetOptions(merge: true)

).catchError((e) {
  print(e);
});

setState(() {
  isLoadingThree = false;
});

 }

【问题讨论】:

    标签: flutter google-cloud-firestore


    【解决方案1】:

    如果你想创建一个数组的新字段,只需传递数组即可。

    FirebaseFirestore.instance.
    collection('users').
    doc(uid).
    set({
      "arrayData": [ map ]
    },SetOptions(merge: true)
    

    这将创建一个包含一个项目的数组。如果您需要更多,只需在方括号中的数组中添加更多地图项。

    FieldValue.arrayUnion() 仅在您需要向现有数组字段添加更多项目时使用。

    【讨论】:

    • "arrayData": FieldValue.arrayUnion([ map ]) 我改变了这样的代码,这正是我需要的:D
    【解决方案2】:

    在您的情况下,您需要将一个对象传递给 arrayUnion 方法,以便能够在 Firebase 中创建地图。您当前仅传递值,这就是它创建值数组的原因。工作示例是这样的:

    // my code
    var yourObject = new Map<String, dynamic>();
    
    yourObject["one"] = 1;
    yourObject["two"] = 2;
    yourObject["three"] = false;
    yourObject["four"] = "text";
    yourObject["five"] = [
      1,2,3,4
    ];
    yourObject["six"] = [
      {
        "nestedOne": 1,
        "nestedTwo": false,
      },
      {
        "nestedThree": 2,
        "nestedFour": true,
      },
    ];
    
    var encodedObject = json.encode(yourObject);
    
    print(encodedObject);
    
    // your code
    FirebaseFirestore.instance.
    collection('users').
    doc(uid).
    set({
    
      "arrayData": FieldValue.arrayUnion([
        encodedObject 
      ])
    
    },SetOptions(merge: true)
    
    ).catchError((e) {
      print(e);
    });
    

    不过,最好为您的 firebase 文档模型创建 Class 并创建方法 toMap() 和命名构造函数 ClassName.fromMap(Map&lt;String, dynamic&gt; json) 以便能够将 Cloud Firestore 数据转换为您的对象并将这些对象转换为 Firestore 模型.

    【讨论】:

    • 你的意思是你不知道json是什么或者你不知道你会收到哪些字段?
    猜你喜欢
    • 2022-01-09
    • 2021-02-03
    • 2020-04-28
    • 2021-01-08
    • 2019-11-05
    • 2020-05-02
    • 2022-11-12
    • 2020-09-07
    • 2018-10-14
    相关资源
    最近更新 更多