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