Как правильно получать данные из SharedPreferences - PullRequest
0 голосов
/ 16 апреля 2020

Как получить данные из SharedPreferences, когда я пытаюсь, я всегда получаю результат Instance of 'Future<dynamic>'. (Токен уже хранится в SharedPreferences)

D/ViewRootImpl@22e7e79[MainActivity]( 2199): ViewPostIme pointer 0
D/ViewRootImpl@22e7e79[MainActivity]( 2199): ViewPostIme pointer 1
D/ViewRootImpl@22e7e79[MainActivity]( 2199): ViewPostIme pointer 0
D/ViewRootImpl@22e7e79[MainActivity]( 2199): ViewPostIme pointer 1
I/flutter ( 2199): Instance of 'Future<dynamic>'
I/flutter ( 2199): {"data":null,"error":"Route Not Found Exception","message":"Route [login] not defined.","code":500}

Я создал код для получения данных SharedPreferences

class LoginProvider with ChangeNotifier {
  var api = ApiServices();
  LoginModel loginModel;
  SharedPreferences preferences;

  Future<void> logout() async {
    print(getToken());
    final response = await api.client
        .post("${api.baseUrl}/logout", headers: <String, String>{
      'Content-Type': 'application/json;',
      'Authorization': 'Bearer ' + getToken().toString()
    });
    print(response.body);
    if (response.statusCode == 200) {
      clearSharePref();
      notifyListeners();
      return null;
    } else {
      return null;
    }
  }

  getToken() async {
    preferences = await SharedPreferences.getInstance();
    var token = preferences.getString("token").toString();
    return token;
  }
}

Но когда я вызываю свой API (функция выхода из системы), я не могу получить свой токен от SharedPreferences.

Что такое correct way для получения моих данных SharedPreferences перед вызовом API?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вы должны просто ввести ключевое слово await , чтобы получить фактические данные. Поскольку асинхронная c функция требует времени для вычисления, вам придется ждать ее завершения.

print(await getToken());

, если вы хотите присвоить какую-либо переменную, следуйте приведенному ниже коду.

var x = await getToken();
0 голосов
/ 16 апреля 2020

Пожалуйста, добавьте Future<String> осталось для подписи метода getToken (), как показано ниже ...

Future<String> getToken() async {
    preferences = await SharedPreferences.getInstance();
    var token = preferences.getString("token").toString();
    return token;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...