Convert list to object array when using FieldValue (#795)
diff --git a/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java b/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java index 38c9ffd..bdc156b 100644 --- a/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java +++ b/packages/cloud_firestore/android/src/main/java/io/flutter/plugins/firebase/cloudfirestore/CloudFirestorePlugin.java
@@ -640,9 +640,9 @@ final byte[] bytes = readBytes(buffer); return Blob.fromBytes(bytes); case ARRAY_UNION: - return FieldValue.arrayUnion(readValue(buffer)); + return FieldValue.arrayUnion(toArray(readValue(buffer))); case ARRAY_REMOVE: - return FieldValue.arrayRemove(readValue(buffer)); + return FieldValue.arrayRemove(toArray(readValue(buffer))); case DELETE: return FieldValue.delete(); case SERVER_TIMESTAMP: @@ -651,4 +651,18 @@ return super.readValueOfType(type, buffer); } } + + private Object[] toArray(Object source) { + if (source instanceof List) { + return ((List) source).toArray(); + } + + if (source == null) { + return new Object[0]; + } + + String sourceType = source.getClass().getCanonicalName(); + String message = "java.util.List was expected, unable to convert '%s' to an object array"; + throw new IllegalArgumentException(String.format(message, sourceType)); + } }