You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:50:40