【问题标题】:How to fectch a value from shared preferences?I have future and await problems如何从共享偏好中获取价值?我有未来和等待问题
【发布时间】:2021-09-01 01:54:26
【问题描述】:

我的代码在这里:

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

但它报告说它缺少一些返回方式。 谁能帮助我?谢谢

【问题讨论】:

  • 版本:shared_preferences:^0.5.4+8

标签: flutter async-await sharedpreferences future


【解决方案1】:

您的 sharedGetData 返回未来,因此您只能通过 await 获取它。现在 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();
        }
      }
    );
  }
}

【讨论】:

  • 非常感谢!我可以顺利阅读共享偏好!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多