Zef*_*ndo 2 sharedpreferences dart flutter
我对共享首选项有一些问题。如何通过关闭应用程序让用户登录?
我已经用这个代码存储了用户名:
setState(() {
preferences.setString('token', dataUser[0]['username']);
Navigator.of(context).pushAndRemoveUntil(
PageTransition(
type: PageTransitionType.rightToLeftWithFade,
child: HomePage()),
(Route<dynamic> route) => false);
});
Run Code Online (Sandbox Code Playgroud)
当我点击按钮登录时,它可以转到主页。为了确保用户名存储/不存储,我使用函数来获取我的令牌并获取该令牌。
我的令牌使用此代码获取我期望的内容:
String checkPref;
getPrefIdUser() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
setState(() {
checkPref = sharedPreferences.getString('token');
if (checkPref == null) {
Navigator.of(context).pushAndRemoveUntil(
PageTransition(
type: PageTransitionType.leftToRightWithFade,
child: LoginPage()),
(Route<dynamic> route) => false);
} else {
// Navigator.of(context).pushAndRemoveUntil(
// PageTransition(
// type: PageTransitionType.leftToRightWithFade,
// child: HomePage()),
// (Route<dynamic> route) => false);
}
});
}
Run Code Online (Sandbox Code Playgroud)
我已经getPrefIdUser()在我的主页中放入了这样的 initState:
@override
void initState() {
super.initState();
getPrefIdUser();
}
Run Code Online (Sandbox Code Playgroud)
问题是,当我重新启动我的应用程序(我在真实设备中尝试)时,用户再次返回登录页面。我不知道这是什么问题。
你能帮我解决这个问题吗?谢谢。
这是我的按钮登录功能
void _loginMahasiswa() async {
SharedPreferences preferences = await SharedPreferences.getInstance();
final body = {"email": _txtEmail.text, "password": _txtPassword.text};
var loginMahasiswa = await api.loginMahasiswa(body);
String message = loginMahasiswa['message'];
var dataUser = loginMahasiswa['data'];
if (loginMahasiswa['status'] == true) {
setState(() {
preferences.setString('token', dataUser[0]['username']);
Navigator.of(context).pushAndRemoveUntil(
PageTransition(
type: PageTransitionType.rightToLeftWithFade,
child: HomePage()),
(Route<dynamic> route) => false);
});
} else {
print(message);
_showSnackBar(context, message, Colors.red);
}
}
Run Code Online (Sandbox Code Playgroud)
您可以直接在主函数中进行此检查
Future<void> main() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
var token = prefs.getString('token');
print(token);
runApp(MaterialApp(home: token == null ? Login() : Home()));
}
Run Code Online (Sandbox Code Playgroud)
也参考这个如何使用共享首选项来保持用户登录颤振?
| 归档时间: |
|
| 查看次数: |
8665 次 |
| 最近记录: |