Is it possible to add/remove elements to an existing array field?

Question

Asked by Beginner_ on November 01, 2021 (source).

The Goal

Add/Remove an element to an already existing array field without retrieving it and errors.

What I Did

I want to add/remove my uid to the specified array when users press the Add/Remove buttons.

  //Remove my name from users list
  FirebaseFirestore.instance.collection("test").doc("ABC").update({
    "users": FieldValue.arrayRemove(
        <String>[FirebaseAuth.instance.currentUser!.uid])
  });


  //Add my name to users list 
  FirebaseFirestore.instance.collection("test").doc("ABC").update({
    "users": FieldValue.arrayUnion(
        <String>[FirebaseAuth.instance.currentUser!.uid])
  });

And pushed these buttons with android emulator.

Error

I couldn't find error in debug console, but line 60 of method_channel_document_reference.dart is marked yellow.

throw convertPlatformException(e);

flutter doctor

[√] Flutter (Channel beta, 2.6.0-5.2.pre, on Microsoft Windows [Version 10.0.22000.282], locale ja-JP)
    • Flutter version 2.6.0-5.2.pre at D:\src\flutter_windows_2.5.0-stable\flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 400608f101 (7 weeks ago), 2021-09-15 15:50:26 -0700
    • Engine revision 1d521d89d8
    • Dart version 2.15.0 (build 2.15.0-82.2.beta)

[√] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at D:\Android
    • Platform android-30, build-tools 29.0.3
    • Java binary at: D:\Program Files\Android\Android Studio\jre\bin\java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)
    • All Android licenses accepted.

[√] Chrome - develop for the web
    • Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe

[√] Android Studio (version 4.2)
    • Android Studio at D:\Program Files\Android\Android Studio
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6842174)

[√] VS Code (version 1.61.2)
    • VS Code at C:\Users\yukik\AppData\Local\Programs\Microsoft VS Code
    • Flutter extension version 3.27.0

[√] Connected device (3 available)
    • Android SDK built for x86 (mobile) • emulator-5554 • android-x86    • Android 10 (API 29) (emulator)
    • Chrome (web)                       • chrome        • web-javascript • Google Chrome 95.0.4638.54
    • Edge (web)                         • edge          • web-javascript • Microsoft Edge 95.0.1020.40

• No issues found!

Answer

Question answered by Farid S (source).

By looking at this Github thread, it looks like currently the FieldValue accepts only primitive values, which means that you will not be able to remove users using this method, [FirebaseAuth.instance.currentUser!.uid], unfortunately.

Have a look at the thread and see if you can get an update on this. Meanwhile, it looks like you will need to use a different approach.

DART FLUTTER GOOGLE-CLOUD-FIRESTORE
SHARE: