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());
}
我正在尝试通过 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());
}