Firebase 앱 '[DEFAULT]'가 생성되지 않았습니다. Flutter 및 Firebase에서 Firebase.initializeApp ()을 호출하세요.


184

Flutter 앱을 구축 중이고 Firebase를 통합했지만 등록, 로그인 또는 로그 아웃 버튼을 클릭하면이 오류가 계속 발생합니다. 나는 다른 사람들이 같은 질문을하는 것을 보았지만 아무도 나를 위해 일하지 않는 것 같습니다. 나는 flutter와 android studio를 사용하고 있습니다. 도움이 될까요?

이것은 내 코드의 일부입니다.

    class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.red,
      body: Center(
        child: Container(
          child: RaisedButton(
            onPressed: () {            
              FirebaseAuth.instance.signOut().then((value) {
                Navigator.pushReplacement(
                    context,
                    MaterialPageRoute(
                        builder: (context) =>
                            LoginScreen()));
              });
            },
            child: Text("Logout"),
          )
        )
      )
    );
  }
}

다음은 throw 된 예외입니다.

══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
The following FirebaseException was thrown while handling a gesture:
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

When the exception was thrown, this was the stack:
#0      MethodChannelFirebase.app (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:118:5)
#1      Firebase.app (package:firebase_core/src/firebase.dart:52:41)
#2      FirebaseAuth.instance (package:firebase_auth/src/firebase_auth.dart:37:47)
#3      _HomeScreenState.build.<anonymous closure> (package:cosytok/screens/home.dart:20:28)
#4      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:992:19)
#5      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1098:38)
#6      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:184:24)
#7      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:524:11)
#8      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:284:5)
#9      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:219:7)
#10     PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:477:9)
#11     PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:78:12)
#12     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:124:9)
#13     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
#14     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:122:18)
#15     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:108:7)
#16     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:220:19)
#17     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:200:22)
#18     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:158:7)
#19     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:104:7)
#20     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:88:7)
#24     _invoke1 (dart:ui/hooks.dart:267:10)
#25     _dispatchPointerDataPacket (dart:ui/hooks.dart:176:5)
(elided 3 frames from dart:async)

Handler: "onTap"
Recognizer:
  TapGestureRecognizer#f0104
════════════════════════════════════════════════════════════════════════════════════════════════════

════════ Exception caught by gesture ═══════════════════════════════════════════════════════════════
The following FirebaseException was thrown while handling a gesture:
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

답변:


416

2020 년 8 월 17 일부터 시작

모든 Firebase 버전이 업데이트되었으므로 이제 Firebase.initializeApp()Firebase 제품을 사용하기 전에 호출 해야합니다. 예를 들면 다음과 같습니다.

첫째, 모든 Firebase 제품은 이제 firebase_core버전 (0.5.0+) 에 의존 하므로 pubspec.yaml파일 에 추가해야 합니다.

dependencies:
  flutter:
    sdk: flutter
  firebase_core : ^0.5.0
  # cloud_firestore: ^0.14.0 other firebase dependencies

그런 다음 전화해야합니다 Firebase.initializeApp().

첫 번째 예

import 'package:flutter/material.dart';

// Import the firebase_core plugin
import 'package:firebase_core/firebase_core.dart';

void main() {
  runApp(App());
}

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      // Initialize FlutterFire
      future: Firebase.initializeApp(),
      builder: (context, snapshot) {
        // Check for errors
        if (snapshot.hasError) {
          return SomethingWentWrong();
        }

        // Once complete, show your application
        if (snapshot.connectionState == ConnectionState.done) {
          return MyAwesomeApp();
        }

        // Otherwise, show something whilst waiting for initialization to complete
        return Loading();
      },
    );
  }
}

Firestore를 사용한 두 번째 예 :

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FirstRoute(title: 'First Route'),
    );
  }
}

