【问题标题】:flutter future do not set data扑未来不设置数据
【发布时间】:2021-03-19 19:24:48
【问题描述】:

我正在尝试通过 Future 调用设置语言。我可以看到未来返回一个带有数据的对象(值具有 languageCode 属性并且它是数据),但我无法将该数据设置为字符串变量

 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());
 }

}

【问题讨论】:

  • 你在哪里使用语言()?也添加该代码

标签: flutter future


【解决方案1】:
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());
 }

【讨论】:

    【解决方案2】:

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

     Future<String> language() async {
      String langaugeCode;
    
      final locale = await getLocale();
    
      langaugeCode = locale.languageCode;
    
      return langaugeCode;
     }
    

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

    使用这种方法,您还需要确保仅在 async 函数中使用 language()await 得到值的结果:await language()

    【讨论】:

      猜你喜欢
      • 2021-03-09
      • 2011-07-21
      • 2017-06-04
      • 1970-01-01
      • 2021-09-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多