Flutter / Firebase 项目 - 是否“未处理的异常:空检查运算符用于空值”导致黑屏?

Flutter / Firebase project - Is `Unhandled Exception: Null check operator used on a null value` causing a blank screen?

我正在使用 firebase 开发一个 flutter 项目。我目前正在使用模拟 iPhone 在 MacBook 上进行开发(以防万一)。我可以 运行 我的应用程序,但是当这样做时它只是一个永远不会消失的白色空白屏幕,知道这发生在 Chrome 和模拟 Android 设备也是。查看 run window,我可以看到错误显示如下:

Launching lib/main.dart on iPhone 13 in debug mode...
Running Xcode build...
Xcode build done.                                           28.4s
Debug service listening on ws://127.0.0.1:61474/fF4XR-ozS5s=/ws
Syncing files to device iPhone 13...
[VERBOSE-2:ui_dart_state.cc(209)] Unhandled Exception: Null check operator used on a null value
#0      MethodChannel.binaryMessenger (package:flutter/src/services/platform_channel.dart:121:86)
#1      MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:146:36)
#2      MethodChannel.invokeMethod (package:flutter/src/services/platform_channel.dart:329:12)
#3      MethodChannel.invokeListMethod (package:flutter/src/services/platform_channel.dart:342:41)
#4      MethodChannelFirebase._initializeCore (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:31:37)
#5      MethodChannelFirebase.initializeApp (package:firebase_core_platform_interface/src/method_channel/method_channel_firebase.dart:73:13)
#6      Firebase.initializeApp (package:firebase_core/src/firebase.dart:42:47)
#7      main (package:we_rise/main.dart:8:18)
#8      _runMainZoned.<anonymous closure>.<anonymous closure> (dart:ui/hooks.dart:145:25)
#9      _rootRun (dart:async/zon<…>

因为我还是个新手,所以我不能完全理解哪里出了问题,或者我在这里看到的是什么。请在下面找到我的 main.dart 文件代码:

import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'database_config.dart';
import 'launch_page.dart';

void main() async {
  await Firebase.initializeApp(
    options: FirebaseOptions(
        apiKey: "foo",//"apiKey",
        appId: "foo",//"appId",
        messagingSenderId: "foo",//"messagingSenderId",
        projectId: "foo"),//"projectId"),
  );
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    SystemChrome.setPreferredOrientations(
      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown],
    );
    return MaterialApp(
      theme: ThemeData(
        brightness: Brightness.light,
        fontFamily: 'BookmanOldStyle',
      ),
      home: LaunchPage(),
    );
  }
}

我希望这是有用的。我真的不明白为什么它在应用程序加载时向我显示空白屏幕。我还阅读了 ,但我不认为我在我的代码中使用了 null 检查运算符。感谢任何帮助、建议和批评。

编辑:添加了颤振医生输出

flutter doctor 输出:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.5.3, on macOS 12.0.1 21A559 darwin-arm, locale en-GB)
[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 2020.3)
[✓] Connected device (2 available)

• No issues found!

flutter doctor -v 输出:

flutter doctor -v
[✓] Flutter (Channel stable, 2.5.3, on macOS 12.0.1 21A559 darwin-arm, locale en-GB)
    • Flutter version 2.5.3 at /Users/me/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 18116933e7 (3 months ago), 2021-10-15 10:46:35 -0700
    • Engine revision d3ea636dc5
    • Dart version 2.14.4

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/me/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 13.2.1, Build version 13C100
    • CocoaPods version 1.11.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 2020.3)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
       https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
       https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)

[✓] Connected device (2 available)
    • iPhone 13 (mobile) • C0D4EC95-07AF-46AB-A35E-F2B9F4437875 • ios            • com.apple.CoreSimulator.SimRuntime.iOS-15-2 (simulator)
    • Chrome (web)       • chrome                               • web-javascript • Google Chrome 97.0.4692.71

• No issues found!

您应该添加

WidgetsFlutterBinding.ensureInitialized()

到 Firebase 初始化之前的主函数。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  await Firebase.initializeApp(
    options: FirebaseOptions(
        apiKey: "foo",//"apiKey",
        appId: "foo",//"appId",
        messagingSenderId: "foo",//"messagingSenderId",
        projectId: "foo"),//"projectId"),
  );
  await DatabaseConfig.initFirebase();
  runApp(MyApp());
}

我认为其中之一应该有效。

  1. 确保您已正确初始化 firebase,即采取正确的步骤将 firebase 与您的项目集成。

  2. 在Firebase.initializeApp-

    中添加一个名字

`等待Firebase.initializeApp(

name: "SecondaryApp",//**Add this line**
options: FirebaseOptions(
    apiKey: "foo",//"apiKey",
    appId: "foo",//"appId",
    messagingSenderId: "foo",//"messagingSenderId",
    projectId: "foo"),

);`

最好尝试“flutter 升级”,因为 2.5.3 不再是最新的稳定版本,它们现在是 2.8.1。然后确保您遵循了 each of the platform setup sections listed here.

下的所有说明(不折不扣)

如果您不得不 运行 在任何时候“彻底清理”或删除您的构建文件夹,请确保检查它们是否包含上面 link 中指定的必需包含。我在原文中看到 post 你说 flutterfire 在你的任何平台上都不工作,对我来说这表明库可能没有在每个平台的构建文件夹下完全配置。

对于所有遇到这个问题的人,对我有用的是在 Windows 版本上创建一个新项目(我正在使用 android studio)并在那里重新制作程序,您甚至可以复制和粘贴大部分内容。

在我看来,主要问题是我在 MacOS 上开发时没有 iPhone,因此,当它链接到我的开发者资料时,我无法 运行 .