如何在 Flutter 中使用共享首选项读取多于 1 个数据
How to read more than 1 data using shared preferences in Flutter
我正在尝试使用共享首选项写入和读取数据,但我不知道如何读取多个数据。路线是这样的...我有 3 个屏幕(登录、主页、和配置文件屏幕)在主屏幕和配置文件屏幕内由底部选项卡导航器组成...所以在我通过登录屏幕后,我想保存用户名和 ID 以将其传递到主屏幕和配置文件屏幕...到目前为止我已经保存了用户名和 ID在登录屏幕内,我只是不知道如何阅读它们。这是代码
class _BottomTab extends State<BottomTab> {
@override
Widget build(BuildContext context) {
return FutureProvider<String>(
create: (context) async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString("username");
},
child: ...,
);
}
}
}
这里是调用username的时候不知道怎么调用id
Widget build() {
final username = Provider.of<String>(context).toString();
if (username == null) {
return "Loading...";
}
return Text("Hi $username");
}
我尝试创建一个新函数并在 initState() 中定义该函数...但问题是每当我单击 bottomTab 时数据总是重新构建...这就是我没有使用此方法的原因(在 initState 中声明函数)
这样做
class _BottomTab extends State<BottomTab> {
@override
Widget build(BuildContext context) {
return FutureProvider<String/* or 'Map' if you can*/>(
create: (context) async {
final prefs = await SharedPreferences.getInstance();
final username = prefs.getString("username");
final id = prefs.getId("id");
final userMap = {"username":username, "id":id};
// return userMap /* if return type is Map */
return json.encode(userMap); /* if return type is String */
},
child: ...,
);
}
}
}
现在打电话
Widget build() {
final userInfo = Provider.of<String>(context).toString();
final userMap = json.encode(userStr);
final username = userMap["username"];
if (username == null) {
return "Loading...";
}
return Text("Hi $username");
}
!!!此代码尚未经过测试
我正在尝试使用共享首选项写入和读取数据,但我不知道如何读取多个数据。路线是这样的...我有 3 个屏幕(登录、主页、和配置文件屏幕)在主屏幕和配置文件屏幕内由底部选项卡导航器组成...所以在我通过登录屏幕后,我想保存用户名和 ID 以将其传递到主屏幕和配置文件屏幕...到目前为止我已经保存了用户名和 ID在登录屏幕内,我只是不知道如何阅读它们。这是代码
class _BottomTab extends State<BottomTab> {
@override
Widget build(BuildContext context) {
return FutureProvider<String>(
create: (context) async {
final prefs = await SharedPreferences.getInstance();
return prefs.getString("username");
},
child: ...,
);
}
}
}
这里是调用username的时候不知道怎么调用id
Widget build() {
final username = Provider.of<String>(context).toString();
if (username == null) {
return "Loading...";
}
return Text("Hi $username");
}
我尝试创建一个新函数并在 initState() 中定义该函数...但问题是每当我单击 bottomTab 时数据总是重新构建...这就是我没有使用此方法的原因(在 initState 中声明函数)
这样做
class _BottomTab extends State<BottomTab> {
@override
Widget build(BuildContext context) {
return FutureProvider<String/* or 'Map' if you can*/>(
create: (context) async {
final prefs = await SharedPreferences.getInstance();
final username = prefs.getString("username");
final id = prefs.getId("id");
final userMap = {"username":username, "id":id};
// return userMap /* if return type is Map */
return json.encode(userMap); /* if return type is String */
},
child: ...,
);
}
}
}
现在打电话
Widget build() {
final userInfo = Provider.of<String>(context).toString();
final userMap = json.encode(userStr);
final username = userMap["username"];
if (username == null) {
return "Loading...";
}
return Text("Hi $username");
}
!!!此代码尚未经过测试