我有一个异步函数可以从 Flutter 安全存储包中读取令牌,如下所示:
readSecureData(String key) async {
String? data = await storage.read(key: key);
return data;
}
我有一个分解 dio 的函数:
static Dio? dio;
Dio getDio() {
if (dio == null) {
String? token = "";
SecureStorage()
.readSecureData("login_token")
.then((value) => token = value);
var headers = {
'Accept': ApiConst.applicationJson,
'Content-Type': ApiConst.applicationJson,
'Authorization': "Bearer ${token ?? ''}"
};
Duration timeOut = const Duration(seconds: 4);
BaseOptions options = BaseOptions(
baseUrl: ApiConst.apiBaseUrl,
headers: headers,
);
dio = Dio(options);
return dio!;
} else {
return dio!;
}
}
所以我使用以下代码
String? token = "";
SecureStorage()
.readSecureData("login_token")
.then((value) => token = value);
存储令牌并将其传递给帖子标头, 但我无法使用此方法获取令牌,并且它返回空。
所以我的问题是如何从 Flutter Secure Storage 获取令牌并使用上面的代码将其传递到 dio 标头中?
更换
String? token = "";
SecureStorage()
.readSecureData("login_token")
.then((value) => token = value);
与
String? token = await SecureStorage().readSecureData("login_token");
因为您正在调用
then
回调之外的其他逻辑,
下面的代码
readSecureData
会在调用readSecureData
方法后立即执行,而不需要等待future完成。