【问题标题】:[Flutter]"[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()" even though app initialized[Flutter]"[core/no-app] 没有创建 Firebase App '[DEFAULT]' - 调用 Firebase.initializeApp()" 即使应用程序已初始化
【发布时间】:2021-03-14 01:26:22
【问题描述】:

我的main.dart

import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_auth/firebase_auth.dart';

import 'package:ruum/screens/login_screen.dart';
import 'package:ruum/screens/ruum_screen.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatefulWidget {
  // This widget is the root of your application.
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  /* @override
  void initState() {
    // TODO: implement initState
    super.initState();
    Firebase.initializeApp().whenComplete(() => null);
  } */
  @override
  Widget build(BuildContext context) {
    return FutureBuilder(
      future: Firebase.initializeApp(),
      builder: (context, appSnapshot) => MaterialApp(
        title: 'ruum',
        theme: ThemeData(
          primarySwatch: Colors.red,
          backgroundColor: Colors.blueGrey,
          visualDensity: VisualDensity.adaptivePlatformDensity,
        ),
        home: StreamBuilder(
          stream: FirebaseAuth.instance.authStateChanges(),
          builder: (context, userSnapshot) {
            if (userSnapshot.hasData) {
              return RuumScreen();
            }
            return LoginScreen();
          },
        ),
        routes: {
          RuumScreen.routeName: (ctx) => RuumScreen(),
        },
      ),
    );
  }
}

我正在使用 FutureBuilder,因为稍后我将在代码中使用 Future。无论如何我都会收到此错误。


[38;5;248m════════ Exception caught by widgets library ═══════════════════════════════════[39;49m
[38;5;244mThe following FirebaseException was thrown building FutureBuilder<FirebaseApp>(dirty, state: _FutureBuilderState<FirebaseApp>#19dc7):[39;49m
[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()

[38;5;244mThe relevant error-causing widget was[39;49m
[38;5;248mFutureBuilder<FirebaseApp>[39;49m
[38;5;244mWhen the exception was thrown, this was the stack[39;49m
[38;5;244m#0      MethodChannelFirebase.app[39;49m
[38;5;244m#1      Firebase.app[39;49m
[38;5;244m#2      FirebaseAuth.instance[39;49m
[38;5;248m#3      _MyAppState.build.<anonymous closure>[39;49m
[38;5;244m#4      _FutureBuilderState.build[39;49m
[38;5;244m...[39;49m
[38;5;248m════════════════════════════════════════════════════════════════════════════════[39;49m

这可能是什么原因造成的?我已将所有内容添加到 gradle 文件中,并将配置文件添加到 android 目录中。

edit:在 Future 解析后,LoginScreen 会加载。

【问题讨论】:

  • 也许用if-else来检查appSnapshot是否完成?
  • 我在考虑,但是 futrebuilder 应该处理异步问题。

标签: firebase flutter


【解决方案1】:

我通过在带有 SplashScreen 的 StreamBuilder 之前添加一个三级运算符来解决它。我使用了 Future 的连接状态属性。

return FutureBuilder(
      future: Firebase.initializeApp(),
      builder: (context, appSnapshot) => MaterialApp(
        title: 'ruum',
        theme: ThemeData(
          primarySwatch: Colors.red,
          backgroundColor: Colors.blueGrey,
          visualDensity: VisualDensity.adaptivePlatformDensity,
        ),
        home: appSnapshot.connectionState == ConnectionState.waiting
            ? SplashScreen()
            : StreamBuilder(
                stream: FirebaseAuth.instance.authStateChanges(),
                builder: (context, userSnapshot) {
                  if (userSnapshot.hasData) {
                    return RuumScreen();
                  }
                  return LoginScreen();
                },
              ),

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-21
    • 2021-07-25
    • 2021-07-13
    • 2021-06-12
    • 2023-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多