如何以正确的方式从 SharedPreferences 获取数据

How to get data from SharedPreferences with correct way

我尝试时如何从 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 获取令牌。

在调用 API 之前获取我的 SharedPreferences 数据的 correct way 是什么?

请在 getToken() 方法签名左侧添加 Future<String>,如下所示...

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

您只需输入 await 关键字即可获取实际数据。由于异步函数需要时间来计算,因此您必须等待它完成。

print(await getToken());

如果您想分配给任何变量,请按照以下代码操作。

var x = await getToken();