53 lines
1.2 KiB
Dart
53 lines
1.2 KiB
Dart
import 'package:dio/dio.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:quiz_app/core/endpoint/api_endpoint.dart';
|
|
import 'package:quiz_app/core/utils/logger.dart';
|
|
|
|
class ApiClient extends GetxService {
|
|
late final Dio dio;
|
|
|
|
Future<ApiClient> init() async {
|
|
dio = Dio(BaseOptions(
|
|
baseUrl: APIEndpoint.baseUrl,
|
|
connectTimeout: const Duration(minutes: 3),
|
|
receiveTimeout: const Duration(minutes: 10),
|
|
headers: {
|
|
"Content-Type": "application/json",
|
|
},
|
|
));
|
|
|
|
dio.interceptors.add(
|
|
InterceptorsWrapper(
|
|
onRequest: (options, handler) {
|
|
logC.i('''
|
|
➡️ [REQUEST]
|
|
[${options.method}] ${options.uri}
|
|
Headers: ${options.headers}
|
|
Body: ${options.data}
|
|
''');
|
|
return handler.next(options);
|
|
},
|
|
onResponse: (response, handler) {
|
|
logC.i('''
|
|
✅ [RESPONSE]
|
|
[${response.statusCode}] ${response.requestOptions.uri}
|
|
Data: ${response.data}
|
|
''');
|
|
return handler.next(response);
|
|
},
|
|
onError: (DioException e, handler) {
|
|
logC.e('''
|
|
❌ [ERROR]
|
|
[${e.response?.statusCode}] ${e.requestOptions.uri}
|
|
Message: ${e.message}
|
|
Error Data: ${e.response?.data}
|
|
''');
|
|
return handler.next(e);
|
|
},
|
|
),
|
|
);
|
|
|
|
return this;
|
|
}
|
|
}
|