【问题标题】:Flutter firebase error Exception has occurred. LateError (LateInitializationError: Local 'firebaseUser' has not been initialized.)Flutter firebase error 发生异常。 LateError(LateInitializationError:本地“firebaseUser”尚未初始化。)
【发布时间】:2021-12-02 16:17:51
【问题描述】:

我是 Flutter 的新手,正在尝试将 Flutter 和 Firebase 集成。我创建了一个flutter项目并添加了android和ios应用程序,然后将文件下载到了flutter应用程序。但是当我运行该项目时,我收到以下错误

Exception has occurred.LateError (LateInitializationError: Local 'firebaseUser' has not been initialized.)

可能是什么原因?这些是代码行

  Future<bool> signInAnonymously() async {
if (Configurations.shared.isThisVersionTestedInAppStore ||
    Utils.isInDebugMode!) {
  late UserCredential firebaseUser;
  try {
    firebaseUser = await FirebaseAuth.instance.signInAnonymously();
  } catch (e) {
    AppLogger.error(e);
  }

  return didLogInSuccessfully(withUser: firebaseUser.user);
} else {
  return false;
}}

main.dart 文件内容

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  await Configurations.shared.init();
  await Repository.shared.init();

  runApp(Configurations.shared.getMainAppWidget());

  runTestScripts();
}

void runTestScripts() {

  Utils.test();
  Synchronizer.test();
  Localized.test();
}

【问题讨论】:

  • 首先提供您收到此错误的代码,您可能已经使用 late 修饰符将 FirebaseUser 删除,它应该可以工作
  • @AbhishekVishwakarma,感谢您的更新。我在问题中添加了代码行。你能看看吗?
  • 唯一导致您出现此错误的原因是您在 signInAnonymously() 中用于 UserCredential 的后期关键字只需删除 late 关键字并使您的 UserCredential 可空(?)并使用 null check(!)随时随地

标签: firebase flutter dart


【解决方案1】:

您是否在 main.dart 添加了这些行以确保在应用启动之前启动 Firebase。

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

【讨论】:

  • 是的已经添加了,我已经在问题中添加了 main.dart 文件内容。
【解决方案2】:

您收到错误是因为您尝试使用 firebaseUser 变量而不对其进行初始化。

这是因为firebaseUser 没有在下面的行中得到值:

    firebaseUser = await FirebaseAuth.instance.signInAnonymously();

由于firebaseUser 变量可以为空,您可以将其从late 变量更改为nullable 变量,如下所示:

改变这个:

  late UserCredential firebaseUser;

到这里:

  UserCredential? firebaseUser;

并从此更新您的退货声明:

  return didLogInSuccessfully(withUser: firebaseUser.user);

到这里:

  return didLogInSuccessfully(withUser: firebaseUser?.user);

如果变量不为空,这只会调用firebaseUser 上的.user 属性。

您的更新代码应该是这样的:

  Future<bool> signInAnonymously() async {
    if (Configurations.shared.isThisVersionTestedInAppStore ||
      Utils.isInDebugMode!) {
      UserCredential? firebaseUser;
      try {
        firebaseUser = await FirebaseAuth.instance.signInAnonymously();
      } catch (e) {
        AppLogger.error(e);
      }

      return didLogInSuccessfully(withUser: firebaseUser?.user);
    } else {
      return false;
    }
  }

【讨论】:

  • 谢谢 Victor Eronmosele,更新上述代码后,错误消失了。非常感谢。;)
猜你喜欢
  • 1970-01-01
  • 2022-08-19
  • 2021-10-27
  • 1970-01-01
  • 2022-11-03
  • 2021-11-17
  • 2021-12-01
  • 2022-07-12
  • 1970-01-01
相关资源
最近更新 更多