Flutter Firebase教程报错求助:跟随官方教程后遇两类错误
解决Flutter Firebase教程中的两个常见错误
刚跟着官方Flutter Firebase教程操作后碰到了这两个问题?我来一步步帮你解决!
一、参数类型不匹配错误
错误详情
Error: lib/main.dart:84:31: Error: The argument type 'Map<String, dynamic> Function()' can't be assigned to the parameter type 'Map<String, dynamic>'. - 'Map' is from 'dart:core'. : this.fromMap(snapshot.data, reference: snapshot.reference); ^
问题原因
这是因为cloud_firestore 0.14.x版本中,DocumentSnapshot的data属性变成了一个方法(data()),而不是直接返回Map对象。教程里的代码还是旧版本的写法,所以会出现类型不匹配的错误。
解决方案
按照@Peter Haddad的建议,把snapshot.data改成snapshot.data()即可:
this.fromMap(snapshot.data(), reference: snapshot.reference);
二、Firebase App未初始化错误
错误详情
构建MyHomePage时抛出FirebaseException:[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() 错误关联组件:MyHomePage file:///D:/Private/Project/workspace_flutter/baby_names/lib/main.dart:12:13 堆栈信息: #0 MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5) #1 Firebase.app (package:firebase_core/src/firebase.dart:52:41) #2 FirebaseFirestore.instance (package:cloud_firestore/src/firestore.dart:43:21) #3 Firestore.instance (package:cloud_firestore/src/firestore.dart:246:30) #4 _MyHomePageState._buildBody (package:baby_names/main.dart:35:25)
问题原因
从Firebase Flutter SDK的新版本开始,必须手动初始化Firebase App才能使用任何Firebase服务,而旧版教程可能没有更新这一步骤,导致调用Firestore时找不到已初始化的App实例。
解决方案
添加firebase_core依赖
在你的pubspec.yaml中添加firebase_core依赖(cloud_firestore依赖它来完成初始化):dependencies: flutter: sdk: flutter cloud_firestore: ^0.14.0+2 firebase_core: ^0.7.0 # 版本可根据实际情况调整然后执行
flutter pub get拉取依赖。修改main函数初始化Firebase
将你的main函数改为异步函数,先完成Firebase初始化再启动App:import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; void main() async { // 确保Flutter绑定初始化完成,才能执行异步操作 WidgetsFlutterBinding.ensureInitialized(); // 初始化Firebase App await Firebase.initializeApp(); runApp(MyApp()); }
这样修改后,Firebase会在App启动时完成初始化,再调用Firestore就不会出现这个错误啦。
内容的提问来源于stack exchange,提问作者matrixxx
相关产品推荐
相关产品推荐

