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

Ale*_*lex 3 null android ios firebase flutter

我正在使用 firebase 开发一个 flutter 项目。我目前正在 MacBook 上进行开发,使用模拟的 iPhone(以防万一这是相关的)。我能够运行我的应用程序,但这样做时,它只是一个永远不会消失的白色空白屏幕,了解这种情况在 Chrome 和模拟 Android 设备上发生也可能是相关的。查看窗口run,我可以看到出现以下错误:

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

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

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

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

\n

编辑:添加颤振医生输出

\n

flutter doctor输出:

\n
import \'package:firebase_core/firebase_core.dart\';\nimport \'package:flutter/material.dart\';\nimport \'package:flutter/services.dart\';\nimport \'database_config.dart\';\nimport \'launch_page.dart\';\n\nvoid main() async {\n  await Firebase.initializeApp(\n    options: FirebaseOptions(\n        apiKey: "foo",//"apiKey",\n        appId: "foo",//"appId",\n        messagingSenderId: "foo",//"messagingSenderId",\n        projectId: "foo"),//"projectId"),\n  );\n  runApp(MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    SystemChrome.setPreferredOrientations(\n      [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown],\n    );\n    return MaterialApp(\n      theme: ThemeData(\n        brightness: Brightness.light,\n        fontFamily: \'BookmanOldStyle\',\n      ),\n      home: LaunchPage(),\n    );\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

flutter doctor -v输出:

\n
flutter doctor -v\n[\xe2\x9c\x93] Flutter (Channel stable, 2.5.3, on macOS 12.0.1 21A559 darwin-arm, locale en-GB)\n    \xe2\x80\xa2 Flutter version 2.5.3 at /Users/me/Documents/flutter\n    \xe2\x80\xa2 Upstream repository https://github.com/flutter/flutter.git\n    \xe2\x80\xa2 Framework revision 18116933e7 (3 months ago), 2021-10-15 10:46:35 -0700\n    \xe2\x80\xa2 Engine revision d3ea636dc5\n    \xe2\x80\xa2 Dart version 2.14.4\n\n[\xe2\x9c\x93] Android toolchain - develop for Android devices (Android SDK version 31.0.0)\n    \xe2\x80\xa2 Android SDK at /Users/me/Library/Android/sdk\n    \xe2\x80\xa2 Platform android-31, build-tools 31.0.0\n    \xe2\x80\xa2 Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java\n    \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)\n    \xe2\x80\xa2 All Android licenses accepted.\n\n[\xe2\x9c\x93] Xcode - develop for iOS and macOS\n    \xe2\x80\xa2 Xcode at /Applications/Xcode.app/Contents/Developer\n    \xe2\x80\xa2 Xcode 13.2.1, Build version 13C100\n    \xe2\x80\xa2 CocoaPods version 1.11.2\n\n[\xe2\x9c\x93] Chrome - develop for the web\n    \xe2\x80\xa2 Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome\n\n[\xe2\x9c\x93] Android Studio (version 2020.3)\n    \xe2\x80\xa2 Android Studio at /Applications/Android Studio.app/Contents\n    \xe2\x80\xa2 Flutter plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/9212-flutter\n    \xe2\x80\xa2 Dart plugin can be installed from:\n       https://plugins.jetbrains.com/plugin/6351-dart\n    \xe2\x80\xa2 Java version OpenJDK Runtime Environment (build 11.0.10+0-b96-7249189)\n\n[\xe2\x9c\x93] Connected device (2 available)\n    \xe2\x80\xa2 iPhone 13 (mobile) \xe2\x80\xa2 C0D4EC95-07AF-46AB-A35E-F2B9F4437875 \xe2\x80\xa2 ios            \xe2\x80\xa2 com.apple.CoreSimulator.SimRuntime.iOS-15-2 (simulator)\n    \xe2\x80\xa2 Chrome (web)       \xe2\x80\xa2 chrome                               \xe2\x80\xa2 web-javascript \xe2\x80\xa2 Google Chrome 97.0.4692.71\n\n\xe2\x80\xa2 No issues found!\n
Run Code Online (Sandbox Code Playgroud)\n

Meh*_*mir 6

You should add the

WidgetsFlutterBinding.ensureInitialized()

to the main function before Firebase initialization.

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());
}
Run Code Online (Sandbox Code Playgroud)