class FirstRoute extends StatefulWidget {
  FirstRoute({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _FirstRouteState createState() => _FirstRouteState();
}

class _FirstRouteState extends State<FirstRoute> {
  @override
  void initState() {
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("test"),
        ),
        body: FutureBuilder(
          future: getData(),
          builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
            if (snapshot.connectionState == ConnectionState.done) {
              return Column(
                children: [
                  Container(
                    height: 27,
                    child: Text(
                      "Name: ${snapshot.data.data()['name']}",
                      overflow: TextOverflow.fade,
                      style: TextStyle(fontSize: 20),
                    ),
                  ),
                ],
              );
            } else if (snapshot.connectionState == ConnectionState.none) {
              return Text("No data");
            }
            return CircularProgressIndicator();
          },
        ));
  }

  Future<DocumentSnapshot> getData() async {
    await Firebase.initializeApp();
    return await FirebaseFirestore.instance
        .collection("users")
        .doc("docID")
        .get();
  }
}

세 번째 예 :

초기화 initState()한 다음 메서드 를 호출 setState()할 호출합니다 build().

  @override
  void initState() {
    super.initState();
    Firebase.initializeApp().whenComplete(() { 
      print("completed");
      setState(() {});
    });
  }

네 번째 예 :

main()호출 후 메서드 에서 초기화WidgetsFlutterBinding.ensureInitialized();

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

참고 : initializeApp()한 번만 전화 하면됩니다.


47
네 번째 예는 그것이어야합니다. 비동기를 추가하는 것을 잊지 마십시오. 지연이 눈에 띄는 지 궁금합니다.
Ryde

15
그래 4 예는 단지 모든 방법을 보여 생각, 최선의 하나입니다, 두 번째는 좋은 때문에 할 수 있습니다 만 초기화 같은 FutureBuilder의 경우 FireStore 또는 실시간 데이터베이스에서 첫 번째 데이터를 얻기 전에
피터 하다드를

5
감사합니다. # 4를 사용하여 작동합니다. "- 전화 Firebase.initializeApp () 아니오 중포 기지 앱 '[DEFAULT]'생성 된 '는 () 주에있는 경우에도 당신이 밀어 경우 다시 응용 프로그램에 갈 때"뒤로 "버튼을, 그것은 같은 것을 말한다
옥텟

4
@MichaelDiCioccio 플러터 프레임 워크는 플러터 엔진과 상호 작용할 수 있도록 위젯 바인딩을 사용했습니다. 당신이 호출 할 때 ensureInitislized그것은의 인스턴스를 생성 Widgetbinding하고 있기 때문에 Firebase.initializeApp()요구 사항이 기본 전화 플랫폼 채널을 사용하기 위해 다음 U 바인딩을 inialize해야합니다. api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/... (플랫폼 채널은 플러터 엔진에)
피터 하다드

2
# 4 공급자와 작동하지 않는 것 같음 (초기 오류 메시지와 동일)
버림받은

74
  1. pubspec.yaml에 추가

    firebase_core :
    
  2. main.dart에 추가

    import 'package:firebase_core/firebase_core.dart';
    
    void main() async {
       WidgetsFlutterBinding.ensureInitialized();
       await Firebase.initializeApp();
       runApp(MyApp());
    }
    

1
다음 줄은 다음과 같습니다. lib / main.dart : 6 : 9 : Error : Getter not found : 'Firebase'. await Firebase.initializeApp (); ^^^^^^^^
Kaspar L. Palgi

firebase_core를 imprt하는 것을 잊었습니다. 그거 했어. 현재 :이 줄은 다음을 제공합니다. E / flutter (24294) : [ERROR : flutter / lib / ui / ui_dart_state.cc (166)] 처리되지 않은 예외 : [core / no-app] Firebase 앱 '[DEFAULT]'가 없습니다. 생성 - 전화 Firebase.initializeApp ()
카스파 L. Palgi

여기에 firebase.google.com/support/release-notes/android 가 다음과 같이 나와 있습니다. Firebase Android 라이브러리 firebase-core는 더 이상 필요하지 않습니다. 이 SDK에는 Google Analytics 용 Firebase SDK가 포함되어 있습니다. 이제 Analytics 또는 Analytics 사용을 권장하는 제품 (아래 표 참조)을 사용하려면 Analytics 종속성을 명시 적으로 추가해야합니다. com.google.firebase : firebase-analytics : 17.5.0 또는 com.google.firebase : firebase -analytics-ktx : 17.5.0.
Kaspar L. Palgi

initializeApp이 충돌하면 어떨까요? 응용 프로그램이 시작되지 않습니다. 이 문제에 대해 아무것도 찾지 못했습니다.
Boris Salimov

