Flutter中Chucker库JSON编码异常问题求助
解决Chucker与Dio v5.x兼容的JSON编码问题
以下是几种可行的解决思路,按优先级排序:
给自定义ApiResponse类添加序列化方法
如果你的ApiResponse是自定义实体类,直接给它实现toJson()方法,让Chucker能自动将其转为可编码的Map对象:class ApiResponse<T> { final int code; final String message; final T data; ApiResponse({required this.code, required this.message, required this.data}); Map<String, dynamic> toJson() { return { 'code': code, 'message': message, 'data': (data is dynamic && data is! String && data is! num && data is! bool) ? (data as dynamic).toJson() : data, }; } }自定义Chucker的JSON转换器
给ChuckerDioInterceptor传入自定义的jsonConverter参数,手动处理ApiResponse的序列化逻辑:final chuckerInterceptor = ChuckerDioInterceptor( jsonConverter: (data) { if (data is ApiResponse) { return { 'code': data.code, 'message': data.message, 'data': data.data, // 根据你的ApiResponse结构补充其他字段 }; } // 其他类型保持默认处理 return data; }, );升级Chutter到适配Dio v5的版本
你当前使用的chucker_flutter: ^1.8.0可能对Dio v5的兼容性不足,尝试升级到最新稳定版(比如v2.x系列),修改pubspec.yaml:chucker_flutter: ^2.0.0 # 请确认最新兼容版本前置拦截器转换响应数据
在Chucker拦截器之前添加一个自定义拦截器,先把ApiResponse转为可序列化的对象,再交给Chucker处理:class ResponseTransformInterceptor extends Interceptor { @override void onResponse(Response response, ResponseInterceptorHandler handler) { if (response.data is ApiResponse) { response.data = { 'code': response.data.code, 'message': response.data.message, 'data': response.data.data, }; } super.onResponse(response, handler); } } // 配置顺序:先加转换拦截器,再加Chucker拦截器 dio.interceptors.add(ResponseTransformInterceptor()); dio.interceptors.add(chuckerInterceptor);
内容的提问来源于stack exchange,提问作者diodii
相关产品推荐
相关产品推荐

