如何从共享偏好中获取价值?我有未来和等待的问题
How to fectch a value from shared preferences?I have future and await problems
我的代码在这里:
//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)
return 未来类型,但我想检查它的值。
我试过这种方式:
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(),
);
}});
}
}
但它报告说它缺少一些 return 方法。
谁能帮帮我?谢谢
你的 sharedGetData returns 未来,所以你只能通过等待来获取它。现在 await 需要函数是异步的,我们不能创建 build 方法。所以我们需要使用 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();
}
}
);
}
}
我的代码在这里:
//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)
return 未来类型,但我想检查它的值。
我试过这种方式:
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(),
);
}});
}
}
但它报告说它缺少一些 return 方法。 谁能帮帮我?谢谢
你的 sharedGetData returns 未来,所以你只能通过等待来获取它。现在 await 需要函数是异步的,我们不能创建 build 方法。所以我们需要使用 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();
}
}
);
}
}