flutter - 如何从共享偏好中获取价值?我有未来和等待的问题
问题描述
我的代码在这里:
//get data
Future<Object> sharedGetData(String key) async{
SharedPreferences prefs=await SharedPreferences.getInstance();
return prefs.get(key);
}
设置数据部分:
sharedAddData(String key,Object dataType,Object data) async{
SharedPreferences prefs=await SharedPreferences.getInstance();
switch(dataType){
case bool:
prefs.setBool(key, data as bool);break;
case double:
prefs.setDouble(key, data as double);break;
case int:
prefs.setInt(key, data as int);break;
case String:
prefs.setString(key, data as String);break;
case List:
prefs.setStringList(key, data as List<String>);break;
default:
prefs.setString(key, data as String);break;
}
}
然后我添加了一个并想获取一个值:
//add
sharedAddData(Application.USER_LOGIN, bool, true);
//How to fetch this?
sharedGetData(Application.USER_LOGIN)
返回一个未来类型,但我想检查它的值。我试过这样:
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context){
sharedGetData(Application.USER_LOGIN).then((v){
if(v==true){
return MaterialApp(
home: DashboardScreen(),
);
}
else {
return MaterialApp(
home: LoginScreen(),
);
}});
}
}
但它报告说它缺乏一些返回方式。有人可以帮我吗?谢谢
解决方案
您的 sharedGetData 返回未来,因此您只能通过等待获得它。现在 await 需要函数是异步的,我们不能创建构建方法。所以我们需要使用 FutureBuilder。
在这条线上尝试一些东西
class MyWidget extends StatelessWidget {
@override
Widget build(context) {
return FutureBuilder<String>(
future: sharedGetData(Application.USER_LOGIN),
builder: (context, AsyncSnapshot<String> snapshot) {
if (snapshot.hasData) {
if(v==true){
return MaterialApp(
home: DashboardScreen(),
);
}
else {
return MaterialApp(
home: LoginScreen(),
);
} else {
return CircularProgressIndicator();
}
}
);
}
}
推荐阅读
- oracle - 使用查询或过程从表及其依赖项(即 Oracle 中的父表和子表)中删除 5 年的记录
- installation - 如何使 Inno Setup RunList 清单框透明?
- c++ - 由于 QTextStream 的无限循环
- java - 运行时子类的超类方法和子方法
- javascript - Javascript 对象 - Svelte 中的压缩和计数
- r - R:基于给定时间范围的数据帧的子集行
- reactjs - 如何在反应中将观察者附加到主题?
- r - 如何使用 R 制作多个 for 循环以执行不同的功能
- ios - 无法在IOS上使用firebase运行flutter应用程序,因为它给出了错误
- python - 如何用 for 循环做到这一点?