Using FieldValue.arrayUnion with a DocumentReference fails in the latest cloud_firestore_web dependencies:
I looked into jsify in firebase_core_web and cloud_firestore_web again, however, I could not ifnd out why it would not do it.
@Ehesp Do you have an idea why jsify would fail in this particular case?
I can reproduce this using cloud_firestore_web: 0.2.1+1 and firebase_core_web: 0.2.1+1.
When I downgrade to firebase_core_web: 0.2.0 and cloud_firestore_web: 0.2.0+4, the array union works again.
final batch = FirebaseFirestore.instance.batch();
batch.update(documentReference, {
'fooBarList': FieldValue.arrayUnion([
{
'id': stringId,
'foo': fooDocumentReference,
'bar': barDocumentReference,
},
]),
'barList': FieldValue.arrayUnion([barDocumentReference]),
'fooList': FieldValue.arrayUnion([fooDocumentReference]),
});
await batch.commit();
Error: Invalid argument (dartObject): Could not convert: Instance of 'DocumentReference'
at Object.throw_ [as throw] (http://localhost:4200/dart_sdk.js:4348:11)
at Object.jsify (http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:75:17)
at http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:66:47
at LinkedMap.new.forEach (http://localhost:4200/dart_sdk.js:25081:11)
at Object.jsify (http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:65:27)
at MappedListIterable.new.<anonymous> (http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:53:82)
at MappedListIterable.new.elementAt (http://localhost:4200/dart_sdk.js:21874:25)
at ListIterator.new.moveNext (http://localhost:4200/dart_sdk.js:21668:55)
at JsIterator.next (http://localhost:4200/dart_sdk.js:6046:21)
at Function.of (http://localhost:4200/dart_sdk.js:43917:18)
at MappedListIterable.new.toList (http://localhost:4200/dart_sdk.js:21474:26)
at Object.jsifyList (http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:53:137)
at firestore._FieldValueArrayUnion.new.[_jsify] (http://localhost:4200/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:889:143)
at Object.jsifyFieldValue (http://localhost:4200/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:1000:30)
at http://localhost:4200/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:114:26
at Object.jsify (http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:73:56)
at http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:66:47
at LinkedMap.new.forEach (http://localhost:4200/dart_sdk.js:25081:11)
at Object.jsify (http://localhost:4200/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:65:27)
at Object.jsify (http://localhost:4200/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:106:18)
at firestore.WriteBatch._fromJsObject.[_wrapUpdateFunctionCall] (http://localhost:4200/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:245:41)
at firestore.WriteBatch._fromJsObject.update (http://localhost:4200/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:291:76)
at write_batch_web.WriteBatchWeb.new.update (http://localhost:4200/packages/cloud_firestore_web/src/write_batch_web.dart.lib.js:151:36)
at cloud_firestore.WriteBatch.__.update (http://localhost:4200/packages/cloud_firestore/cloud_firestore.dart.lib.js:1204:31)
Hi @creativecreatorormaybenot
Was this not fixed by https://github.com/FirebaseExtended/flutterfire/pull/4212?
Could you provide a minimal complete reproducible code sample?
Thank you
@markusaksli-nc No - the fix only addressed reading docs. This is about writing.
I added sample code in the issue. You can use any DocumentReference, where it says ..DocumentReference.
Reproducible on the latest master 1.24.0-8.0.pre.374 with cloud_firestore_web: ^0.2.1+1.
flutter doctor -v
[√] Flutter (Channel master, 1.24.0-8.0.pre.374, on Microsoft Windows [Version 10.0.19041.630], locale et-EE)
• Flutter version 1.24.0-8.0.pre.374 at C:\Development\flutter_master
• Framework revision 183f0e797a (14 hours ago), 2020-11-26 19:12:28 +0100
• Engine revision 20caf54969
• Dart version 2.12.0 (build 2.12.0-76.0.dev)
[√] Android toolchain - develop for Android devices (Android SDK version 30.0.2)
• Android SDK at C:\Users\marku\AppData\Local\Android\sdk
• Platform android-30, build-tools 30.0.2
• Java binary at: C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.6953283\jre\bin\java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b01)
• All Android licenses accepted.
[√] Chrome - develop for the web
• Chrome at C:\Program Files\Google\Chrome\Application\chrome.exe
[√] Visual Studio - develop for Windows (Visual Studio Community 2019 16.7.7)
• Visual Studio at C:\Program Files (x86)\Microsoft Visual Studio\2019\Community
• Visual Studio Community 2019 version 16.7.30621.155
• Windows 10 SDK version 10.0.18362.0
[√] Android Studio (version 4.1.0)
• Android Studio at C:\Users\marku\AppData\Local\JetBrains\Toolbox\apps\AndroidStudio\ch-0\201.6953283
• 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 1.8.0_242-release-1644-b01)
[√] Connected device (6 available)
• SM G950F (mobile) • ce12171c51cc001c03 • android-arm64 • Android 9 (API 28)
• sdk gphone x86 arm (mobile) • emulator-5554 • android-x86 • Android 11 (API 30) (emulator)
• Windows (desktop) • windows • windows-x64 • Microsoft Windows [Version 10.0.19041.630]
• Web Server (web) • web-server • web-javascript • Flutter Tools
• Chrome (web) • chrome • web-javascript • Google Chrome 87.0.4280.66
• Edge (web) • edge • web-javascript • Microsoft Edge 86.0.622.68
• No issues found!
Minimal reproducible code sample
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
FirebaseApp app = await Firebase.initializeApp();
assert(app != null);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Material App',
theme: ThemeData.dark(),
home: Home(),
);
}
}
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Firestore Example'),
),
body: Center(
child: Column(
children: [
RaisedButton(
child: const Text("Commit batch"),
onPressed: () async {
var documentReference = FirebaseFirestore.instance.collection('test').doc('testDoc');
var fooDocumentReference = FirebaseFirestore.instance.collection('test').doc('testA');
var barDocumentReference = FirebaseFirestore.instance.collection('test').doc('testB');
final batch = FirebaseFirestore.instance.batch();
batch.update(documentReference, {
'fooBarList': FieldValue.arrayUnion([
{
'id': 1,
'foo': fooDocumentReference,
'bar': barDocumentReference,
},
]),
'barList': FieldValue.arrayUnion([barDocumentReference]),
'fooList': FieldValue.arrayUnion([fooDocumentReference]),
});
await batch.commit().catchError((e, s) => print('$e\n$s'));
print("Commited");
},
),
RaisedButton(
child: const Text("Get doc"),
onPressed: () async {
var doc = await FirebaseFirestore.instance.collection('test').doc('testDoc').get().catchError((e, s) => print('$e\n$s'));
print(doc.data());
},
),
],
),
),
);
}
}
Logs
Error: Invalid argument (dartObject): Could not convert: Instance of 'DocumentReference'
at Object.throw_ [as throw] (http://localhost:59783/dart_sdk.js:4351:11)
at Object.jsify (http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:75:17)
at http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:66:47
at LinkedMap.new.forEach (http://localhost:59783/dart_sdk.js:25093:11)
at Object.jsify (http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:65:27)
at MappedListIterable.new.<anonymous> (http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:53:82)
at MappedListIterable.new.elementAt (http://localhost:59783/dart_sdk.js:21888:25)
at ListIterator.new.moveNext (http://localhost:59783/dart_sdk.js:21683:55)
at JsIterator.next (http://localhost:59783/dart_sdk.js:6063:21)
at Function.of (http://localhost:59783/dart_sdk.js:43925:18)
at MappedListIterable.new.toList (http://localhost:59783/dart_sdk.js:21490:26)
at Object.jsifyList (http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:53:137)
at firestore._FieldValueArrayUnion.new.[_jsify] (http://localhost:59783/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:889:156)
at Object.jsifyFieldValue (http://localhost:59783/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:1000:30)
at http://localhost:59783/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:114:26
at Object.jsify (http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:73:56)
at http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:66:47
at LinkedMap.new.forEach (http://localhost:59783/dart_sdk.js:25093:11)
at Object.jsify (http://localhost:59783/packages/firebase_core_web/src/interop/utils/utils.dart.lib.js:65:27)
at Object.jsify (http://localhost:59783/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:106:18)
at firestore.WriteBatch._fromJsObject.[_wrapUpdateFunctionCall] (http://localhost:59783/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:245:41)
at firestore.WriteBatch._fromJsObject.update (http://localhost:59783/packages/cloud_firestore_web/src/interop/utils/utils.dart.lib.js:291:76)
at write_batch_web.WriteBatchWeb.new.update (http://localhost:59783/packages/cloud_firestore_web/src/write_batch_web.dart.lib.js:151:36)
at cloud_firestore.WriteBatch.__.update (http://localhost:59783/packages/cloud_firestore/cloud_firestore.dart.lib.js:1204:31)
at http://localhost:59783/packages/triage/main.dart.lib.js:478:25
at Generator.next (<anonymous>)
at runBody (http://localhost:59783/dart_sdk.js:37988:34)
at Object._async [as async] (http://localhost:59783/dart_sdk.js:38019:7)
at http://localhost:59783/packages/triage/main.dart.lib.js:473:411
at ink_well._InkResponseState.new.[_handleTap] (http://localhost:59783/packages/flutter/src/material/icon_button.dart.lib.js:51084:42)
at tap.TapGestureRecognizer.new.invokeCallback (http://localhost:59783/packages/flutter/src/gestures/recognizer.dart.lib.js:189:18)
at tap.TapGestureRecognizer.new.handleTapUp (http://localhost:59783/packages/flutter/src/gestures/tap.dart.lib.js:395:40)
at tap.TapGestureRecognizer.new.[_checkUp] (http://localhost:59783/packages/flutter/src/gestures/tap.dart.lib.js:201:12)
at tap.TapGestureRecognizer.new.handlePrimaryPointer (http://localhost:59783/packages/flutter/src/gestures/tap.dart.lib.js:148:23)
at tap.TapGestureRecognizer.new.handleEvent (http://localhost:59783/packages/flutter/src/gestures/recognizer.dart.lib.js:448:16)
at pointer_router.PointerRouter.new.[_dispatch] (http://localhost:59783/packages/flutter/src/gestures/pointer_router.dart.lib.js:74:9)
at http://localhost:59783/packages/flutter/src/gestures/pointer_router.dart.lib.js:109:26
at LinkedMap.new.forEach (http://localhost:59783/dart_sdk.js:25093:11)
at pointer_router.PointerRouter.new.[_dispatchEventToRoutes] (http://localhost:59783/packages/flutter/src/gestures/pointer_router.dart.lib.js:106:29)
at pointer_router.PointerRouter.new.route (http://localhost:59783/packages/flutter/src/gestures/pointer_router.dart.lib.js:98:37)
at binding$5.WidgetsFlutterBinding.new.handleEvent (http://localhost:59783/packages/flutter/src/gestures/binding.dart.lib.js:314:26)
at binding$5.WidgetsFlutterBinding.new.dispatchEvent (http://localhost:59783/packages/flutter/src/gestures/binding.dart.lib.js:297:24)
at binding$5.WidgetsFlutterBinding.new.dispatchEvent (http://localhost:59783/packages/flutter/src/rendering/layer.dart.lib.js:6093:13)
at binding$5.WidgetsFlutterBinding.new.[_handlePointerEventImmediately] (http://localhost:59783/packages/flutter/src/gestures/binding.dart.lib.js:268:14)
at binding$5.WidgetsFlutterBinding.new.handlePointerEvent (http://localhost:59783/packages/flutter/src/gestures/binding.dart.lib.js:241:43)
at binding$5.WidgetsFlutterBinding.new.[_flushPointerEventQueue] (http://localhost:59783/packages/flutter/src/gestures/binding.dart.lib.js:230:14)
at binding$5.WidgetsFlutterBinding.new.[_handlePointerDataPacket] (http://localhost:59783/packages/flutter/src/gestures/binding.dart.lib.js:220:65)
at Object.invoke1 (http://localhost:59783/dart_sdk.js:178716:7)
at _engine.EnginePlatformDispatcher.__.invokeOnPointerDataPacket (http://localhost:59783/dart_sdk.js:161367:15)
at _engine.PointerBinding.__.[_onPointerData] (http://localhost:59783/dart_sdk.js:162002:49)
at http://localhost:59783/dart_sdk.js:162435:26
at http://localhost:59783/dart_sdk.js:162394:16
at http://localhost:59783/dart_sdk.js:162102:11
Most helpful comment
Reproducible on the latest master
1.24.0-8.0.pre.374withcloud_firestore_web: ^0.2.1+1.flutter doctor -v
Minimal reproducible code sample
Logs