为什么http.get方法不再支持直接传入字符串类型URL参数?
为什么调用http包的get方法需要先将URL字符串解析为Uri对象
- 直接原因是API入参类型限制:你使用的
httppub依赖从0.13.0版本开始,正式移除了所有直接接收String类型URL的方法重载,所有HTTP请求方法的地址参数都仅支持传入Uri类型实例,因此直接传入字符串会触发参数类型不匹配的报错。 - 官方做这个设计是为了降低请求出错概率:
- 合法性校验前置:
Uri.parse会先对传入的URL字符串做格式校验,如果地址有不符合HTTP规范的写法,会直接在本地抛出明确的格式错误,不用等到请求发出后才排查地址问题。 - 自动处理编码:如果URL中包含中文、空格、特殊符号,
Uri.parse会自动按照规范完成百分号编码,保证最终发出的请求地址符合协议要求,避免直接传字符串时因为未编码导致的请求失败、参数丢失等问题。 - 简化动态地址构造:如果需要动态拼接查询参数、路径参数,用
Uri.https、Uri.http等构造方法可以直接传入参数Map,框架自动完成参数拼接,不需要手动处理&、=等符号,大幅减少手写拼接字符串的出错概率。
- 合法性校验前置:
旧版本(v0.12.x及更早)的http包确实支持直接传入URL字符串,很多旧教程里的写法都是基于旧版本,如果你在新版本中使用就会出现不兼容问题:
// 仅http 0.12.x及之前版本可用,新版本已不支持 Response response= await get('https://jsonplaceholder.typicode.com/todos/1');
新版本必须先将字符串解析为Uri对象再传入:
// http 0.13.0及之后版本的标准写法 Response response= await get(Uri.parse('https://jsonplaceholder.typicode.com/todos/1'));
内容的提问来源于stack exchange,提问作者noob27
相关产品推荐
相关产品推荐

