{
  "id": "flutter/firebase-initialization-race",
  "signature": "FirebaseException: Firebase not initialized. Make sure to call Firebase.initializeApp() before using any Firebase service.",
  "signature_zh": "FirebaseException：Firebase 未初始化。请确保在使用任何 Firebase 服务之前调用 Firebase.initializeApp()。",
  "regex": "FirebaseException: Firebase not initialized\\. Make sure to call Firebase\\.initializeApp\\(\\) before using any Firebase service",
  "domain": "flutter",
  "category": "runtime_error",
  "subcategory": null,
  "root_cause": "A Firebase service method was called before Firebase.initializeApp() completed, often due to a race condition in asynchronous initialization.",
  "root_cause_type": "generic",
  "root_cause_zh": "在 Firebase.initializeApp() 完成之前调用了 Firebase 服务方法，通常是由于异步初始化中的竞态条件。",
  "versions": [
    {
      "version": "Flutter 3.22.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "firebase_core 2.24.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    },
    {
      "version": "firebase_auth 4.16.0",
      "introduced": null,
      "deprecated": null,
      "removed": null,
      "behavior_change": null,
      "status": "active"
    }
  ],
  "os_specific": {},
  "dead_ends": [
    {
      "action": "Call Firebase.initializeApp() synchronously by removing async/await.",
      "why_fails": "Firebase.initializeApp() is inherently asynchronous; removing await causes it to return a Future that may not complete before service calls.",
      "fail_rate": 0.95,
      "condition": "",
      "sources": []
    },
    {
      "action": "Move Firebase.initializeApp() to the initState() of every widget that uses Firebase.",
      "why_fails": "Multiple calls to initializeApp() are not harmful but do not guarantee the timing; the race condition persists if widgets initialize independently.",
      "fail_rate": 0.8,
      "condition": "",
      "sources": []
    }
  ],
  "workarounds": [
    {
      "action": "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()); }",
      "success_rate": 0.95,
      "how": "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()); }",
      "condition": "",
      "sources": []
    },
    {
      "action": "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(); } })",
      "success_rate": 0.9,
      "how": "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(); } })",
      "condition": "",
      "sources": []
    },
    {
      "action": "If using multiple Firebase instances, call Firebase.initializeApp() with the specific options for each instance before accessing their services.",
      "success_rate": 0.85,
      "how": "If using multiple Firebase instances, call Firebase.initializeApp() with the specific options for each instance before accessing their services.",
      "condition": "",
      "sources": []
    }
  ],
  "workarounds_zh": [
    "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."
  ],
  "transition_graph": {
    "leads_to": [],
    "preceded_by": [],
    "frequently_confused_with": []
  },
  "official_doc_url": "https://firebase.flutter.dev/docs/overview#initialization",
  "official_doc_section": null,
  "error_code": "FIREBASE_NOT_INITIALIZED",
  "verification_tier": "ai_generated",
  "confidence": 0.86,
  "fix_success_rate": 0.9,
  "resolvable": "true",
  "first_seen": "2024-02-14",
  "last_confirmed": "2024-06-01",
  "last_updated": "2024-06-01",
  "evidence_count": 1,
  "tags": [],
  "locale": "en",
  "aliases": []
}