Flutter调用Firestore get()方法时出现ClassCastException错误求助
解决Flutter Firestore读取时的ClassCastException错误
问题场景
执行Firestore读取操作时触发类型转换错误,调用代码:
DocumentSnapshot<Map<String, dynamic>> doc = await FirebaseFirestore.instance.collection("app").doc("info").get();
错误日志
E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documenFailed to handle message E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documenjava.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Boolean E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugins.firebase.firestore.GeneratedAndroidFirebaseFirestore$PigeonDocumentOption.fromList(GeneratedAndroidFirebaseFirestore.java:934) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugins.firebase.firestore.GeneratedAndroidFirebaseFirestore$FirebaseFirestoreHostApiCodec.readValueOfType(GeneratedAndroidFirebaseFirestore.java:1433) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugin.common.StandardMessageCodec.readValue(StandardMessageCodec.java:340) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugin.common.StandardMessageCodec.readValueOfType(StandardMessageCodec.java:424) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugins.firebase.firestore.FlutterFirebaseFirestoreMessageCodec.readValueOfType(FlutterFirebaseFirestoreMessageCodec.java:284) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugins.firebase.firestore.GeneratedAndroidFirebaseFirestore$FirebaseFirestoreHostApiCodec.readValueOfType(GeneratedAndroidFirebaseFirestore.java:1449) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugin.common.StandardMessageCodec.readValue(StandardMessageCodec.java:340) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugin.common.StandardMessageCodec.decodeMessage(StandardMessageCodec.java:89) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.plugin.common.BasicMessageChannel$IncomingMessageHandler.onMessage(BasicMessageChannel.java:262) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.embedding.engine.dart.DartMessenger.invokeHandler(DartMessenger.java:292) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.embedding.engine.dart.DartMessenger.lambda$dispatchMessageToQueue$0$io-flutter-embedding-engine-dart-DartMessenger(DartMessenger.java:319) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at io.flutter.embedding.engine.dart.DartMessenger$$ExternalSyntheticLambda0.run(Unknown Source:12) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at android.os.Handler.handleCallback(Handler.java:883) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at android.os.Handler.dispatchMessage(Handler.java:100) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at android.os.Looper.loop(Looper.java:224) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at android.app.ActivityThread.main(ActivityThread.java:7562) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at java.lang.reflect.Method.invoke(Native Method) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) E/BasicMessageChannel#dev.flutter.pigeon.cloud_firestore_platform_interface.FirebaseFirestoreHostApi.documen at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
环境信息
Flutter Doctor输出
Doctor summary (to see all details, run flutter doctor -v): [✓] Flutter (Channel beta, 3.19.0-0.1.pre, on macOS 14.2.1 23C71 darwin-arm64, locale pt-BR) [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 15.1) [✓] Chrome - develop for the web [✓] Android Studio (version 2022.3) [✓] VS Code (version 1.85.1) [✓] Connected device (2 available) [✓] Network resources
依赖包版本
cloud_firestore: ^4.14.0 cloud_functions: ^4.6.0 firebase_auth: ^4.16.0 firebase_core: ^2.24.2
解决步骤
- 对齐插件与Flutter版本兼容性:当前使用的Flutter beta通道3.19.0-0.1.pre与cloud_firestore ^4.14.0可能存在适配问题。可尝试:
- 升级cloud_firestore至最新稳定版,或降级到与Flutter beta版本匹配的版本
- 执行
flutter pub upgrade统一更新所有Firebase相关依赖
- 清理重建项目:
- 运行
flutter clean清除缓存 - (可选)删除
android/build和android/app/build目录彻底清理 - 重新执行
flutter pub get - 重新编译项目
- 运行
- 检查Firestore文档字段:确认
app/info文档中是否存在字段类型错误(如布尔值字段被存为字符串) - 切换到Flutter稳定通道:beta通道可能存在不稳定因素,执行以下命令切换:
flutter channel stable flutter upgrade
内容的提问来源于stack exchange,提问作者Go-At Solutions
相关产品推荐
相关产品推荐

