如何在Flutter GetX的GET请求中传递查询参数?(含问题代码)
解决GetX GetConnect带查询参数的GET请求问题
问题分析
你这段代码的核心问题有两个:
- 手动拼接
Uri时,和已设置的baseUrl冲突,导致请求路径错误 - 请求没带上初始化好的
_mainHeaders,可能触发接口权限校验失败
修正后的代码
class ApiClient extends GetConnect implements GetxService{ late String token; final String appBaseUrl; late Map<String, String> _mainHeaders; ApiClient({required this.appBaseUrl}){ baseUrl = appBaseUrl; timeout = const Duration(minutes: 5); token = AppUrlConstant.TOKEN; _mainHeaders = { 'Content-type':'application/json; charset=UTF-8', 'Authorization': 'Bearer $token', }; } Future<Response> getDataWithParam(String url, String bToken) async { try{ // 直接用get方法的query参数,不用手动拼Uri final response = await get( url, query: {"bookingToken": bToken}, headers: _mainHeaders, // 带上请求头 ); return response; }catch(e){ print("API请求错误: ${e.toString()}"); return Response(statusCode: 1, statusText: e.toString()); } } }
关键修改说明
- 去掉手动构造
Uri的逻辑,直接用get方法自带的query参数传递查询参数,GetConnect会自动帮你拼接成正确的URL格式 - 在
get调用里加上headers: _mainHeaders,确保请求带上授权头和内容类型头 - 优化了错误打印的格式,更易读
调用示例
比如你的接口路径是/booking/detail,用户输入的token是user_booking_token_123,调用方式如下:
final apiClient = ApiClient(appBaseUrl: "https://your-api-domain.com"); final response = await apiClient.getDataWithParam("/booking/detail", "user_booking_token_123"); // 处理响应 if(response.statusCode == 200){ // 成功获取数据 print(response.body); }else{ // 处理错误 print("请求失败: ${response.statusText}"); }
内容的提问来源于stack exchange,提问作者Ukeme Elijah
相关产品推荐
相关产品推荐

