flutter future 不设置数据

flutter future do not set data

我正在尝试通过 Future 调用设置语言。我可以看到 future returns 一个带有数据的对象(值有 languageCode 属性 并且它是数据)但我无法将该数据设置为 String 变量

 class Api {
  String language() {
  String langaugeCode;
  getLocale().then((value) => langaugeCode = value.languageCode);

  return langaugeCode;
 }

 
 Future<List<Product>> getProduct() async {
  var response = await http.get(BASE_URL + 'language?begins-with=' + language() , headers: headers());
 }

}

为了将值 getLocale() returns 设置为 languageCode 以便它可以由 language() 返回,您需要使 language() 异步并且 await language() 的结果:

 Future<String> language() async {
  String langaugeCode;

  final locale = await getLocale();

  langaugeCode = locale.languageCode;

  return langaugeCode;
 }

问题中代码的问题是您获得了值,但仅在传递给 then() 的函数范围内。此外 language() 是同步的,因此它不会等待 getLocale() 或其 then() 回调执行后再返回。这意味着 languageCode 在函数 returns 值时不可用。

使用这种方法,您还需要确保仅在 async 函数中使用 language() 并且 await 获取值的结果是:await language() .

Future<String> language() async {  
  var local  = await getLocale()
  return local.languageCode;
}

 
 Future<List<Product>> getProduct() async {
  var lang = await language()
  var response = await http.get(BASE_URL + 'language?begins-with=' + lang , headers: headers());
 }