import 'package:dart_json_mapper/dart_json_mapper.dart'; import 'package:dio/dio.dart'; import 'package:naiyouwl/app/common/LogHelper.dart'; import 'package:naiyouwl/app/common/SharedPreferencesUtil.dart'; import 'package:naiyouwl/app/data/model/LoginMode.dart'; import 'package:naiyouwl/app/data/model/NodeMode.dart'; import 'package:naiyouwl/app/data/model/UpdateVersion.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 init() async { String? lastSuccessfulUrl = await SharedPreferencesUtil().getString("last_successful_url"); if (lastSuccessfulUrl != null && lastSuccessfulUrl.isNotEmpty) { LogHelper().d("last_successful_url---- $lastSuccessfulUrl"); _dioClient.updateBaseUrl(lastSuccessfulUrl); } } Future fetchSysConfig(String path) async { final data = await _requestWrapper(() => _dioClient.get(path)); final result = JsonMapper.deserialize(data); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } //authUser Future fetchAuthUser(String path) async { final data = await _requestWrapper(() => _dioClient.get(path)); final result = JsonMapper.deserialize(data); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } Future fetchLogout(String path) async { final data = await _requestWrapper(() => _dioClient.get(path)); final result = JsonMapper.deserialize(data); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } Future fetchUpdateVersion(String path, Map data) async { final ret = await _requestWrapper(() => _dioClient.get(path,queryParameters: data)); final result = JsonMapper.deserialize(ret); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } Future fetchUserSysConfig(String path, Map data) async { final ret = await _requestWrapper(() => _dioClient.get(path,queryParameters: data)); final result = JsonMapper.deserialize(ret); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } Future login(String path, {Map? data}) async { final retData =await _requestWrapper(() => _dioClient.post(path,data: data)); final result = JsonMapper.deserialize(retData); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } Future reg(String path, {Map? data}) async { final retData =await _requestWrapper(() => _dioClient.post(path,data: data)); final result = JsonMapper.deserialize(retData); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } Future userinfo(String path) async { final retData =await _requestWrapper(() => _dioClient.get(path)); final result = JsonMapper.deserialize(retData); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } } Future> getNode(String path) async { final retData = await _requestWrapper(() => _dioClient.get(path)); if (retData is List) { // 遍历List并为每一项调用NodeMode.fromJson return (retData).map((item) { final result = JsonMapper.deserialize(item); if (result != null) { return result; } else { throw Exception("Failed API response is NUll"); } }).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 { await ApiService().init(); final response = await apiCall(); // 如果你有返回的HTTP状态码, 检查它们 // if(response.statusCode < 200 || response.statusCode >= 300) { // throw Exception('API returned non-success status code: ${response.statusCode}'); // } // 对于特定的请求, 检查返回值是否为null if (response == null) { throw Exception('API response is null'); } return response; } catch (e) { // 日志错误 print('API request error: $e'); if (e is DioError && e.error is AppException) { final appException = e.error as AppException; print('API request failed with status code: ${appException.statusCode}'); throw appException; // 抛出自定义的AppException } else { throw Exception('API request failed: $e'); } } } }