Как правильно использовать SharedPreferences flutter

#flutter #dart #sharedpreferences

Вопрос:

Я новичок в 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() пусты . Как я могу правильно получить данные ??

Ответ №1:

Проблема в том, что вы устанавливаете следующие клавиши: id , address , name , phone и access_token , но вы пытаетесь прочитать ключ user .

Кроме того, вы можете рассмотреть возможность использования SecureStorage для хранения access_token и другой конфиденциальной информации

Комментарии:

1. во-первых… я хотел бы правильно получить данные в классе loadUserData()

2. Поэтому вместо localStorage.getString («пользователь») вам нужно вызвать localStorage.getString(«имя»), localStorage.getString(«телефон») и т. Д.