firebase - 使用firebase在flutter中设置动态初始路由
问题描述
我是flutter和firebase开发的新手,我有一个问题:我有2条路线:SignInRoute和HomeRoute,当应用程序启动时,用户将被重定向到取决于currentUser的屏幕。如果 CurrentUser != null => 将他重定向到 homeScreen 否则重定向到 SignInScreen。如何将此逻辑添加到 main.dart。这是我的代码,当我运行它时,它总是将 SignInScreen.routeName 作为初始路由:
import 'package:books_library_app/routes.dart';
import 'package:books_library_app/theme.dart';
import 'package:books_library_app/ui/views/home/home_view.dart';
import 'package:books_library_app/ui/views/auth/sign_in_view.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
FirebaseUser user;
@override
void initState() {
super.initState();
getCurrentUser();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: theme(),
initialRoute:
(user != null) ? HomeView.routeName : SignInScreen.routeName,
routes: routes,
);
}
getCurrentUser() async {
FirebaseUser currentUser;
currentUser = await FirebaseAuth.instance.currentUser();
setState(() {
user = currentUser;
});
}
}
解决方案
问题可能是由于让用户函数异步而出现的,所以首先在构建欢迎页面时,用户的初始值为 null,当它更新时,小部件已经构建,因此您可以做的一种方法是将欢迎页面创建为加载屏幕或应用程序的任何启动屏幕以及 getcurrentuser 函数
getCurrentUser() async {
FirebaseUser currentUser;
currentUser = await FirebaseAuth.instance.currentUser();
if(currentuser==null){
//push to signin page
}
else{
//push to home page
}
}
初始化函数
void initState() {
getCurrentUser();
super.initState();
}
谢谢,我希望它会帮助让我知道您是否仍然遇到一些问题
推荐阅读
- svn - pysvn import_pysvn._pysvn_3_6.ClientError:导入文件时需要新的条目名称
- botframework - 为什么 Bot 框架中的语言会自动更改?
- javascript - 双括号 ()() 如何在 JavaScript 中工作?
- google-cloud-platform - 如何使用google提供的模板[pubsub to Datastore]?
- javascript - 需要增加 div 元素的允许最大高度
- javascript - Tizen Web App: readRecorderData TypeError: 'undefined' is not a function
- python - 在 Python 中分析字符串
- mysql - AWS RDS 上的 MySQL 是否有最低版本,低于该最低版本是不可能的增量快照?
- javascript - 在 Typescript 中管理可选接口属性的最佳实践?
- python - Python XML Iterparse 在文本上停止