参数类型'String'无法分配给参数类型'Uri',Dart http请求报错如何解决?
报错根因
0.13.0及以上版本的http包,不再支持直接向请求方法传入String类型的URL参数,要求必须传入Uri类型对象,因此触发类型不匹配报错。
修复方法
仅需要修改你代码中发起请求的行,将传入的字符串URL通过Uri.parse()方法转为Uri类型即可,修改后的完整代码如下:
import 'dart:convert'; import 'package:http/http.dart' as http; class RequestAssistant { static Future<dynamic> getRequest(String url) async { // 仅修改此行,将字符串转为Uri http.Response response = await http.get(Uri.parse(url)); if(response.statusCode == 200) { String jSonData = response.body; var decodeData = jsonDecode(jSonData); return decodeData; } else { return "Failed, No Response."; } } }
补充说明
- 传入
Uri.parse()的字符串必须是标准URI格式,需要带http://或https://前缀,否则会抛出格式解析异常 - 如需构造带查询参数的请求,更推荐使用
Uri.http()/Uri.https()方法直接构造,避免手动拼接字符串出现转义错误,示例:// 示例:构造https://example.com/api/getUser?id=123&age=20 var uri = Uri.https('example.com', '/api/getUser', {'id': '123', 'age': '20'}); - 如果你不想适配新版本接口,也可以在
pubspec.yaml中将http包版本降级到^0.12.2,即可继续使用字符串类型的URL参数,不过更推荐适配新版本以获得安全和功能更新。
内容的提问来源于stack exchange,提问作者Hassan El dika
相关产品推荐
相关产品推荐

