【问题标题】:Converting Future to string flutter [duplicate]将 Future 转换为字符串颤动 [重复]
【发布时间】:2020-12-04 16:02:45
【问题描述】:

我正在尝试将响应从 api 转换为颤动的字符串。我仍然是 Flutter 的初学者,所以我很抱歉。 每当我执行获取并将其分配给变量时,该值始终是“未来实例”而不是实际文本?那么这是否意味着我必须将其转换为文本? 这是我使用的代码。

gethttps() async{
  var response = await http.get(url);

  print("JSON" + response.body);

  String data = response.body;
  data = json.decode(response.body.toString());
  return data;
}

从函数外部调用

var response = gethttps();

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您可以点击链接:https://stackoverflow.com/a/50296350/6413387

    基本上你有两个选择

    gethttps().then((result) {
      print(result);
      setState(() {
        someVal = result;
      })
    })
    

    funcThatMakesAsyncCall() async {
      String result = await gethttps();
      print(result);  
      setState(() {
        someVal = result;
      })
    }
    

    【讨论】:

    • 由于某种原因 setState 似乎不起作用,它下面有红线?
    • 这意味着您的小部件是无状态小部件
    【解决方案2】:

    你可以把函数的签名改成这个

    Future<String> gethttps() async{....}
    

    然后使用

    var data=await gethttps();
    

    用户等待

    【讨论】:

    • ListView createArticleButtons() async { var response = await gethttps(); ListView 显示错误。请问怎么解决?
    • 是的,你可以使用 FutureBuilder
    【解决方案3】:

    为了从 Future 中获取价值,您必须使用 then 方法。

    import 'dart:async';
    
    gethttps() async{
      var response = await http.get(url);
      String data = response.body;
      data = json.decode(response.body.toString());
      return data;
    }
    

    这样调用函数

    gethttps().then((String result){
        var response = result;
    });
    

    .((value){…}) 是在future 成功完成时调用的回调(带有值)。

    【讨论】:

    • ListView createArticleButtons() { gethttps().then((String result){ var response = result; }); print("The output is : $response"); 这是正确的吗? @Paresh Mangukiya
    • 你可以这样做 ListView createArticleButtons() { gethttps().then((String result) { var response = result; return ListView( padding: const EdgeInsets.all(8), children: [ Container( 高度: 50, 颜色: Colors.amber[600], child: const Center(child: Text(response)), ), ], ); }); }
    猜你喜欢
    • 2020-08-11
    • 2021-06-04
    • 2020-05-20
    • 1970-01-01
    • 2019-10-27
    • 2016-09-06
    相关资源
    最近更新 更多