【问题标题】:How to read more than 1 data using shared preferences in Flutter如何在 Flutter 中使用共享首选项读取超过 1 个数据
【发布时间】:2020-04-19 03:52:30
【问题描述】:

我正在尝试使用共享首选项写入和读取数据,但我不知道如何读取多个数据。路线是这样的...我有 3 个屏幕(登录、主页和个人资料屏幕)在主页和个人资料屏幕内由底部选项卡导航器组成......所以在我通过登录屏幕后,我想保存用户名和 ID 以将其传递到主页和个人资料屏幕......到目前为止,我已经在登录内保存了用户名和 ID屏幕,我只是不知道如何阅读它们。这是代码

class _BottomTab extends State<BottomTab> {
  @override
  Widget build(BuildContext context) {
    return FutureProvider<String>(
      create: (context) async {
        final prefs = await SharedPreferences.getInstance();
        return prefs.getString("username");
      },

      child: ...,
      );
    }
  }
}

这里是调用用户名但我不知道如何调用id的方式

Widget build() {
  final username = Provider.of<String>(context).toString();

  if (username == null) {
    return "Loading...";
  }
  return Text("Hi $username");
}

我试图创建一个新函数并在 initState() 中定义该函数...但问题是每当我单击 bottomTab 时数据总是重新构建...这就是我没有使用此方法的原因(声明initState 中的函数)

【问题讨论】:

    标签: flutter sharedpreferences


    【解决方案1】:

    这样做

    class _BottomTab extends State<BottomTab> {
      @override
      Widget build(BuildContext context) {
        return FutureProvider<String/* or 'Map' if you can*/>(
          create: (context) async {
            final prefs = await SharedPreferences.getInstance();
            final username = prefs.getString("username");
            final id = prefs.getId("id");
            final userMap = {"username":username, "id":id};
            // return userMap /* if return type is Map */
            return json.encode(userMap); /* if return type is String */
          },
    
          child: ...,
          );
        }
      }
    }
    

    现在打电话

    Widget build() {
      final userInfo = Provider.of<String>(context).toString();
      final userMap = json.encode(userStr);
      final username = userMap["username"]; 
      if (username == null) {
        return "Loading...";
      }
      return Text("Hi $username");
    }
    

    !!!此代码未经测试

    【讨论】:

    • 您是否愿意通过编辑我的代码来帮助我,因为我对如何使用您的想法在 FutureBuilder 中返回值有点困惑
    • 非常感谢您的帮助,第一个代码可以工作,我需要编辑第二个
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-22
    • 2019-10-01
    • 2021-08-16
    • 1970-01-01
    • 2017-07-13
    • 2022-11-22
    相关资源
    最近更新 更多