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

其他格式: JSON · Markdown 中文 · English
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.

generic

官方文档

https://firebase.flutter.dev/docs/overview#initialization

解决方案

  1. 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()); }
  2. 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(); } })
  3. If using multiple Firebase instances, call Firebase.initializeApp() with the specific options for each instance before accessing their services.

无效尝试

常见但无效的做法:

  1. 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.

  2. 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.