错误只出现在发布模式而不出现在调试模式
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>
希望他的帮助。快乐飘飘。
在调试模式下一切正常,但是当我 运行 应用程序处于发布模式时,它会生成此屏幕:
当我尝试在 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 thelib/
. 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>
希望他的帮助。快乐飘飘。