import 'package:dio/dio.dart'; import 'package:naiyouwl/app/data/model/LoginMode.dart'; import 'package:naiyouwl/app/data/model/NodeMode.dart'; import '../data/model/SysConfig.dart'; import '../data/model/UserMode.dart'; import 'dio_client.dart'; class ApiService { static final ApiService _instance = ApiService._internal(); final DioClient _dioClient = DioClient(); factory ApiService() => _instance; ApiService._internal(); Future fetchSysConfig(String path) async { final data = await _requestWrapper(() => _dioClient.get(path)); return SysConfig.fromJson(data); } Future login(String path, {Map? data}) async { final retData =await _requestWrapper(() => _dioClient.post(path,data: data)); return LoginMode.fromJson(retData); } Future userinfo(String path) async { final retData =await _requestWrapper(() => _dioClient.get(path)); return User.fromJson(retData); } Future> getNode(String path) async { final retData =await _requestWrapper(() => _dioClient.get(path)); if (retData is List) { // 遍历List并为每一项调用NodeMode.fromJson return (retData as List).map((item) { return nodeMode.fromJson(item); }).toList(); } else { throw Exception("Expected a list but received ${retData.runtimeType}"); } } Future> fetchData(String path, {Map? queryParameters}) async { return await _dioClient.get(path, queryParameters: queryParameters); } Future> createData(String path, {Map? data}) async { return await _dioClient.post(path, data: data); } Future> updateData(String path, {Map? data}) async { return await _dioClient.put(path, data: data); } Future downloadFile(String urlPath, String savePath) async { await _dioClient.download(urlPath, savePath); } Future _requestWrapper(Future Function() apiCall) async { try { return await apiCall(); } catch (e) { if (e is DioError && e.error is AppException) { throw e.error; // 抛出自定义的AppException } else { throw Exception('API request failed: $e'); } } } }