如何从共享偏好中获取价值?我有未来和等待的问题

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