Es wurde keine Firebase-App '[DEFAULT]' erstellt. Rufen Sie Firebase.initializeApp () in Flutter and Firebase auf

143

Ich baue eine Flatter-App und habe Firebase integriert, aber dieser Fehler wird immer wieder angezeigt, wenn ich auf eine Schaltfläche klicke, um mich zu registrieren, anzumelden oder abzumelden. Ich habe gesehen, dass andere Leute die gleiche Frage gestellt haben, aber keine scheint für mich zu funktionieren. Ich benutze Flatter und Android Studio. Kann mir jemand helfen?

Dies ist ein Auszug aus meinem Code

    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"),
          )
        )
      )
    );
  }
}

Unten ist die Ausnahme ausgelöst

══╡ 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()
Kobby Rabatt
quelle

Antworten:

333

Ab dem 17. August 2020

Alle Firebase-Versionen wurden aktualisiert. Jetzt müssen Sie anrufen, Firebase.initializeApp()bevor Sie ein Firebase-Produkt verwenden können. Beispiel:

Erstens hängen alle Firebase-Produkte jetzt von der firebase_coreVersion (0.5.0+) ab. Daher müssen Sie sie der pubspec.yamlDatei hinzufügen :

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

Dann müssen Sie anrufen Firebase.initializeApp():

Erstes Beispiel

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();
      },
    );
  }
}

Zweites Beispiel mit 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();
  }
}

Drittes Beispiel:

Initialisieren Sie es in initState()und rufen Sie dann auf, setState()wodurch die build()Methode aufgerufen wird .

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

Viertes Beispiel:

Initialisieren Sie es main()nach dem Aufruf in der MethodeWidgetsFlutterBinding.ensureInitialized();

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

Hinweis : Sie müssen nur initializeApp()einmal anrufen

Peter Haddad
quelle
39
Das 4. Beispiel sollte es sein. Denken Sie daran, Async hinzuzufügen. Ich frage mich, ob die Verzögerung spürbar ist.
Ryde
12
Ja, das vierte Beispiel ist das beste, nur um alle Möglichkeiten aufzuzeigen. Das zweite Beispiel ist auch gut, weil Sie es initialisieren können, bevor Sie die ersten Daten aus dem Firestore oder der Echtzeitdatenbank in demselben FutureBuilder abrufen
Peter Haddad
4
Danke, es funktioniert mit # 4. Aber wenn Sie „Zurück“ -Taste drücken, wenn Sie die App zurück, sagt es die gleiche Sache „No Firebase App‚[STANDARD]‘erstellt wurde - Aufruf Firebase.initializeApp ()“ , auch wenn es in Haupt ist ()
Octet
3
@MichaelDiCioccio Das Flatter-Framework verwendete die Widget-Bindung, um mit der Flatter-Engine interagieren zu können. Wenn Sie es aufrufen ensureInitislized, wird eine Instanz von erstellt, Widgetbindingund da Sie Firebase.initializeApp()Plattformkanäle verwenden müssen, um native aufzurufen, müssen Sie die Bindung initialisieren. api.flutter.dev/flutter/widgets/WidgetsFlutterBinding/… (Plattformkanal befindet sich in der Flatter-Engine)
Peter Haddad
2
# 4 Scheint nicht mit Anbietern zu funktionieren (gleiche Fehlermeldung wie ursprünglich)
Castaway
49
  1. Zu pubspec.yaml hinzufügen

    firebase_core :
    
  2. zu main.dart hinzufügen

    import 'package:firebase_core/firebase_core.dart';
    
    void main() async {
       WidgetsFlutterBinding.ensureInitialized();
       await Firebase.initializeApp();
       runApp(MyApp());
    }
    
