Firebase Flutter 异常
Firebase Flutter 异常
我正在构建一个Flutter应用,并集成了Firebase,但当我单击按钮进行注册、登录或注销时,却一直出现这个错误。我看到其他人也问了同样的问题,但似乎没有一个适用于我。我正在使用Flutter和Android Studio。我该如何解决这个问题?
这是我的一部分代码
class HomeScreen extends StatefulWidget { @override _HomeScreenState createState() => _HomeScreenState(); } class _HomeScreenState extends State { @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"), ) ) ) ); } }
以下是抛出的异常
══╡ 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. (package:cosytok/screens/home.dart:20:28) #4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:992:19) #5 _InkResponseState.build. (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. (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()
admin 更改状态以发布 2023年5月22日
从2020年8月17日开始更新
所有Firebase版本均已更新,现在您需要在使用任何Firebase产品之前调用Firebase.initializeApp()
,例如:
首先,现在所有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{ @override void initState() { super.initState(); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text("test"), ), body: FutureBuilder( future: getData(), builder: (context, AsyncSnapshot 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 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(() {}); }); }
第四个例子:
在调用WidgetsFlutterBinding.ensureInitialized();
之后在main()
方法中进行初始化。
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); runApp(MyApp()); }