본문 바로가기

Flutter

[Flutter] Error - No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() in Flutter and Firebase

Problem : Using Firebase Authentication 사용 시도 중 Error 발생

No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() in Flutter and Firebase

위와 같은 에러가 떴다.

 

해당 앱 로직이

 

앱 시작 -> Material App 에서 현재 Authenticated된 User 상태 기반으로 '로그인 화면 / User의 기본 데이터 표시 화면' 2개 화면 중 로그인 되어 있을 때 'User의 기본 데이터 표시 화면'을 로딩 시켜 주려 했다. 

 

[문제 코딩]

void main() {
  Firebase.initializeApp();
  runApp(MyApp());
}

여기서 Firebase.initializeApp()은 Document에서는 Firebase Auth를 사용하기 위한 초기화라고 이해하면 된단다.(하단 참고 url에 적혀 있음)

 

main에서 initialize해준 뒤 MyApp에서 Firebase Auth 가져와서 authenticated인지 확인 하려고 했더니, 에러가 난다.

(NoSuchMethodError was thrown building ... The getter ... was called on null)과 같은 에러가 난다. 

 

문제는 Firebase.initializeApp 함수가 Future<FirebaseApp>를 비동기로 반환한다는 것. 

에러가 initializeApp을 해주어야 하는데 이게 비동기니까 await도 같이 해줘 라고 떴으면 빨리 해결 할 수 있었을까..

 

해결 방법이 여러개 있는데(참고 : stackoverflow.com/questions/63492211/no-firebase-app-default-has-been-created-call-firebase-initializeapp-in)

 

처음에는 FutureBuilder로 해결 하려다가 FutureBuilder쓰면 코드에서 snapshot 상태 if문으로 확인해주어야 하는 코드가 지져분해 보이는 것 같아,

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MyApp());
}

main을 이렇게 써주었더니 깔끔하게 해결.

ensureInitialized() 함수  : runApp 전에 바인딩이 초기화 되어야 할 때 선언 필요 (api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/ensureInitialized.html)

 

 

flutter doc's Firebase initializing 코딩 :

(firebase.flutter.dev/docs/overview/#initializing-flutterfire)