FIREBASE_NOT_INITIALIZED
flutter
runtime_error
ai_generated
true
FirebaseException:Firebase 未初始化。请确保在使用任何 Firebase 服务之前调用 Firebase.initializeApp()。
FirebaseException: Firebase not initialized. Make sure to call Firebase.initializeApp() before using any Firebase service.
ID: flutter/firebase-initialization-race
90%修复率
86%置信度
1证据数
2024-02-14首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| Flutter 3.22.0 | active | — | — | — |
| firebase_core 2.24.0 | active | — | — | — |
| firebase_auth 4.16.0 | active | — | — | — |
根因分析
在 Firebase.initializeApp() 完成之前调用了 Firebase 服务方法,通常是由于异步初始化中的竞态条件。
English
A Firebase service method was called before Firebase.initializeApp() completed, often due to a race condition in asynchronous initialization.
官方文档
https://firebase.flutter.dev/docs/overview#initialization解决方案
-
Ensure Firebase.initializeApp() is called at the top level of main.dart before runApp(). Use await and wrap in a try-catch. Example: void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); } -
Use a FutureBuilder or a splash screen that waits for initialization. Example: FutureBuilder(future: Firebase.initializeApp(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.done) { return MyApp(); } else { return SplashScreen(); } }) -
If using multiple Firebase instances, call Firebase.initializeApp() with the specific options for each instance before accessing their services.
无效尝试
常见但无效的做法:
-
Call Firebase.initializeApp() synchronously by removing async/await.
95% 失败
Firebase.initializeApp() is inherently asynchronous; removing await causes it to return a Future that may not complete before service calls.
-
Move Firebase.initializeApp() to the initState() of every widget that uses Firebase.
80% 失败
Multiple calls to initializeApp() are not harmful but do not guarantee the timing; the race condition persists if widgets initialize independently.