Flutter 如何让用户始终登录
我想让用户保持登录状态,即使用户关闭应用程序。问题是,如果我关闭应用程序,我会出现在WelcomePage()中,而不是主页() 在main.dart中,initialRoute是WelcomePage(),但我需要在用户注册或登录后更改它。我需要改变什么 以下是我所拥有的:Flutter 如何让用户始终登录,flutter,dart,Flutter,Dart,我想让用户保持登录状态,即使用户关闭应用程序。问题是,如果我关闭应用程序,我会出现在WelcomePage()中,而不是主页() 在main.dart中,initialRoute是WelcomePage(),但我需要在用户注册或登录后更改它。我需要改变什么 以下是我所拥有的: import 'package:flutter/material.dart'; import 'pages/account/WelcomePage.dart'; import 'pages/match/HomePage.d
import 'package:flutter/material.dart';
import 'pages/account/WelcomePage.dart';
import 'pages/match/HomePage.dart';
void main() => runApp(MyApp());
// Test
class MyApp extends StatelessWidget {
//
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
//
initialRoute: WelcomePage.id,
//
routes: {
WelcomePage.id: (context) => WelcomePage(),
HomePage.id: (context) => HomePage(),
},
);
}
}
编辑:我读到用户必须仍然登录,所以我在这里要做的是检查用户是否为空,然后转到
主页.id
。但要检查用户是否登录,我需要一个异步
功能,并且初始路由
不接受未来
s.而不是总是直接进入WelcomePage
,制作一个显示加载指示器的小部件,直到确定登录状态。确定此状态后,您可以基于此状态显示欢迎页面
或主页
此类小部件的一个示例是来自此应用程序的RootPage
。
文章中的示例:
enum AuthStatus {
NOT_DETERMINED,
NOT_LOGGED_IN,
LOGGED_IN,
}
class RootPage extends StatefulWidget {
RootPage({this.auth});
final BaseAuth auth;
@override
State<StatefulWidget> createState() => new _RootPageState();
}
class _RootPageState extends State<RootPage> {
AuthStatus authStatus = AuthStatus.NOT_DETERMINED;
String _userId = "";
@override
void initState() {
super.initState();
widget.auth.getCurrentUser().then((user) {
setState(() {
if (user != null) {
_userId = user?.uid;
}
authStatus =
user?.uid == null ? AuthStatus.NOT_LOGGED_IN : AuthStatus.LOGGED_IN;
});
});
}
void loginCallback() {
widget.auth.getCurrentUser().then((user) {
setState(() {
_userId = user.uid.toString();
});
});
setState(() {
authStatus = AuthStatus.LOGGED_IN;
});
}
void logoutCallback() {
setState(() {
authStatus = AuthStatus.NOT_LOGGED_IN;
_userId = "";
});
}
Widget buildWaitingScreen() {
return Scaffold(
body: Container(
alignment: Alignment.center,
child: CircularProgressIndicator(),
),
);
}
@override
Widget build(BuildContext context) {
switch (authStatus) {
case AuthStatus.NOT_DETERMINED:
return buildWaitingScreen();
break;
case AuthStatus.NOT_LOGGED_IN:
return new LoginSignupPage(
auth: widget.auth,
loginCallback: loginCallback,
);
break;
case AuthStatus.LOGGED_IN:
if (_userId.length > 0 && _userId != null) {
return new HomePage(
userId: _userId,
auth: widget.auth,
logoutCallback: logoutCallback,
);
} else
return buildWaitingScreen();
break;
default:
return buildWaitingScreen();
}
}
}
枚举身份验证状态{
没有决心,
没有登录,
登录,
}
类RootPage扩展了StatefulWidget{
RootPage({this.auth});
最终BaseAuth-auth;
@凌驾
State createState()=>new_RootPageState();
}
类_RootPageState扩展了状态{
AuthStatus AuthStatus=未确定AuthStatus;
字符串_userId=“”;
@凌驾
void initState(){
super.initState();
widget.auth.getCurrentUser().then((用户){
设置状态(){
如果(用户!=null){
_userId=user?.uid;
}
身份=
user?.uid==null?AuthStatus.NOT_LOGGED_IN:AuthStatus.LOGGED_IN;
});
});
}
void loginCallback(){
widget.auth.getCurrentUser().then((用户){
设置状态(){
_userId=user.uid.toString();
});
});
设置状态(){
authStatus=authStatus.LOGGED\u登录;
});
}
void logoutCallback(){
设置状态(){
authStatus=authStatus.NOT\u LOGGED\u IN;
_userId=“”;
});
}
Widget BuildingWaitingScreen(){
返回脚手架(
主体:容器(
对齐:对齐.center,
子对象:CircularProgressIndicator(),
),
);
}
@凌驾
小部件构建(构建上下文){
交换机(身份验证状态){
案例身份。未确定:
返回BuildingWaitingScreen();
打破
案例身份验证状态。未登录:
返回新的LoginSignupPage(
auth:widget.auth,
loginCallback:loginCallback,
);
打破
案例AuthStatus.LOGGED\u登录:
如果(_userId.length>0&&u userId!=null){
返回新主页(
userId:\u userId,
auth:widget.auth,
logoutCallback:logoutCallback,
);
}否则
返回BuildingWaitingScreen();
打破
违约:
返回BuildingWaitingScreen();
}
}
}
用户保持登录状态,直到您将其注销。您必须编写代码来检查这种情况,如副本中所示。