Files
zh-chat-flutter/lib/utils/request/http_interceptor.dart
2022-10-20 14:21:39 +08:00

98 lines
2.3 KiB
Dart

import 'package:chat/services/auth_service.dart';
import 'package:chat/utils/ui_tools.dart';
import 'package:dio/dio.dart';
class HttpInterceptor extends Interceptor {
@override
void onRequest(
RequestOptions options,
RequestInterceptorHandler handler,
) {
// 头部添加token
// options.headers['Authorization'] = AuthService.to.userToken;
options.headers['Accept'] = 'application/json';
super.onRequest(
options,
handler,
);
}
@override
void onResponse(
Response response,
ResponseInterceptorHandler handler,
) {
final apiStatusCode = response.data['status_code'];
if (apiStatusCode == 200) {
response.data = response.data['data'];
} else if (apiStatusCode == 401) {
throw DioError(
response: response,
error: "登录超时",
requestOptions: response.requestOptions,
);
} else if (apiStatusCode == 404) {
throw DioError(
response: response,
error: "请求的接口不存在",
requestOptions: response.requestOptions,
);
} else if (apiStatusCode == 0) {
throw DioError(
response: response,
error: response.data['message'],
requestOptions: response.requestOptions,
);
} else {
throw DioError(
response: response,
error: response.data['message'],
requestOptions: response.requestOptions,
);
}
super.onResponse(
response,
handler,
);
}
@override
void onError(
DioError err,
ErrorInterceptorHandler handler,
) {
switch (err.type) {
// 连接服务器超时
case DioErrorType.connectTimeout:
UiTools.toast('网络传输超时');
break;
// 响应超时
case DioErrorType.receiveTimeout:
UiTools.toast('网络传输超时');
break;
// 发送超时
case DioErrorType.sendTimeout:
UiTools.toast('网络传输超时');
break;
// 请求取消
case DioErrorType.cancel:
break;
// 404/503错误
case DioErrorType.response:
break;
// other 其他错误类型
case DioErrorType.other:
if (err.response?.data['status_code'] == 401) {
AuthService.to.logout();
}
break;
}
super.onError(
err,
handler,
);
}
}