我有一个异步类,可以从 Flutter 安全存储中获取令牌
readSecureData(String key) async {
String? data = await storage.read(key: key);
print('data from secure storage: $data');
return "asdasd";
}
我使用 then 方法获取令牌,并通过 dio 工厂类将其存储在变量令牌中,如下所示
class DioFactory {
//not to have instance
// ApiService._();
final FlutterSecureStorage storage = const FlutterSecureStorage();
static Dio? dio;
Dio getDio() {
if (dio == null) {
String? token = "";
SecureStorage()
.readSecureData("login_token")
.then((value) => token = value);
print("----------------dio");
print(token);
print("----------------dio");
var headers = {
'Authorization': "Bearer ${token ?? ''}"
};
BaseOptions options = BaseOptions(
baseUrl: ApiConst.apiBaseUrl,
headers: headers,
);
dio = Dio(options);
return dio!;
} else {
return dio!;
}
}
但是尽管有一个令牌,但令牌总是返回空,并且我可以看到令牌打印在 readSecureData 函数中,那么我如何从 readSecureData 获取令牌并将其存储在令牌中以将其发送到 dio 标头
void anyFunction() {
String? anyValue;
Future.delayed(Durations.long1, () {
return 'anyString';
}).then((value) {
anyValue = value;
});
print(anyValue);
}
看,这是一个包含异步操作但未定义为 Future 的函数。
该函数的输出如下:
flutter: null
因为分配过程是在没有等待Future.delay过程的情况下发生的。
这是一个定义为 Future 的函数,它执行相同的工作。
Future<void> anyFunction() async {
String? anyValue;
await Future.delayed(Durations.long1, () {
return 'anyString';
}).then((value) {
anyValue = value;
});
print(anyValue);
}
这里是这个输出:
flutter: anyString
你明白了吗?
你已经用过这个方法了:
Future<Dio> getDio() async{
if (dio == null) {
String? token = "";
await SecureStorage()
.readSecureData("login_token")
.then((value) => token = value);
print("----------------dio");
print(token);
print("----------------dio");
var headers = {
'Authorization': "Bearer ${token ?? ''}"
};
BaseOptions options = BaseOptions(
baseUrl: ApiConst.apiBaseUrl,
headers: headers,
);
dio = Dio(options);
return dio!;
} else {
return dio!;
}