때문에 @BorisSalimov initializeApp()비동기 호출을하다 실패하면, 응용 프로그램이 아직도 시작됩니다
21rw

12

firebase를 flutter 앱과 연결하려면 사용하기 전에 firebase를 초기화해야합니다. 아래와 같이 선언하면 문제 해결에 도움이됩니다.

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

비디오에서 오류에 대해 자세히 알 수 있습니다.


오류가 표시됩니다. 빌더를 빌드하는 동안 다음 NoSuchMethodError가 발생했습니다. I / flutter (5612) : 'then'메소드가 null에서 호출되었습니다. I / flutter (5612) : 수신기 : null I / flutter (5612) : 호출 시도 : then (Closure : (dynamic) => Null)
Abir Ahsan

링크에있는 비디오를 따르십시오. 문제가 해결됩니다. 여전히 오류 pls에 직면하면 알려주십시오.
Raju Gupta

10

이에 대한 간단한 해결책은 다음과 같습니다.

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

6

@peter의 대답은 완벽합니다 !! 하지만 여전히 코드에서 오류가 발생하고 flutter firebase codelab을 따르는 경우 해당 자습서는 2020 년 8 월 기준으로 구식이며 아직 업데이트되지 않았습니다. 다음과 같은 다른 많은 변경을 수행해야합니다.

  • 교체 .data.data()
  • 교체 updateDataupdate

이것이 나 같은 초보자에게 도움이되기를 바랍니다.


6

Peter의 대답을 따랐지만 여전히 동일한 오류가 발생하는 경우 main함수 에있는 다른 항목이 await Firebase.initializeApp()호출 후 다음 과 같이 나오는지 확인하십시오.

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  runApp(MyApp());
}

감사. 베드로의 대답은하지만 도움 @
Kobby 할인

4

메인 화면에서 앱을 종료해도 문제가 계속되면 .dartfirebase를 사용하여 어떤 파일 에나 추가 할 수 있습니다 .

class App extends StatelessWidget {
  
  final Future<FirebaseApp> _initialization = Firebase.initializeApp();

  @override
  Widget build(BuildContext context) {

또는 다음과 같은 경우 StatefulWidget:

import 'package:flutter/material.dart';

// Import the firebase_core plugin
import 'package:firebase_core/firebase_core.dart';

void main() {
  runApp(App());
}

class App extends StatefulWidget {
  _AppState createState() => _AppState();
}

class _AppState extends State<App> {
  // Set default `_initialized` and `_error` state to false
  bool _initialized = false;
  bool _error = false;

  // Define an async function to initialize FlutterFire
  void initializeFlutterFire() async {
    try {
      // Wait for Firebase to initialize and set `_initialized` state to true
      await Firebase.initializeApp();
      setState(() {
        _initialized = true;
      });
    } catch(e) {
      // Set `_error` state to true if Firebase initialization fails
      setState(() {
        _error = true;
      });
    }
  }

  @override
  void initState() {
    initializeFlutterFire();
    super.initState();
  }

  @override
  Widget build(BuildContext context) {
    // Show error message if initialization failed
    if(_error) {
      return SomethingWentWrong();
    }

    // Show a loader until FlutterFire is initialized
    if (!_initialized) {
      return Loading();
    }

    return MyAwesomeApp();
  }
}

자세한 내용은 이 링크를 확인 하십시오 .


1
문서와 동일한 절차를 수행해도 오류가 발생합니다. 여기에 오류가 No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() 있습니다. 상태 저장 위젯에서 이미 Firebase를 초기화했습니다.
Vikrant Agrahari

3

먼저 다음 종속성을 추가하십시오.

firebase_core :

2nd : 프로젝트 주 함수에서이 두 줄을 추가하고 함수를 비동기로 만듭니다.

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

이제 프로젝트의 모든 파일 또는 위젯에서 일반적으로 firebase를 사용할 수 있습니다.

FutureBuilder 위젯도 작동하지만 Firebase에 액세스 할 때마다 추가해야합니다.


2

추가해야 await Firebase.initializeApp();합니다 Future. 아래와 같이 Firebase 기능을 실행하는 dart 파일 내에서 수행하십시오.

import 'package:firebase_core/firebase_core.dart';
...

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MaterialApp());
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.