使用Ransack筛选数据遇问题:Map重复键导致仅获取部分状态数据
问题解决:Ransack多状态筛选失效及Map重复键警告
问题原因
Dart的Map不允许存在重复键,你代码中重复定义"q[payment_status_in][]"键,后一个值"Overdue"会直接覆盖前一个"Coming Due",最终接口只收到Overdue这一个筛选条件,同时IDE抛出重复键警告。
解决方案
Ransack的_in筛选器支持传入数组值,只需将对应键的值设置为包含两个状态的列表,Dio会自动将列表解析为符合Ransack要求的多参数格式。
修改后的代码:
Future<ListResponse?> getData(GetParams params) async { Map<String, dynamic> commonParams = { // ... 其他参数 "q[payment_status_in][]": ["Coming Due", "Overdue"] }; Response response = await Dio() .get('$kBaseUrl/xxx', queryParameters: commonParams); var res = ListResponse.fromJson(response.data); if (res.status != true) { throw ServerException(res.errorMessage![0]); } return res; }
说明
修改后,Dio发起请求时会自动生成如下格式的query参数:q[payment_status_in][]=Coming%20Due&q[payment_status_in][]=Overdue
该格式完全符合Ransack的筛选规则,可同时筛选出"Coming Due"和"Overdue"状态的数据。
内容的提问来源于stack exchange,提问作者John Joe
相关产品推荐
相关产品推荐

