错误仅在发布模式下出现,而在调试模式下不出现

时间:2019-10-28 14:29:36

标签: firebase flutter flutter-web

一切在调试模式下都可以正常工作,但是当我在发布模式下运行应用程序时,它会显示以下屏幕: 1

,当我尝试在Firebase上托管应用程序时,出现以下屏幕: 2

我不确定如何处理此错误,因为有关此问题的信息不多。但是基于“ No firebase应用程序”错误,我认为该错误可能出在我的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/

1 个答案:

答案 0 :(得分:2)

问题1:使用assert()函数初始化应用

您正在fb.initializeApp()方法内调用assert()方法,该方法在发行版本中不会被调用。 assert方法在开发过程中非常有用,可以添加一些其他检查。它不应包含或不能用于处理任何功能/业务逻辑。查看飞镖语言之旅的this部分。它指出断言方法在生产模式下将被忽略。

  

在生产代码中,断言将被忽略,并且不会评估断言的参数。

问题2:pupspec.yaml 中缺少资产信息

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

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

  

就我而言,我有js/文件夹与lib/平行。这是我的选择,但您可以选择所需的方式。

enter image description here

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

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

OR 只需像这样包含整个文件夹即可。

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>

希望他能帮上忙。快乐飘飘。