如何解决Dart中‘String类型无法赋值给Uri参数’的错误
错误解决方法:String无法赋值给Uri参数
Dart的http.get()方法要求传入的参数类型是Uri,但你直接传入了字符串拼接后的String类型,导致类型不匹配报错。以下是两种解决方式:
方法一:用Uri.parse()转换字符串为Uri对象
直接将拼接好的字符串通过Uri.parse()转换为符合要求的Uri类型,修改后的代码如下:
void submitForm(BaptismalForm baptismalForm) async { try { final requestUri = Uri.parse(URL + baptismalForm.toParams()); await http.get(requestUri).then((response) { callback(convert.jsonDecode(response.body)['status']); }); } catch (e) { print(e); } }
方法二:用Uri.https()规范构建Uri(推荐)
这种方式会自动处理URL编码,避免手动拼接字符串可能出现的编码问题,更安全可靠。如果baptismalForm.toParams()返回的是带?的查询串(比如?name=xxx&age=18),可以先去除前缀再拆分参数:
void submitForm(BaptismalForm baptismalForm) async { try { // 处理查询参数,去除开头的?并拆分为Map final queryParams = Uri.splitQueryString( baptismalForm.toParams().replaceFirst('?', '') ); final requestUri = Uri.https( 'script.google.com', '/macros/s/AKfycbxrRrkipd6wx6y2X3duzn2QYdJFFuvzypUCDchEQVc3X3N62pyt7RUMYHr8fckeiw0/exec', queryParams, ); await http.get(requestUri).then((response) { callback(convert.jsonDecode(response.body)['status']); }); } catch (e) { print(e); } }
如果你的toParams()方法可以直接返回Map<String, String>类型的参数键值对,那可以直接将该Map传入Uri.https()的第三个参数,省略拆分步骤。
内容的提问来源于stack exchange,提问作者Elly John Mirasol
相关产品推荐
相关产品推荐

