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

Flutter向Discord Webhook发HTTPS POST请求时Map值提交失败如何解决

问题原因

Discord Webhook 要求必填参数 content 必须为字符串类型,你当前代码中给 content 赋值的是 [firstName, passions] 数组,序列化后JSON结构不符合接口要求,所以返回类型解析错误。

修复方案

方案1:将数据拼接为纯字符串传入content

直接把需要传递的所有内容拼接成可读的字符串,适配content字段的类型要求:

makePostRequest() async {
  final uri = Uri.parse('MY DISCORD WEBHOOK URL');
  final header = {'Content-Type': 'application/json'};
  // 筛选已选中的选项
  List<String> selected = passions.entries
      .where((entry) => entry.value)
      .map((entry) => entry.key)
      .toList();
  // 拼接为符合要求的字符串
  String contentStr = "提交人:$firstName\n选中选项:${selected.join('、')}";
  Map<String, dynamic> body = {
    "content": contentStr
  };
  String jsonBody = json.encode(body);

  Response response = await post(
    uri,
    headers: header,
    body: jsonBody,
  );
  // 剩余原有逻辑保持不变
}

方案2:使用embeds字段结构化展示数据

如果需要更清晰的卡片式展示,可以用Discord Webhook支持的embeds参数,content只放简短提示:

makePostRequest() async {
  final uri = Uri.parse('MY DISCORD WEBHOOK URL');
  final header = {'Content-Type': 'application/json'};
  List<String> selected = passions.entries
      .where((entry) => entry.value)
      .map((entry) => entry.key)
      .toList();
  Map<String, dynamic> body = {
    "content": "收到新的表单提交",
    "embeds": [
      {
        "title": "表单详情",
        "fields": [
          {"name": "姓名", "value": firstName, "inline": false},
          {"name": "选中选项", "value": selected.join('\n'), "inline": false}
        ]
      }
    ]
  };
  String jsonBody = json.encode(body);
  // 剩余原有逻辑保持不变
}

额外注意

你的代码中存在拼写错误:常量定义的Thick,在初始化passionsMap时写成了Thich,会导致后续取值不匹配,建议修正。

内容的提问来源于stack exchange,提问作者artistAhmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 20:36:02