Flutter中基于选定参数调用数据API的问题求助
问题分析
你当前的代码虽然接收了smt参数,但并未将其传递给目标API——这就是调用失败的核心原因。从你提供的API参数标记图能看出,该接口需要smt作为查询参数。
修复后的代码
static Future<Map<String, DataKuliahModel>> getDataKuliah(int smt) async { String url = Constant.baseURL; String token = await UtilSharedPreferences.getToken(); await Future.delayed(const Duration(milliseconds: 1000)); Map<String, DataKuliahModel> finalResult = {}; final response = await http.get( // 将smt作为查询参数拼接到URL中 Uri.parse('$url/auth/mhs_siakad/perwalian/get_paket?smt=$smt'), headers: { 'Authorization': 'Bearer $token', }, ); print(response.statusCode); print(response.body); // 增加错误处理,避免解析失败导致崩溃 if (response.statusCode == 200) { final result = jsonDecode(response.body)['data'] as Map<String, dynamic>; result.forEach((key, value) { finalResult[key] = DataKuliahModel.fromMap(value); }); return finalResult; } else { // 根据实际业务需求处理错误,这里以抛出异常为例 throw Exception('请求失败,状态码:${response.statusCode}'); } }
关键修改说明
- 传递必要参数:在请求URL末尾拼接
?smt=$smt,把传入的学期参数传递给API,满足接口的参数要求 - 增加错误防护:添加状态码判断,避免API返回非成功状态时强行解析JSON导致应用崩溃
- 简化代码逻辑:直接通过
finalResult[key] = dataKuliah完成数据映射,替代冗余的addAll调用
内容的提问来源于stack exchange,提问作者sharon
相关产品推荐
相关产品推荐

