一切在调试模式下都可以正常工作,但是当我在发布模式下运行应用程序时,它会显示以下屏幕:
,当我尝试在Firebase上托管应用程序时,出现以下屏幕:
我不确定如何处理此错误,因为有关此问题的信息不多。但是基于“ No firebase应用程序”错误,我认为该错误可能出在我的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())));
}
<!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>
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/
答案 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/
平行。这是我的选择,但您可以选择所需的方式。
您的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>
希望他能帮上忙。快乐飘飘。