【问题标题】:How use SharedPreferences correctly flutter如何正确使用 SharedPreferences
【发布时间】:2021-05-29 08:38:03
【问题描述】:

我是 Flutter 的新手,我想在使用 SharedPreferences 登录后在本地保存数据。我创建了一个类 loadUserData() 用于在其他类中重用 SharedPreferences 中存储的数据。

登录类:

  Future<User> login(String email, String password) async {
    await checkInternet();

    Map<String, String> headers = {
      'Content-type': 'application/json',
      'Accept': 'application/json',
    };
    Map<String, String> body = {'email': email, 'password': password};

    var response = await http.post(Uri.parse(ApiUtil.AUTH_LOGIN),
        headers: headers, body: jsonEncode(body));
    switch (response.statusCode) {
      case 200:
        var body = jsonDecode(response.body);
        var data = body['user'];
        User user = User.fromJson(data);
        Track track = Track.fromJson(body);
        if (body['code'] == 0) {
          SharedPreferences localStorage =
              await SharedPreferences.getInstance();
          localStorage.setInt('id', body['user']['id']);
          localStorage.setString('adress', body['user']['adress']);
          localStorage.setString('name', body['user']['name']);
          localStorage.setString('phone', body['user']['phone']);
          localStorage.setString('access_token', body['access_token']);
        }
        return user;
      case 500:
        throw ('Erreur serveur');
        break;
      case 400:
        throw LoginFailed();
      default:
        throw ('connection timeout');
        break;
    }
  }

我在第二个文件中创建 loadUserData() :

  loadUserData() async {
    SharedPreferences localStorage = await SharedPreferences.getInstance();

    var user = jsonDecode(localStorage.getString('user'));

    if (user != null) {
      setState(() {
        name = user['name'];
        phone = user['phone'];
        adress = user['adress'];
        email = user['email'];
      });
    }
  }

但是 loadUserData() 中的 name 、 phone 、 address 和 email 是空的。如何正确获取数据??

【问题讨论】:

    标签: flutter dart sharedpreferences


    【解决方案1】:

    问题是您正在设置以下键:idaddressnamephoneaccess_token,但您正在尝试读取键 user

    另外,您可能需要考虑SecureStorage 来存储 access_token 和其他敏感信息

    【讨论】:

    • 首先...我想在 loadUserData() 类中正确获取数据
    • 所以你需要调用localStorage.getString('name')、localStorage.getString('phone')等来代替localStorage.getString('user')。
    猜你喜欢
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多