Как добавить или удалить элемент в существующий массив в FireStore? - PullRequest
0 голосов
/ 03 сентября 2018

Firestore недавно добавил новый новый метод FieldValue.arrayUnion (значение) и FieldValue.arrayRemove (значение), но я не смог найти реализацию в пакете flutter cloud_firestore. Есть ли способ достичь этого результата?

Firestore addUpdate: https://firebase.google.com/docs/firestore/manage-data/add-data#update_elements_in_an_array

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Вот простой пример, показывающий, как обновить значения массива. В моем документе есть массив голосов избирателей для добавления идентификаторов пользователей, которые проголосовали за документ.

настроить firestore, сведения о конфигурации можно скопировать из вашего google-services.json файла

   final FirebaseApp app = await FirebaseApp.configure(
    name: 'test',
    options: const FirebaseOptions(
      projectID: 'projid',
      googleAppID: 'appid',
      apiKey: 'api',
      databaseURL: 'your url',
    ),
  );
  final Firestore firestore = Firestore(app: app);

  await firestore.settings(timestampsInSnapshotsEnabled: true);

обновить код с использованием транзакции

fireStore.runTransaction((Transaction tx) async {
            DocumentSnapshot snapshot =
                await tx.get(widget._document.reference);
            var doc = snapshot.data;
            if (doc['upvoters'].contains('12345')) {
              await tx.update(snapshot.reference, <String, dynamic>{
                'upvoters': FieldValue.arrayRemove(['12345'])
              });
            } else {
              await tx.update(snapshot.reference, <String, dynamic>{
                'upvoters': FieldValue.arrayUnion(['12345'])
              });
            }
          });

Надеюсь, это поможет

0 голосов
/ 03 сентября 2018

Обновление: И теперь кажется, что это поддерживается! С версией 0.8.0.

https://pub.dartlang.org/packages/cloud_firestore

А затем используйте FieldValue.arrayUnion и FieldVale.arrayRemove.


Кажется, сейчас нет пути. Пожалуйста, следуйте следующим двум вопросам GitHub:

https://github.com/flutter/flutter/issues/21148 https://github.com/flutter/flutter/issues/20688

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...