import 'package:dio/dio.dart';
import 'package:models/models.dart';
import 'custom_exception.dart';
class CustomExceptionInterceptor extends Interceptor {
// 我想直接在响应拦截器里直接提取出Map<String, dynamic>接口数据,
// 省的在每个repository里都要response.data拿数据,但是这两种写法都不行,老师帮忙看下,谢谢!
// 写法1:
// @override
// void onResponse(Response response, ResponseInterceptorHandler handler) {
// handler.resolve(response.data);
// }
// 写法2:
@override
void onResponse(Response response, ResponseInterceptorHandler handler) {
final data = response.data;
response.data = data;
return super.onResponse(response, handler);
}
/// Called when an exception was occurred during the request.
@override
void onError(DioException err, ErrorInterceptorHandler handler) {
if (err.response != null) {
final problem = Problem.fromJson(err.response!.data);
throw CustomException(
problem.title ?? err.message ?? 'Unknown error',
problem.detail ?? 'Unknown Error',
response: err.response!,
);
}
super.onError(err, handler);
}
}