how to add or remove item to the the existing array in firestore ?

前端 未结 2 1617
梦毁少年i
梦毁少年i 2020-12-19 13:27

Firestore has recently add the new new method FieldValue.arrayUnion(value) and FieldValue.arrayRemove(value) but i couldn\'t find the implementation in flutter cloud_firesto

相关标签:
2条回答
  • 2020-12-19 13:44

    Update: And now it seems that it is supported! With the version 0.8.0.

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

    And then use FieldValue.arrayUnion and FieldVale.arrayRemove.


    There doesn't seems to be a way currently. Please follow the following two github issues:

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

    0 讨论(0)
  • 2020-12-19 13:57

    Here is the simple example to show how to update the array values. My document have an up voters array to add the user id's who have up-votes the document.

    configure firestore, the config details can be copied form your google-services.json file

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

    update code using transaction

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

    Hope it helps

    0 讨论(0)
提交回复
热议问题