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

