如何在 Flutter 中使用共享首选项读取多于 1 个数据

How to read more than 1 data using shared preferences in Flutter

我正在尝试使用共享首选项写入和读取数据,但我不知道如何读取多个数据。路线是这样的...我有 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: ...,
      );
    }
  }
}

这里是调用username的时候不知道怎么调用id

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

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

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

这样做

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

!!!此代码尚未经过测试