// api/service/user_api_service.dart import 'package:dio/dio.dart' as dioAlias; import 'package:starwork_flutter/api/api_response.dart'; import 'package:starwork_flutter/flavors.dart'; class BaseApiService { final dioAlias.Dio dio = dioAlias.Dio(); BaseApiService() { dio.options.baseUrl = F.apiHost; dio.options.connectTimeout = const Duration(seconds: 30); dio.options.receiveTimeout = const Duration(seconds: 30); // 可添加拦截器、token 等 } /// 统一请求方法(私有,但子类可用) Future> makeRequest({ required String path, String method = 'GET', dynamic data, Map? queryParameters, required T Function(dynamic) fromJson, }) async { try { dioAlias.Response response; switch (method.toUpperCase()) { case 'GET': response = await dio.get(path, queryParameters: queryParameters); break; case 'POST': response = await dio.post(path, data: data, queryParameters: queryParameters); break; case 'PUT': response = await dio.put(path, data: data, queryParameters: queryParameters); break; case 'DELETE': response = await dio.delete(path, data: data, queryParameters: queryParameters); break; case 'PATCH': response = await dio.patch(path, data: data, queryParameters: queryParameters); break; default: return ApiResponse.error('Unsupported method: $method'); } if (response.statusCode! >= 200 && response.statusCode! < 300) { final parsedData = fromJson(response.data); return ApiResponse.success( parsedData, statusCode: response.statusCode, message: 'Success', ); } else { return ApiResponse.error( response.statusMessage ?? 'Request failed', statusCode: response.statusCode, ); } } on dioAlias.DioException catch (e) { String message = 'Unknown error'; int? statusCode = e.response?.statusCode; if (e.type == dioAlias.DioExceptionType.connectionTimeout) { message = 'Connection timeout'; } else if (e.type == dioAlias.DioExceptionType.receiveTimeout) { message = 'Server timeout'; } else if (e.type == dioAlias.DioExceptionType.badResponse) { message = e.response?.statusMessage ?? 'Bad response'; } else if (e.type == dioAlias.DioExceptionType.connectionError) { message = 'Network not available'; } else { message = e.message ?? 'Something went wrong'; } return ApiResponse.error(message, statusCode: statusCode); } catch (e) { return ApiResponse.error('Unexpected error: $e'); } } }