基础页面
This commit is contained in:
97
lib/utils/request/http_interceptor.dart
Normal file
97
lib/utils/request/http_interceptor.dart
Normal file
@@ -0,0 +1,97 @@
|
||||
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,
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user