68 lines
1.8 KiB
Dart
68 lines
1.8 KiB
Dart
import 'package:dio/dio.dart';
|
|
import 'package:flutter_samples/helpers/config.dart';
|
|
import 'package:flutter_samples/helpers/constants/index.dart';
|
|
import 'package:flutter_samples/helpers/dio_mock.dart';
|
|
|
|
final dio = Dio(BaseOptions(baseUrl: AppConfig.baseUrl));
|
|
|
|
class DioInterceptors extends Interceptor {
|
|
@override
|
|
Future onRequest(
|
|
RequestOptions options,
|
|
RequestInterceptorHandler handler,
|
|
) async {
|
|
// TODO 处理token
|
|
String? token = "";
|
|
options.headers['Authorization'] = token.isNotEmpty ? 'Bearer $token' : '';
|
|
options.headers['Content-Type'] = 'application/json';
|
|
super.onRequest(options, handler);
|
|
}
|
|
|
|
@override
|
|
void onResponse(Response response, ResponseInterceptorHandler handler) {
|
|
super.onResponse(response, handler);
|
|
}
|
|
|
|
@override
|
|
Future onError(DioException err, ErrorInterceptorHandler handler) async {
|
|
final statusCode = err.response?.statusCode;
|
|
switch (statusCode) {
|
|
case 401:
|
|
// TODO 处理token过期
|
|
break;
|
|
default:
|
|
}
|
|
super.onError(err, handler);
|
|
}
|
|
}
|
|
|
|
class MockInterceptor extends Interceptor {
|
|
@override
|
|
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
|
|
final path = options.path;
|
|
if (mockData.containsKey(path)) {
|
|
Future.delayed(Duration(milliseconds: 300)).then((_) {
|
|
handler.resolve(
|
|
Response(
|
|
requestOptions: options,
|
|
statusCode: 200,
|
|
data: mockData[path],
|
|
),
|
|
);
|
|
});
|
|
} else {
|
|
super.onRequest(options, handler);
|
|
}
|
|
}
|
|
}
|
|
|
|
class DioRequest {
|
|
static Future post(String url, Map<String, dynamic> params) async {
|
|
dio.interceptors.add(DioInterceptors());
|
|
if (isMockRequest) {
|
|
dio.interceptors.add(MockInterceptor());
|
|
}
|
|
return await dio.post(url, data: params);
|
|
}
|
|
}
|