我正在构建一个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之前初始化了注入容器。 层级需要检查。

Hive.init(directory.path);
  await Firebase.initializeApp();// before
  await di.init();

其他回答

在大多数情况下,此问题是在将项目从旧的Flutter版本升级到零安全后观察到的。应该检查以下内容:

确保在pubspecc .yaml中有firebase-core

导入firebase核心:

import 'package:firebase_core/firebase_core.dart';

在任何调用之前Init Firebase -最好在main内部。Dart,因此它在任何其他实现之前执行:

WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(
  options: DefaultFirebaseOptions.currentPlatform,
);

来自官方文件。

如果你正确设置了Firebase,不要忘记添加

等待

之前

Firebase.initializeApp ();

这就是异常的主要问题。

等待Firebase.initializeApp ();

我想评论一下。但这个问题有很多线索。 为了我的案子。

我在Firebase之前初始化了注入容器。 层级需要检查。

Hive.init(directory.path);
  await Firebase.initializeApp();// before
  await di.init();

从Flutter 2.8版本开始,现在可以在使用Firebase的所有平台上从Dart初始化FlutterFire。initializeApp函数。有一种更简单快捷的方法来初始化一个firebase项目,而不是从firebase控制台下载.json和.plist文件并将它们放入您的Flutter项目文件夹中,这可能会导致一些警告。这是我经历过几次的问题,下面是我解决它的方法。

在firebase控制台步骤中创建项目并在这里安装firebase CLI后,请继续执行以下步骤:

如果已经使用flutterfire配置配置了firebase项目,则可以跳过步骤1并跳转到步骤4。

从您的项目根终端,命令: $ flutterfire配置 //需要Firebase命令行才能正常工作。 按回车键或回车键选择firebase项目。 插入bundle ID。你可以通过右键单击ios文件夹>,然后单击“在xcode中打开”来获得。Bundle Identifier将出现在右边的白色面板中,当提示时,你必须在终端中手动输入。

**如果您已经安装了firebase_core插件,请继续执行步骤5。**

Install the latest version of the firebase_core plugin by running this command from your project root directory: $ flutter pub add firebase_core // Adds to pubspec.yaml Add imports to the main file: import 'package:firebase_core/firebase_core.dart'; // import 'firebase_options.dart'; // Generated file Update your main function to initialize firebase with this async function: Future<void> main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform); runApp(const YourAppName()); }

有关更多信息,请参阅FlutterFire文档。

在我的例子中,这是因为对于Web版本,您必须手动在index.html文件中添加东西,不仅是.js依赖项,还有配置。参见Web安装。

我们往往会忘记,对于大多数东西来说,Flutter是编译到目标的,而不需要改变任何特定于目标的东西,但在这种情况下,必须为每个目标添加配置。