Muhammad Ashraf
quelle
1
Diese Zeilen geben Folgendes aus: lib / main.dart: 6: 9: Fehler: Getter nicht gefunden: 'Firebase'. warte auf Firebase.initializeApp (); ^^^^^^^^
Kaspar L. Palgi
Ich habe vergessen, firebase_core zu verbessern. Tat dies. Jetzt: Diese Zeilen ergeben: E / flutter (24294): [ERROR: flutter / lib / ui / ui_dart_state.cc (166)] Nicht behandelte Ausnahme: [core / no-app] Keine Firebase-App '[DEFAULT]' wurde Erstellt - Rufen Sie Firebase.initializeApp () auf
Kaspar L. Palgi
Hier steht firebase.google.com/support/release-notes/android : Die Firebase-Android-Bibliothek firebase-core wird nicht mehr benötigt. Dieses SDK enthielt das Firebase SDK für Google Analytics. Um Analytics oder ein Produkt zu verwenden, das die Verwendung von Analytics empfiehlt (siehe Tabelle unten), müssen Sie die Analytics-Abhängigkeit explizit hinzufügen: com.google.firebase: firebase-analysis: 17.5.0 oder com.google.firebase: firebase -analytics-ktx: 17.5.0.
Kaspar L. Palgi
Was ist, wenn initializeApp abstürzt? Die Anwendung wird nicht gestartet. Ich habe nichts über dieses mögliche Problem gefunden.
Boris Salimov
@BorisSalimov Da initializeApp()es sich um einen asynchronen Aufruf handelt, wird die Anwendung auch dann gestartet, wenn sie fehlschlägt
21.
11

Wenn Sie die Firebase mit der Flatter-App verbinden möchten, müssen Sie die Firebase vor der Verwendung initialisieren. Sie können es wie unten angegeben deklarieren und es wird Ihnen helfen, das Problem zu beheben

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

Im Video werden Sie detailliert über den Fehler informiert

Raju Gupta
quelle
Es zeigt mir einen Fehler - Der folgende NoSuchMethodError wurde beim Erstellen des Builders ausgelöst: I / flutter (5612): Die Methode 'then' wurde auf null aufgerufen. I / flattern (5612): Empfänger: null I / flattern (5612): Versuchter Anruf: dann (Abschluss: (dynamisch) => null)
Abir Ahsan
Bitte folgen Sie dem Video im Link, Ihr Problem wird gelöst. Wenn der Fehler immer noch auftritt, lassen Sie es mich bitte wissen.
Raju Gupta
7

Hier ist eine einfache Lösung dafür:

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

@ Peters Antwort ist perfekt !! Wenn Sie jedoch weiterhin Fehler in Ihrem Code und nach dem Flattern Firebase Codelab erhalten, beachten Sie, dass diese Tutorials ab August 2020 veraltet und noch nicht aktualisiert sind. Sie müssen viele andere Änderungen vornehmen wie:

  • ersetzen .datadurch.data()
  • ersetzen updateDatadurchupdate

Hoffe, das kann einigen Neulingen wie mir helfen.

Muhammad
quelle
3

Wenn Sie immer noch das Problem haben, wenn Sie die App dem Hauptbildschirm überlassen, können Sie dies .dartmithilfe von firebase zu einer beliebigen Datei hinzufügen :

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

  @override
  Widget build(BuildContext context) {

Oder im Fall von 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();
  }
}

Weitere Informationen finden Sie unter diesem Link .

Mehdi Rezzag Hebla
quelle
Ich erhalte den Fehler, auch wenn ich das gleiche Verfahren wie in der Dokumentation durchführe. Hier ist der Fehler No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp() . Ich habe die Firebase bereits im Stateful Widget initialisiert.
Vikrant Agrahari
3

Wenn Sie der Antwort von Peter gefolgt sind und immer noch den gleichen Fehler erhalten, stellen Sie sicher, dass mainnach dem await Firebase.initializeApp()Anruf alles andere in Ihrer Funktion angezeigt wird, wie folgt :

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true);
  FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError;
  runApp(MyApp());
}
J. Saw
quelle
Vielen Dank. @ Peters Antwort hat aber geholfen
Kobby Discount
2

1. Fügen Sie diese Abhängigkeit hinzu:

firebase_core :

2. Fügen Sie in der Projekthauptfunktion diese 2 Zeilen hinzu und machen Sie die Funktion asynchron

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

Jetzt können Sie Firebase normalerweise in jeder Datei oder jedem Widget im Projekt verwenden.

Das FutureBuilder-Widget funktioniert ebenfalls, Sie müssen es jedoch jedes Mal hinzufügen, wenn Sie auf firebase zugreifen möchten.

Abdelrahman Tarek
quelle
1

Sie müssen hinzufügen, await Firebase.initializeApp();welches a Future. Machen Sie es in der Dart-Datei, in der Ihre Firebase-Funktion ausgeführt wird, wie folgt:

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

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MaterialApp());
}
giftmarimo
quelle