如何在 flutter 中将 future<String> 分配给 String 变量

Adz*_*dzf 3 dart flutter

所以基本上我有一个 Future,它返回我从安全存储中获得的 jwt,并且我想将返回值分配给一个变量,假设该变量是令牌。事情是这样的。

Future<String> getJwt() async {
      final secureStorage = SecureStorage();
      var jwt = await secureStorage.readSecureData('jwt');
      return jwt;
    }
Run Code Online (Sandbox Code Playgroud)

我想分配给变量,就像这样。

static String token = getJwt();

Run Code Online (Sandbox Code Playgroud)

代码是这样的。

String? _token;

Future<String> getJwt() async {
      final secureStorage = SecureStorage();
      var jwt = await secureStorage.readSecureData('jwt');
      return jwt;
    }

void getJWT() async {
  String token = await getJwt(); 
  
}

class API {

  final token = getJWT();
  static Future<String> getData(String url) async {
    try {
      http.Response response = await http.get(Uri.parse(baseURL + url),
          headers: {
            "Content-type": "application/json",
            "Authorization": 'Bearer ' + token
          });

      return response.body;
    } catch (_) {
      return 'error';
    }
  }

  static Future<String> postData(String url, String json) async {
    try {
      http.Response response = await http.post(Uri.parse(baseURL + url),
          headers: {
            "Content-type": "application/json",
            'Authorization': 'Bearer ' + token
          },
          body: json);

      return response.body;
    } catch (_) {
      return 'error';
    }
  }
}

Run Code Online (Sandbox Code Playgroud)

我已经尝试将 String 更改为 Future 但它不起作用,如何解决这个问题?提前致谢。

Tua*_*uan 6

所以你需要一个异步函数来做到这一点。我知道有两种方法:

  1. 使用async/await
  2. 使用then

例子

// use async await
void main() async {
  String ret = await getAbc();
  print("ret: $ret");
  // ----- result -----
  // ret: abc
}

// use then
void main2() {
  getAbc().then((String ret) {
    print("ret: $ret");
  });
  // ----- result -----
  // ret: abc
}

Future<String> getAbc() async {
  await Future.delayed(Duration(seconds: 1));
  return "abc";
}


Run Code Online (Sandbox Code Playgroud)