FlutterFire连接Firebase模拟器demo项目初始化报错如何解决
报错根因
无实际云资源的demo模式下,空调用Firebase.initializeApp()会默认尝试读取应用内打包的Firebase平台配置文件(Android端google-services.json、iOS端GoogleService-Info.plist),没有创建云端项目时自然不存在这两个配置文件,就会抛出初始化失败错误,和调用initializeApp的时机无关。
正确配置步骤
- 显式传入虚拟配置参数初始化Firebase,参数不需要真实有效,只要
projectId和你启动模拟器时--project后面的值完全一致即可:
await Firebase.initializeApp( options: const FirebaseOptions( apiKey: 'dummy-api-key', appId: '1:123456789:android:abcdef123456', messagingSenderId: '123456789', projectId: 'demo-test', storageBucket: 'demo-test.appspot.com', ), );
注意:只有
projectId以demo-开头时,Firebase模拟器才会运行在纯本地模式,完全不请求云端资源,不要修改这个前缀。
- 配置Firestore连接本地模拟器,注意不同平台的宿主机地址差异:
- Android模拟器默认把宿主机地址映射为
10.0.2.2,直接写localhost会指向模拟器自身 - iOS模拟器可以直接使用
localhost访问宿主机端口
推荐使用FlutterFire官方提供的模拟器连接方法,避免手动写配置出错:
- Android模拟器默认把宿主机地址映射为
import 'dart:io' show Platform; // 必须等initializeApp执行完成后再跑这段配置 if (Platform.isAndroid) { FirebaseFirestore.instance.useFirestoreEmulator('10.0.2.2', 8080, sslEnabled: false); } else { FirebaseFirestore.instance.useFirestoreEmulator('localhost', 8080, sslEnabled: false); }
- Android端额外配置:确认
android/app/src/main/AndroidManifest.xml中已声明网络权限,否则无法访问本地端口:
<uses-permission android:name="android.permission.INTERNET" />
验证方法
重新启动应用,初始化时不会再抛not-initialized错误,执行Firestore读写操作时,模拟器控制台会打印对应请求日志,说明连接成功。整个过程不需要创建任何Firebase云端资源,也不需要下载任何平台配置文件。
内容的提问来源于stack exchange,提问作者Scorb
相关产品推荐
相关产品推荐

