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

Dart中如何使用POST方法?请求变量无法发送到服务端问题求解

问题原因

你已经构造好了请求参数body,但调用http.post()方法时没有将body作为参数传入,因此所有你定义的变量都没有被提交到服务端。

其他潜在问题
  • 你从SharedPreferences中取值时,toke和ide都使用了mykey作为key读取,大概率是逻辑错误,正常情况下用户id和接口鉴权token会存在不同的key下,会导致CustomerId参数取值错误
  • 没有配置对应的Content-Type请求头,服务端可能无法正确解析你提交的参数格式,如果你提交的是JSON格式参数,还需要提前将Map类型的body转为JSON字符串
修正后代码

首先确保你已经导入了dart:convert库,参考下方代码修改即可:

import 'dart:convert';
// 其余原有导入保持不变

_sendBuyBtnReq(
    {required BuildContext context,
    required String Amount,
    required String ScoreAmount}) async {
  final prefs = await SharedPreferences.getInstance();
  // 注意修改为你实际存储token和用户id对应的SharedPreferences key
  var toke = prefs.getString('你存储token的key');
  var ide = prefs.getString('你存储用户id的key');

  final url = Uri.parse('my url');
  var body = Map<String, dynamic>();

  body["CustomerId"] = '$ide';
  body["Amount"] = '$Amount';
  body["Credit"] = '$ScoreAmount';
  body["Description"] = '2';

  http.Response response = await http.post(
    url,
    headers: {
      'X-Requested-With': 'XMLHttpRequest',
      'Authorization': 'Bearer $toke',
      // 服务端要求JSON格式参数就保留下面这个配置
      'Content-Type': 'application/json; charset=UTF-8',
      // 如果服务端要求表单格式参数,就替换成下面这个配置
      // 'Content-Type': 'application/x-www-form-urlencoded',
    },
    // 新增body参数,JSON格式需要用jsonEncode转换,表单格式直接传body变量即可
    body: jsonEncode(body),
  );

  if (response.statusCode == 200) {
    print(response.body.toString());
  } else {
    print(response.reasonPhrase);
    var messageM = jsonDecode(utf8.decode(response.bodyBytes));
    var MessageModel = messageModel(messageM['message']);
    showSnackBar7(context, MessageModel.message);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 20:06:05