我正在构建一个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"),
          )
        )
      )
    );
  }
}

下面是抛出的异常

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

当前回答

初始化firebase选项

void main() async{
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform).catchError((e){
    print(" Error : ${e.toString()}");
  });
}

其他回答

如果你遵循Peter的回答,仍然得到相同的错误,检查确保你的main函数中的任何其他东西都是在await Firebase.initializeApp()调用之后,如下所示:

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

只使用飞镖初始化(推荐)

在所有平台上使用CLI初始化Firebase。 不需要添加任何本地代码。 无需下载任何谷歌服务文件。

Install FlutterFire CLI dart pub global activate flutterfire_cli (Optional) Add the following line to your ~/.zshrc file and save it export PATH="$PATH":"$HOME/.pub-cache/bin" Run the configure: flutterfire configure Press enter to configure all the platforms You should now have a lib/firebase_options.dart file. Import this file in your main.dart and use Firebase.initializeApp. import 'firebase_options.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); // This is the last thing you need to add. await Firebase.initializeApp( options: DefaultFirebaseOptions.currentPlatform, ); runApp(...); }


迁移到仅dart初始化:

如果您已经有一个现有的应用程序,您可以通过以下方式迁移它。

Android: 删除谷歌服务。Json文件从<flutter-project>/android/app: 删除<flutter-project>/android/build中的以下行。gradle文件 删除<flutter-project>/android/app/build中的以下行。gradle文件 iOS 打开< flutter-project > / ios /跑步者。在Xcode中删除GoogleService-Info文件。来自Runner的plist文件。 macOS 打开< flutter-project > / macos /跑步者。在Xcode中删除GoogleService-Info文件。来自Runner的plist文件。

更多信息可以在这里找到

如果您正在工作的项目中预先配置了firebase_core,然后尝试添加新包,它将给出该错误。

您必须首先从pubsec中删除firebase_core:。Yaml,然后保存文件并通过flutter pub add firebase_core和flutterfire configure重新配置它。

然后您可以添加任何新的包。

你需要添加await Firebase.initializeApp();这就是未来。在运行Firebase函数的dart文件中执行,如下所示:

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

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

首先,添加这个依赖:

firebase_core :

第二:在项目main函数中,添加这两行,并使函数async:

void main() async {
    // These two lines
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();

    //
    runApp(MyApp());
}

现在您可以在项目中的任何文件或小部件中正常使用Firebase。

FutureBuilder小部件也可以工作,但每次要访问Firebase时都必须添加它。