#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(«телефон») и т. Д.