首页 > 解决方案 > 如何从共享偏好中获取价值?我有未来和等待的问题

问题描述

我的代码在这里:

//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(),
        );
      }});
  }
}

但它报告说它缺乏一些返回方式。有人可以帮我吗?谢谢

标签: flutterasync-awaitsharedpreferencesfuture

解决方案


您的 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();
        }
      }
    );
  }
}

推荐阅读