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 params) async { dio.interceptors.add(DioInterceptors()); if (isMockRequest) { dio.interceptors.add(MockInterceptor()); } return await dio.post(url, data: params); } }