121 lines
2.7 KiB
Dart
121 lines
2.7 KiB
Dart
import 'package:dio/dio.dart';
|
|
import 'package:shared_preferences/shared_preferences.dart';
|
|
|
|
class ApiClient {
|
|
final Dio dio;
|
|
final SharedPreferences? sharedPreferences;
|
|
static const String baseUrl = 'https://hrm.go.iq/api';
|
|
static const String _tokenKey = 'user_token';
|
|
|
|
ApiClient({required this.dio, this.sharedPreferences}) {
|
|
dio.options = BaseOptions(
|
|
baseUrl: baseUrl,
|
|
connectTimeout: const Duration(seconds: 30),
|
|
receiveTimeout: const Duration(seconds: 30),
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
'accept': 'text/plain',
|
|
},
|
|
);
|
|
|
|
// Add interceptor to add token to requests
|
|
dio.interceptors.add(
|
|
InterceptorsWrapper(
|
|
onRequest: (options, handler) async {
|
|
// Get token from SharedPreferences
|
|
final token = sharedPreferences?.getString(_tokenKey);
|
|
if (token != null && token.isNotEmpty) {
|
|
options.headers['Authorization'] = 'Bearer $token';
|
|
}
|
|
return handler.next(options);
|
|
},
|
|
),
|
|
);
|
|
|
|
// Add interceptors for logging and error handling
|
|
dio.interceptors.add(
|
|
LogInterceptor(
|
|
requestBody: true,
|
|
responseBody: true,
|
|
error: true,
|
|
requestHeader: true,
|
|
responseHeader: false,
|
|
),
|
|
);
|
|
}
|
|
|
|
Future<Response> post(
|
|
String path, {
|
|
dynamic data,
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
}) async {
|
|
try {
|
|
final response = await dio.post(
|
|
path,
|
|
data: data,
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
);
|
|
return response;
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<Response> get(
|
|
String path, {
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
}) async {
|
|
try {
|
|
final response = await dio.get(
|
|
path,
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
);
|
|
return response;
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<Response> put(
|
|
String path, {
|
|
dynamic data,
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
}) async {
|
|
try {
|
|
final response = await dio.put(
|
|
path,
|
|
data: data,
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
);
|
|
return response;
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
|
|
Future<Response> delete(
|
|
String path, {
|
|
dynamic data,
|
|
Map<String, dynamic>? queryParameters,
|
|
Options? options,
|
|
}) async {
|
|
try {
|
|
final response = await dio.delete(
|
|
path,
|
|
data: data,
|
|
queryParameters: queryParameters,
|
|
options: options,
|
|
);
|
|
return response;
|
|
} catch (e) {
|
|
rethrow;
|
|
}
|
|
}
|
|
}
|