Files
syncrow-app/lib/services/api/http_service.dart
Mohammad Salameh df13c66b1a Refactor API error handling and add try-catch blocks
Added try-catch blocks for error handling in API's files to rethrow the errors to the cubit so cubits can update the UI based on them.

Refactored error handling in HTTPInterceptor and HTTPService classes.
2024-04-15 15:47:13 +03:00

130 lines
3.5 KiB
Dart

import 'package:dio/dio.dart';
import 'dart:developer' as developer;
import 'package:syncrow_app/services/api/api_links_endpoints.dart';
import 'package:syncrow_app/services/api/http_interceptor.dart';
import 'package:syncrow_app/services/locator.dart';
class HTTPService {
final Dio client = serviceLocator.get<Dio>();
// final navigatorKey = GlobalKey<NavigatorState>();
String certificateString = "";
static Dio setupDioClient() {
Dio client = Dio(
BaseOptions(
baseUrl: ApiEndpoints.baseUrl,
receiveDataWhenStatusError: true,
followRedirects: false,
connectTimeout: const Duration(seconds: 30),
receiveTimeout: const Duration(seconds: 30),
),
);
client.interceptors.add(serviceLocator.get<HTTPInterceptor>());
return client;
}
Future<T> get<T>({
required String path,
Map<String, dynamic>? queryParameters,
required T Function(dynamic) expectedResponseModel,
bool showServerMessage = true,
}) async {
try {
final response = await client.get(
path,
queryParameters: queryParameters,
);
return expectedResponseModel(response.data);
} catch (error) {
rethrow;
}
}
Future<T> post<T>(
{required String path,
Map<String, dynamic>? queryParameters,
Options? options,
dynamic body,
bool showServerMessage = true,
required T Function(dynamic) expectedResponseModel}) async {
try {
final response = await client.post(
path,
data: body,
queryParameters: queryParameters,
options: options,
);
return expectedResponseModel(response.data);
} catch (error) {
rethrow;
}
}
Future<T> patch<T>(
{required String path,
Map<String, dynamic>? queryParameters,
dynamic body,
required T Function(dynamic) expectedResponseModel}) async {
try {
final response = await client.patch(
path,
data: body,
queryParameters: queryParameters,
);
developer.log("status code is ${response.statusCode}");
return expectedResponseModel(response.data);
} catch (error) {
developer.log("******* Error");
developer.log(error.toString());
rethrow;
}
}
Future<T> download<T>(
{required String path,
required String savePath,
Map<String, dynamic>? queryParameters,
required T Function(dynamic) expectedResponseModel}) async {
try {
developer.log("download begins");
final response = await client.download(
path,
savePath,
onReceiveProgress: (current, total) {
developer.log("current = $current, while total = $total");
},
);
developer.log("download ends");
return expectedResponseModel(response.data);
// return expectedResponseModel(response.data);
} catch (error) {
developer.log("******* Error");
developer.log("download error");
developer.log(error.toString());
rethrow;
}
}
Future<T> delete<T>({
required String path,
Map<String, dynamic>? queryParameters,
required T Function(dynamic) expectedResponseModel,
bool showServerMessage = true,
}) async {
try {
final response = await client.delete(
path,
queryParameters: queryParameters,
);
return expectedResponseModel(response.data);
} catch (error) {
developer.log("******* Error");
developer.log(error.toString());
rethrow;
}
}
}