loadResponse<T> method
Load response from API call and wrap it in GeneralResponse
Implementation
Future<GeneralResponse<T>> loadResponse<T>(
Future<T> Function() executor) async {
GeneralResponse<T> resp;
try {
resp = GeneralResponse(data: await executor(), statusCode: 200);
// API Response: Success
} on DioException catch (e) {
// API Error logging
// Error: ${e.message}
// Type: ${e.type}
// Response: ${e.response}
// Handle network/timeout errors
if ((e.message ?? '').contains('SocketException') ||
e.type == DioExceptionType.receiveTimeout ||
e.type == DioExceptionType.connectionTimeout) {
resp = GeneralResponse<T>(
statusCode: -1,
dioException: e,
apiError: null,
data: null,
);
} else {
// Parse API error from response
ApiError? apiError;
if (e.response != null &&
e.response?.data != null &&
e.response?.data is Map<String, dynamic>) {
apiError = ApiError.fromJson(e.response!.data);
}
resp = GeneralResponse(
statusCode: e.response?.statusCode ?? 400,
dioException: e,
apiError: apiError,
data: null,
);
}
}
return resp;
}