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

Flutter页面传参异常:传递id至详情页调用API报500错误

问题分析与解决方案

核心问题

你遇到的500内部服务器错误,根源是首页传递id时多了一个前导空格。看首页代码里的id: " ${data[index].idKelasKuliah}",双引号开头的空格会让传递给详情页的id变成带空格的字符串(比如" e4d783cd-80a7-4419-9a81-e31e607afba8"),而服务器期望的是纯ID值,参数不匹配导致报错。


1. 修复首页的id传递代码

直接去掉多余空格,或者用trim()确保id无前后空格:

TextButton(
  onPressed: () {
    Navigator.push(
      context,
      MaterialPageRoute(
        builder: (context) => DetailAbsensi(
          // 方案1:直接传递原id,去掉多余空格
          id: data[index].idKelasKuliah,
          // 方案2:如果担心id本身带空格,强制去除前后空白
          // id: data[index].idKelasKuliah.trim(),
        ),
      ),
    );
  },
  // 其余代码保持不变
),

2. 验证传递的id是否正确

在详情页的FutureBuilder里打印id时,用引号包裹便于观察空格:

print('传递的id: "$id"');

修复前会输出带空格的字符串,修复后应该显示纯ID(比如"e4d783cd-80a7-4419-9a81-e31e607afba8")。

3. 可选:增强API请求的鲁棒性

为避免类似问题,可在API请求方法里对id做前置处理:

Future<ModelAbsensi> getAbsensi(String id) async {
  String cleanId = id.trim(); // 强制去除前后空格
  String url = Constant.baseURL;
  String token = await UtilSharedPreferences.getToken();
  final response = await http.get(
    Uri.parse(
      '$url/auth/mhs_siakad/absensi_perkuliahan?id_kelas_kuliah=$cleanId',
    ),
    headers: {
      'Authorization': 'Bearer $token',
    },
  );
  // 其余代码保持不变
}

为什么写死id能正常工作?

因为写死的id是纯字符串,没有多余空格,服务器能正确解析参数,所以请求成功。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 06:10:05