Aidra Driver 1.3.5+68
Aidra Driver - Your path to green energy
Loading...
Searching...
No Matches
api_client.dart
Go to the documentation of this file.
1import 'dart:convert';
2import 'package:dio/dio.dart';
3import '../services/analytics_service.dart';
4
5import '../error/exceptipns/server_exception.dart';
6import 'api_endpoints.dart';
7import 'auth_interceptor.dart';
8
9class ApiClient {
10 late final Dio _dio;
12
14 Duration connectTimeout = const Duration(seconds: 30),
15 Duration receiveTimeout = const Duration(seconds: 30),
16 Duration sendTimeout = const Duration(seconds: 30),
17 }) {
19 connectTimeout: connectTimeout,
20 receiveTimeout: receiveTimeout,
21 sendTimeout: sendTimeout,
22 );
23 }
24
26 required Duration connectTimeout,
27 required Duration receiveTimeout,
28 required Duration sendTimeout,
29 }) {
30 final dio = Dio(
31 BaseOptions(
32 baseUrl: ApiEndpoints.hostname,
33 connectTimeout: connectTimeout,
34 receiveTimeout: receiveTimeout,
35 sendTimeout: sendTimeout,
36 contentType: 'application/json',
37 headers: {'Accept': 'application/json'},
38 validateStatus: (status) {
39 return status != null && status < 500;
40 },
41 ),
42 );
43
44 dio.interceptors.add(AuthInterceptor(dio: dio));
45 return dio;
46 }
47
48 Future<dynamic> get({String? path, String? url}) async {
49 try {
50 final endpoint = url ?? ApiEndpoints.buildUrl(path!);
51 final response = await _dio.get(endpoint);
52
53 _analytics.captureEvent('api_call_success', properties: {
54 'method': 'GET',
55 'endpoint': endpoint,
56 });
57
58 return _handleResponse(response);
59 } on DioException catch (e) {
60 _analytics.captureEvent('api_call_error', properties: {
61 'method': 'GET',
62 'endpoint': (url ?? path) as Object,
63 'status_code': e.response?.statusCode as Object,
64 'error_message': e.message as Object,
65 'response_data': e.response?.data as Object,
66 });
67
68 throw ServerException.fromStatus(e.response?.statusCode ?? 500);
69 } catch (e) {
70 throw ServerException.fromStatus(500);
71 }
72 }
73
74 Future<Map<String, dynamic>> post({
75 String? url,
76 String? path,
77 required Map<String, dynamic> data,
78 }) async {
79 try {
80 final endpoint = url ?? ApiEndpoints.buildUrl(path!);
81 final response = await _dio.post(
82 endpoint,
83 data: jsonEncode(data),
84 );
85
86 _analytics.captureEvent('api_call_success', properties: {
87 'method': 'POST',
88 'endpoint': endpoint,
89 'request_body': data.toString(),
90 });
91
92 final result = _handleResponse(response);
93 if (result is Map<String, dynamic>) {
94 return result;
95 } else if (result == null) {
96 return {};
97 } else {
98 return {'data': result};
99 }
100 } on DioException catch (e) {
101 _analytics.captureEvent('api_call_error', properties: {
102 'method': 'POST',
103 'endpoint': (url ?? path) as Object,
104 'status_code': e.response?.statusCode as Object,
105 'error_message': e.message as Object,
106 'response_data': e.response?.data as Object,
107 });
108
109 throw ServerException.fromStatus(e.response?.statusCode ?? 500);
110 }
111 }
112
113 dynamic _handleResponse(Response response) {
114 final statusCode = response.statusCode ?? 500;
115 if (statusCode == 204 || response.data == null || response.data == '') {
116 return {};
117 }
118 if (statusCode == 200) {
119 if (response.data is Map) {
120 final statusCodeValue = response.data['statusCodeValue'];
121 if (statusCodeValue != null && statusCodeValue != 200) {
122 throw ServerException.fromStatus(statusCodeValue);
123 }
124 if (response.data['code'] == 400 && response.data['message'] == 'NO Data Found') {
125 return {};
126 }
127 }
128 return response.data;
129 }
130 throw ServerException.fromStatus(statusCode);
131 }
132}
static AnalyticsService get instance
Dio _createDioInstance({ required Duration connectTimeout, required Duration receiveTimeout, required Duration sendTimeout, })
dynamic _handleResponse(Response response)
Future< Map< String, dynamic > > post({ String? url, String? path, required Map< String, dynamic > data, }) async
final _analytics
Future< dynamic > get({String? path, String? url}) async
late final Dio _dio
ApiClient({ Duration connectTimeout=const Duration(seconds:30), Duration receiveTimeout=const Duration(seconds:30), Duration sendTimeout=const Duration(seconds:30), })
final String path
class Partner String
final String message
Definition failures.dart:0