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
相关产品推荐
相关产品推荐

