Files
finger_print_app/lib/core/network/api_client.dart
Mohammed Al-Samarraie fa4bee4771 1111
2026-01-13 13:07:31 +03:00

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;
}
}
}