api_service.dart 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import 'package:dio/dio.dart';
  2. import 'package:naiyouwl/app/data/model/LoginMode.dart';
  3. import '../data/model/SysConfig.dart';
  4. import 'dio_client.dart';
  5. class ApiService {
  6. static final ApiService _instance = ApiService._internal();
  7. final DioClient _dioClient = DioClient();
  8. factory ApiService() => _instance;
  9. ApiService._internal();
  10. Future<SysConfig> fetchSysConfig(String path) async {
  11. final Map<String, dynamic> data = await _requestWrapper(() => _dioClient.get(path));
  12. return SysConfig.fromJson(data);
  13. }
  14. Future<LoginMode> login(String path, {Map<String, dynamic>? data}) async {
  15. final Map<String, dynamic> retData =await _requestWrapper(() => _dioClient.post(path,data: data));
  16. return LoginMode.fromJson(retData);
  17. }
  18. Future<Map<String, dynamic>> fetchData(String path, {Map<String, dynamic>? queryParameters}) async {
  19. return await _dioClient.get(path, queryParameters: queryParameters);
  20. }
  21. Future<Map<String, dynamic>> createData(String path, {Map<String, dynamic>? data}) async {
  22. return await _dioClient.post(path, data: data);
  23. }
  24. Future<Map<String, dynamic>> updateData(String path, {Map<String, dynamic>? data}) async {
  25. return await _dioClient.put(path, data: data);
  26. }
  27. Future<void> downloadFile(String urlPath, String savePath) async {
  28. await _dioClient.download(urlPath, savePath);
  29. }
  30. Future<Map<String, dynamic>> _requestWrapper(Future<Map<String, dynamic>> Function() apiCall) async {
  31. try {
  32. return await apiCall();
  33. } catch (e) {
  34. if (e is DioError && e.error is AppException) {
  35. throw e.error; // 抛出自定义的AppException
  36. } else {
  37. throw Exception('API request failed: $e');
  38. }
  39. }
  40. }
  41. }