flutter-samples/lib/helpers/dio.dart
2025-05-03 15:33:44 +08:00

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);
}
}