使用 FutureBuilder 时的 null 方法

问题描述

我正在尝试从此网址获取 json 当我打印响应体时,它会打印在控制台上,但是当我尝试在 Future Builder 中获取一些值时,它会出现此错误

方法 '[]' 在 null 上被调用

  Future getData() async {
    var url =
        'https://v6.exchangerate-api.com/v/68553894467/latest/USD';
    var response = await http.get(url);
    var responsebody = jsonDecode(response.body);
    return (responsebody);
  }

  @override
  void initState() {
    getData();
    super.initState();
  }

  Future OLs() async {
    await Future.delayed(Duration(seconds: 2));
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text('test'),),body: Refreshindicator(
          onRefresh: OLs,child: FutureBuilder(
              future: getData(),builder: (buildcontext,AsyncSnapshot snapshot) {
                if (snapshot.hasData) {
                  return ListView.builder(
                    itemBuilder: (context,i) {
                      return Container(
                          child:
                              Text(snapshot.data[i]["time_last_update_utc"]));
                    },itemCount: snapshot.data.length,);
                } 
                
              }),));
  }
}

解决方法

就连接状态未完成而言,我们不应该从未来构建器的快照中看到数据,以下代码将解决问题

          builder: (buildcontext,AsyncSnapshot snapshot) {
            if (snapshot.connectionState == ConnectionState.done &&
              snapshot.hasData) {
              return ListView.builder(
                itemBuilder: (context,i) {
                  return Container(
                      child:
                          Text(snapshot.data[i]["time_last_update_utc"]));
                },itemCount: snapshot.data.length,);
            } else {
              return CircularProgressIndicator();
            } 
          }