错误只出现在发布模式而不出现在调试模式

Error only appears in release mode and not in debug mode

在调试模式下一切正常,但是当我 运行 应用程序处于发布模式时,它会生成此屏幕:

当我尝试在 firebase 上托管应用程序时,我看到了这个屏幕:

我不确定如何处理这个错误,因为关于这个问题的信息不多。但基于“No firebase app”错误,我认为错误可能出在我的 main.dart.

main.dart

void main() {
  assert(() {
    fb.initializeApp(
      apiKey: "",
      authDomain: "",
      databaseURL: "",
      projectId: "",
      storageBucket: "",
      messagingSenderId: "",
    );

    return true;
  }());

  WidgetsFlutterBinding.ensureInitialized();
  BlocSupervisor.delegate = GeneralBlocDelegate();

  runApp(MultiRepositoryProvider(
      providers: [
        RepositoryProvider<UserRepository>(
            builder: (context) => UserRepository()),
      ],
      child: MultiBlocProvider(providers: [
        BlocProvider<AuthBloc>(
          builder: (context) => AuthBloc(
              userRepository: RepositoryProvider.of<UserRepository>(context))
            ..add(AppStarted()),
        ),
      ], child: App())));
}

index.html

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>my website</title>
</head>
<body>
  <script src="main.dart.js" type="application/javascript"></script>

  <script src="https://www.gstatic.com/firebasejs/7.2.1/firebase-app.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.2.1/firebase-auth.js"></script>
  <script src="https://www.gstatic.com/firebasejs/7.2.1/firebase-firestore.js"></script>

  <script src="/__/firebase/7.2.2/firebase-app.js"></script>
  <script src="/__/firebase/7.2.2/firebase-auth.js"></script>
  <script src="/__/firebase/7.2.2/firebase-firestore.js"></script>
  <script src="/__/firebase/init.js"></script>

</body>
</html>

pubspec.yaml

description: A new Flutter project.
version: 1.0.0+1

environment:
  sdk: ">=2.1.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter

  cupertino_icons: ^0.1.2

  firebase: ^6.0.0
  flutter_bloc: ^1.0.0
  equatable: ^0.6.1
  font_awesome_flutter: ^8.5.0

dev_dependencies:
  flutter_test:
    sdk: flutter

flutter:
  uses-material-design: true
  assets:
    - assets/images/

问题一:使用assert()函数初始化app

您正在 assert() 方法中调用 fb.initializeApp() 方法,该方法不会在发布版本中调用。 assert 方法在开发过程中很有用,可以添加一些额外的检查。它不应包含或用于处理任何 functional/business 逻辑。检查飞镖语言之旅的 this 部分。它指出 assert 方法在生产模式下被忽略。

In production code, assertions are ignored, and the arguments to assert aren’t evaluated.

问题2:pupspec.yaml

中缺少资产信息

在您的 index.html 中,我看到您正在尝试加载一些 .js 文件,例如 /__/firebase/init.js。 Flutter 构建不会将其保存在构建文件夹中,除非您将其标记为 pubspec.yaml 中的资产。

假设您将应用程序所需的所有 .js 文件放在名为 /js/init.js 的文件夹中,如下所示。

In my case I have js/ folder parallel to the lib/. This is my choice but you can choose which way you want it.

您的 pubspec.yaml 中需要这样的条目。

assets:
  - js/init.js
  - js/firebase-app.js

像这样包含整个文件夹。

assets:
  - js/

这同样适用于所有资产,如图像、数据 json 等...查看此 reference 了解更多详细信息。

可能的问题 3:在 Index.html

中错误引用本地 .js 文件

在您的 index.html 中,您正在尝试加载一些本地 .js 文件,如前所述。如果您遵循我建议的文件夹结构,我认为您应该加载这些文件,如下所示。您可能应该根据自己的选择对其进行编辑。


<script src="assets/js/init.js" type="application/javascript"></script>

<script src="assets/js/firebase-app.js" type="application/javascript"></script>

希望他的帮助。快乐飘飘。