如何解决如何使用Flutter保持登录状态 假设/您要实现的目标当前已实现我尝试过的其他信息固件/工具版本等
假设/您要实现的目标
当前,我正在学习使用Flutter + Firebase开发应用程序。
我想实现以下功能作为登录功能的一部分。
-
切换到登录页面,仅在首次登录时登录
-
除非您注销,否则退出应用程序后打开应用程序不会带您进入登录页面
我自己做了一些研究并尝试了这些方法,但是它们没有用。 作为具体方法,如何实现上述功能?
此外,我目前正在实现使用Firebase的电子邮件和密码的功能。
即使对于Google登录和Facebook登录,还是实现上述功能的常用方法?
由于我是Flutter的新学生,所以我有很多我不了解的东西,但希望您能教给我。
当前已实现
- 使用Firebase身份验证登录功能
- 使用Firebase Cloud Store的数据库
我尝试过的
- 使用Firebase身份验证的当前用户检查登录状态
其他信息(固件/工具版本等)
已使用
-
FirebaseAuth
-
FirebaseCloudStore
class MyApp extends StatelessWidget {
// This widget is the root of your application.
final UserState user = UserState();
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<UserState>.value(
value: user,child: MaterialApp(
// Hide debug label
debugShowCheckedModeBanner: false,title:'Flutter Demo',theme: ThemeData(
primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,),home: LoginCheck(),initialRoute: "/",routes:<String,WidgetBuilder>{
// "/": (BuildContext context) => LoginPage(),AddRecord.routeName: (BuildContext context) => AddRecord(),"/login":(BuildContext context) => LoginPage(),"/home":(BuildContext context) => PageManager()
},)
);
}
}
class LoginCheck extends StatefulWidget{
LoginCheck({Key key}): super(key: key);
@override
_LoginCheckState createState() => _LoginCheckState();
}
class _LoginCheckState extends State<LoginCheck>{
@override
void initState(){
super.initState();
checkUser();
// TODO: implement initState
}
void checkUser() async{
final UserState userState = Provider.of<UserState>(context);
final currentUser = await FirebaseAuth.instance.currentUser();
print(currentUser);
if(currentUser == null){
Navigator.pushReplacementNamed(context,"/login");
}else{
userState.setUser(currentUser);
Navigator.pushReplacementNamed(context,"/home");
}
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return Scaffold(
body: Center(
child: Container(
child: Text("Loading..."),);
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。