Flutter安卓天气应用调用API时报错String无法赋值给Uri类型如何解决
报错原因与修复方案
报错根因
你使用的http: ^0.13.3版本中,http.get等请求方法的入参不再支持直接传入字符串格式的URL,必须传入Uri类型的参数,这就是你遇到类型不匹配报错的原因。
另外你的代码还存在一个隐藏的解析错误:该天气接口返回的current字段是对象类型,不是数组,你代码中加的[0]下标会在接口请求成功后抛出新的异常。
具体修改步骤
- 将字符串格式的URL通过
Uri.parse()方法转换为Uri类型传入http.get - 删除
results['current']后多余的[0]下标
修改后的核心代码
修改getWeather方法即可:
Future getWeather () async { // 字符串URL转Uri类型 http.Response response = await http.get(Uri.parse("http://api.weatherapi.com/v1/current.json?key=e5bd00e528e346ff8a840254213009&q=Chatham Ontario&aqi=no")); var results = jsonDecode(response.body); setState((){ this.temp = results['current']['temp_c']; // 移除多余的[0] this.description = results['current']['last_updated']; // 移除多余的[0] this.currently = results['current']['condition']['text']; this.humidity = results['current']['humidity']; this.windSpeed = results['current']['wind_kph']; }); }
修改完成后重新运行项目即可正常请求接口、渲染天气数据。
内容的提问来源于stack exchange,提问作者Desmond Lambkin
相关产品推荐
相关产品推荐

