firebase - Flutter Web:初始化firebase应用程序时需要刷新
问题描述
这是一个我已经处理了一段时间的问题,我不太确定如何确定。
目前,我编写了一个 Flutter Web App 并将其部署到生产环境中。它需要 Firebase,并且通常当用户第一次初始化应用程序时,它会卡在空白屏幕上,需要刷新网站才能加载。
但是,直到用户在很长一段时间后没有启动新会话,或者用户在新设备上启动新会话之前,它才会再次出现问题?
这与内存缓存有什么关系吗?
这与应用程序启动时如何初始化 Firebase 有什么关系?
它很难修复,因为它是一个不容易持续复制的错误。
Index.html 脚本:
<!DOCTYPE html>
<html lang="en">
<head>
<base href="/">
<meta charset="UTF-8">
<link rel="apple-touch-icon" sizes="57x57" href="icons/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="icons/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="icons/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="icons/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="icons/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="icons/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="icons/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="icons/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="icons/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="icons/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="icons/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="icons/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="icons/favicon-16x16.png">
<link rel="manifest" href="icons/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="icons/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<title>App</title>
<!-- Google Auth -->
<meta name="google-signin-client_id" content="***">
<!-- Apple Auth -->
<script type="text/javascript" src="https://appleid.cdn-apple.com/appleauth/static/jsapi/appleid/1/en_US/appleid.auth.js"></script>
<meta name="appleid-signin-client-id" content="***">
<meta name="appleid-signin-scope" content="email">
<meta name="appleid-signin-redirect-uri" content="***">
<meta name="appleid-signin-use-popup" content="true"> <!-- or false defaults to false -->
<script defer src="main.dart.js" type="application/javascript"></script>
</head>
<body id="app-container">
<!-- FIREBASE PRODUCTS -->
<!-- https://firebase.google.com/docs/web/setup#available-libraries -->
<script src="/__/firebase/7.22.1/firebase-app.js"></script>
<script src="/__/firebase/7.22.1/firebase-auth.js"></script>
<script src="/__/firebase/7.22.1/firebase-firestore.js"></script>
<script src="/__/firebase/7.22.1/firebase-storage.js"></script>
<script src="/__/firebase/7.22.1/firebase-analytics.js"></script>
<script src="/__/firebase/7.22.1/firebase-functions.js"></script>
<!-- Local Use Dependencies-->
<!-- <script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-app.js"></script>-->
<!-- <script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-auth.js"></script>-->
<!-- <script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-firestore.js"></script>-->
<!-- <script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-storage.js"></script>-->
<!-- <script src="https://www.gstatic.com/firebasejs/7.20.0/firebase-functions.js"></script>-->
<!-- Firebase Configuration -->
<script>
var firebaseConfig = {
apiKey: "***",
authDomain: "***",
databaseURL: "***",
projectId: "***",
storageBucket: "***",
messagingSenderId: "***",
appId: "***",
measurementId: "***"
};
firebase.initializeApp(firebaseConfig);
</script>
<!-- FACEBOOK LOGIN -->
<!--Facebook SDK config -->
<script>
window.fbAsyncInit = function() {
FB.init({
appId : '***',
autoLogAppEvents : true,
xfbml : true,
version : 'v7.0'
});
};
</script>
<!-- Facebook JS CDN SDK -->
<script async defer crossorigin="anonymous" src="https://connect.facebook.net/en_US/sdk.js"></script>
<!-- for interop with dart through this plugin -->
<script src="https://flutterfacebooklogin.s3.us-east-2.amazonaws.com/web_interop.js"></script>
</body>
</html>
Main.dart 文件:
void main() async {
// Register all the models and services before the app starts
await ThemeManager.initialise();
await Firebase.initializeApp();
WidgetsFlutterBinding.ensureInitialized();
setupLocator();
setupDialogUi();
setupBottomSheetUI();
setupSnackBarUi();
setPathUrlStrategy();
await Future.delayed(Duration(seconds: 2));
await setupAuthListener();
runApp(WebApp());
}
void setupSnackBarUi() {
final service = locator<SnackbarService>();
service.registerSnackbarConfig(
SnackbarConfig(
backgroundColor: Colors.redAccent,
textColor: Colors.white,
mainButtonTextColor: Colors.black,
),
);
}
Future<void> setupAuthListener() async {
ReactiveUserService _reactiveUserService = locator<ReactiveUserService>();
UserDataService _userDataService = locator<UserDataService>();
AuthService _authService = locator<AuthService>();
FirebaseAuth.instance.authStateChanges().listen((event) async {
if (event != null) {
//print('main dart says logged in');
_reactiveUserService.updateUserLoggedIn(!event.isAnonymous);
if (_reactiveUserService.userLoggedIn) {
User user = await _userDataService.getUserByID(event.uid);
_reactiveUserService.updateUser(user);
}
} else {
//print('main dart says not logged in');
await _authService.signInAnonymously();
}
});
}
class WebApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ThemeBuilder(
lightTheme: regularTheme,
darkTheme: darkTheme,
builder: (context, regularTheme, darkTheme, themeMode) => MaterialApp(
debugShowCheckedModeBanner: false,
title: 'App',
theme: regularTheme,
darkTheme: darkTheme,
themeMode: themeMode,
initialRoute: Routes.BaseViewRoute,
onGenerateRoute: StackedRouter().onGenerateRoute,
navigatorKey: StackedService.navigatorKey,
),
);
}
}
我在正确的轨道上试图解决这个问题吗?为了解决这个问题,我应该提供其他信息吗?
提前致谢
解决方案
推荐阅读
- c++ - 什么是 __lll_lock_wait_private 以及调用 malloc_consolidate 时会导致挂起的原因是什么?
- html - Kendo Angular Donut Chart 样式似乎随机切换
- ruby-on-rails - Cloudflare 源 IP 和机架攻击轨道
- php - 控制器没有容器集,你是不是忘了把它定义为服务订阅者
- itext7 - itext 7:在某些情况下使用横向模式时将 HTML 转换为 PDF 失败(包括测试 repo 链接)
- php - PhpStorm 调试 - 路径映射配置错误
- python - folium.Marker 无法正确解码
- c - 多级“结构继承”是否保证可以在任何地方工作?
- java - HQL如何以对象列表为一组条件查询表?
- javascript - 使用 redux 获取树形图的数据