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()
quelle
ensureInitislized
, wird eine Instanz von erstellt,Widgetbinding
und da SieFirebase.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)Zu pubspec.yaml hinzufügen
zu main.dart hinzufügen
import 'package:firebase_core/firebase_core.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }
quelle
initializeApp()
es sich um einen asynchronen Aufruf handelt, wird die Anwendung auch dann gestartet, wenn sie fehlschlägtWenn 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
quelle
Hier ist eine einfache Lösung dafür:
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp(),); }
quelle
@ 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:
.data
durch.data()
updateData
durchupdate
Hoffe, das kann einigen Neulingen wie mir helfen.
quelle
Wenn Sie immer noch das Problem haben, wenn Sie die App dem Hauptbildschirm überlassen, können Sie dies
.dart
mithilfe 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 .
quelle
No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()
. Ich habe die Firebase bereits im Stateful Widget initialisiert.Wenn Sie der Antwort von Peter gefolgt sind und immer noch den gleichen Fehler erhalten, stellen Sie sicher, dass
main
nach demawait 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()); }
quelle
1. Fügen Sie diese Abhängigkeit hinzu:
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.
quelle
Sie müssen hinzufügen,
await Firebase.initializeApp();
welches aFuture
. 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()); }
quelle