Flutter 和 Firebase:从 firebase 数组中删除项目(地图)

Max*_*axS 7 firebase flutter google-cloud-firestore

我目前正在努力从 firebase 列表中删除地图项。例如,我想从列表中(完全)删除项目“0”。

在此输入图像描述

我使用 updateData 方法通过 FieldValue.arrayUnion 将单个数组项添加到另一个位置。这工作得很好。在我的另一个地方,我希望能够从列表中删除该项目。我通过 StreamBuilder 加载数据并通过 ListView.builder 显示 ListTiles。现在我尝试用 arrayRemove 替换 arrayUnion,但它不起作用,我不明白为什么。这是我的代码:

onPressed: () async {
  try {
    await Firestore.instance
        .collection('users')
        .document(futSnap.data.uid)
        .collection('trainings')
        .document(widget.trainingID)
        .updateData(
      {
        'trainingTitle': widget.trainingTitle,
        'trainingID': widget.trainingID,
        'trainingDate': widget.trainingDate,
        'category': widget.trainingCategory,
        'trainingExercises':
            FieldValue.arrayRemove(
          [
            {
              'title': trainingExercises[i]
                  ['title'],
              'description':
                  trainingExercises[i]
                      ['description'],
              'imageURL': trainingExercises[i]
                  ['imageUrl'],
              'repetitions':
                  trainingExercises[i]
                      ['repetitions'],
            },
          ],
        )
      },
    );
  } catch (e) {
    print(e);
  }
},
Run Code Online (Sandbox Code Playgroud)

我没有收到任何错误或其他东西。仍然是颤振和编程的初学者,所以我们将非常感谢您的帮助:)

Max*_*axS 4

感谢您的回复,在进一步尝试中,看来现在确实有效:

onPressed: () async {
                              try {
                                await Firestore.instance
                                    .collection('users')
                                    .document(futSnap.data.uid)
                                    .collection('trainings')
                                    .document(widget.trainingID)
                                    .updateData(
                                  {
                                    'trainingExercises':
                                        FieldValue.arrayRemove(
                                      [trainingExercises[i]],
                                    )
                                  },
                                );
                              } catch (e) {
                                print(e);
                              }
                            },
Run Code Online (Sandbox Code Playgroud)

但公平地说,我完全不明白为什么,因为我的理解和你的一样,信息必须与整个地图相匹配..?我很高兴它能起作用,但理解为什么会很棒:D