如何在 Dio 功能中从 Flutter Secure Storage 读取 token

问题描述 投票:0回答:1

我有一个异步函数可以从 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 标头中?

flutter dart asynchronous
1个回答
0
投票

更换

String? token = "";
SecureStorage()
  .readSecureData("login_token")
  .then((value) => token = value);

String? token = await SecureStorage().readSecureData("login_token");

因为您正在调用

then
回调之外的其他逻辑,

下面的代码

readSecureData
会在调用
readSecureData
方法后立即执行,而不需要等待future完成。

© www.soinside.com 2019 - 2024. All rights reserved.