api_service.dart 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import 'package:dio/dio.dart';
  2. import 'package:naiyouwl/app/data/model/LoginMode.dart';
  3. import 'package:naiyouwl/app/data/model/NodeMode.dart';
  4. import '../data/model/SysConfig.dart';
  5. import '../data/model/UserMode.dart';
  6. import 'dio_client.dart';
  7. class ApiService {
  8. static final ApiService _instance = ApiService._internal();
  9. final DioClient _dioClient = DioClient();
  10. factory ApiService() => _instance;
  11. ApiService._internal();
  12. Future<SysConfig> fetchSysConfig(String path) async {
  13. final data = await _requestWrapper(() => _dioClient.get(path));
  14. return SysConfig.fromJson(data);
  15. }
  16. Future<LoginMode> login(String path, {Map<String, dynamic>? data}) async {
  17. final retData =await _requestWrapper(() => _dioClient.post(path,data: data));
  18. return LoginMode.fromJson(retData);
  19. }
  20. Future<User> userinfo(String path) async {
  21. final retData =await _requestWrapper(() => _dioClient.get(path));
  22. return User.fromJson(retData);
  23. }
  24. Future<List<nodeMode>> getNode(String path) async {
  25. final retData =await _requestWrapper(() => _dioClient.get(path));
  26. if (retData is List) {
  27. // 遍历List并为每一项调用NodeMode.fromJson
  28. return (retData as List).map((item) {
  29. return nodeMode.fromJson(item);
  30. }).toList();
  31. } else {
  32. throw Exception("Expected a list but received ${retData.runtimeType}");
  33. }
  34. }
  35. Future<Map<String, dynamic>> fetchData(String path, {Map<String, dynamic>? queryParameters}) async {
  36. return await _dioClient.get(path, queryParameters: queryParameters);
  37. }
  38. Future<Map<String, dynamic>> createData(String path, {Map<String, dynamic>? data}) async {
  39. return await _dioClient.post(path, data: data);
  40. }
  41. Future<Map<String, dynamic>> updateData(String path, {Map<String, dynamic>? data}) async {
  42. return await _dioClient.put(path, data: data);
  43. }
  44. Future<void> downloadFile(String urlPath, String savePath) async {
  45. await _dioClient.download(urlPath, savePath);
  46. }
  47. Future<dynamic> _requestWrapper(Future<dynamic> Function() apiCall) async {
  48. try {
  49. return await apiCall();
  50. } catch (e) {
  51. if (e is DioError && e.error is AppException) {
  52. throw e.error; // 抛出自定义的AppException
  53. } else {
  54. throw Exception('API request failed: $e');
  55. }
  56. }
  57. }
  58. }