在Flutter和Firebase中,没有创建任何Firebase应用程序“[DEFAULT]” - 请调用Firebase.initializeApp()。

476
我正在构建一个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()

2
你现在应该使用Dart-only的方式来初始化Firebase。 - CopsOnRoad
我通过将pubspec.yaml中的所有软件包更新到最新版本来解决了这个问题。 - zackygaurav
29个回答

1
在我的案例中,我为我的现有项目添加了Web支持。 解决问题的一个关键是,
web/index.html 文件中,
将所有 Firebase SDK 导入的版本从 9.6.6 更改为 8.10.0
代码段:
<script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-app-check.js"></script>  
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-firestore.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-storage.js"></script>
  <script src="https://www.gstatic.com/firebasejs/8.10.0/firebase-messaging.js"></script>
 <script>
  var firebaseConfig = {
   ....
   }

1
我想留下评论。但这个问题有很多线索。 对于我的情况。
我在Firebase之前初始化注入容器。 需要检查层次结构。
Hive.init(directory.path);
  await Firebase.initializeApp();// before
  await di.init();

1

你需要在主函数中添加await FirebaseApp.initializeApp(),记得在主函数中加上await


1
如果您正在处理一个 firebase_core 预配置的项目,并且想要添加新的包,那么会出现错误。您需要首先从 pubsec.yaml 中删除 firebase_core,然后保存文件并通过 "flutter pub add firebase_core" 和 "flutterfire configure" 重新配置它。然后您就可以添加任何新的包了。

不行。我开始了一个新的空白项目,但错误仍在出现。 - KhoPhi

1
在我的情况下,我通过在android/app/build.gradle中添加Google服务插件来解决了这个问题。
apply plugin: 'com.google.gms.google-services'

0

像这样使用 Firebase 选项进行初始化:

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

1
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

使用这个用于Flutter:

   const firebaseConfig = {

    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
    };
   
  // Initialize Firebase
  firebase.initializeApp(firebaseConfig);
  firebase.getAnalytics(app);

不要这样做

   const firebaseConfig = {

    apiKey: "",
    authDomain: "",
    projectId: "",
    storageBucket: "",
    messagingSenderId: "",
    appId: "",
    measurementId: ""
    };

    // Initialize Firebase
    const app = initializeApp(firebaseConfig);
    const analytics = getAnalytics(app);

0
在我的情况下,是因为对于 Web 版本,您必须手动添加 index.html 文件中的内容,不仅是 .js 依赖项,还有配置。请参见Web Installation
我们往往忘记了,对于大多数 Flutter 的东西,它都会编译到目标中,而无需更改任何特定于目标的内容,但在这种情况下,必须为每个目标添加配置。

-4
问题出在我没有使用 "await" 进行初始化:
void main() async {
    WidgetsFlutterBinding.ensureInitialized();
    Firebase.initializeApp();

正确的方式是:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接