1 回答
TA贡献1816条经验 获得超6个赞
我将向您展示我在项目中做了什么,首先您需要安装Sharedprefrence,然后在 lib 文件夹中创建文件,创建名为 Utils 的文件夹,您可以提供任何您想要的名称,并在 Utils 文件夹中创建一个文件 sharedpreference.dart lib\Utils\
在此文件中的sharedpreference.dart中添加此行,ps:您可以使用此文件添加更多数据,例如,如果api返回userid类型的内容,您可以在此处指定,并且可以使用sharedprefrence在所有屏幕上访问数据
class SharedPrefrence {
Future<bool> setLoggedIn(bool status) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.setBool("logged_in", status);
}
Future<bool> getLogedIn() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getBool("logged_in") ?? false;
}
Future<bool> setUserId(String userId) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.setString("user_id", userId);
}
Future<String> getUserId() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString("user_id") ?? '';
}
}
登录页面
这是示例登录功能,我在其中使用了首选项
void AppLogin(String username, String password) async {
var response = await http.post(Urls.LOGIN,
headers: {"Content-Type": "application/json"},
body: json.encode({
"User_Name": username,
"Password": password,
}));
Map<String, dynamic> value = json.decode(response.body);
if (response.statusCode == 200) {
dialog.dismissProgressDialog(context);
try {
Map<String, dynamic> value = json.decode(response.body);
SharedPrefrence().setLoggedIn(true);
SharedPrefrence().setUserId(value['_id'].toString());
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => DashboardScreen()),
ModalRoute.withName("/login"));
} catch (e) {
e.toString();
}
} else {
dialog.dismissProgressDialog(context);
var message = value['message'];
CustomDialogs().showErrorAlert(context, message);
}
}
在您的初始屏幕中添加此函数,并在 initState 函数中调用函数 startTime,此时您的初始屏幕将显示 3 秒,然后它将调用 navigationPage ,在其中检查用户是否登录的登录状态的共享首选项如果没有,它将显示登录信息,如果已登录,它将重定向到 dahsboard 屏幕
startTime() async {
var _duration = new Duration(seconds: 3);
return new Timer(_duration, navigationPage);
}
void navigationPage() {
Future loginstatus = SharedPrefrence().getLogedIn();
loginstatus.then((data) {
if (data == true) {
Navigator.pop(context, true);
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => DashboardScreen()),
ModalRoute.withName("/login"));
} else {
Navigator.pop(context, true);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => LoginScreen(),
),
);
}
});
}
- 1 回答
- 0 关注
- 97 浏览
添加回答
举报