feat:dio client done

This commit is contained in:
jahongireshonqulov
2025-10-28 17:03:13 +05:00
parent c528f7a07e
commit 4c652c2b47
18 changed files with 336 additions and 3 deletions

View File

@@ -0,0 +1,44 @@
import 'package:dio/dio.dart';
import 'package:flutter/foundation.dart';
import 'package:food_delivery_client/core/network/header_interceptors.dart';
import 'package:food_delivery_client/food_delivery_client.dart';
import 'error_handler_interceptor.dart';
@module
abstract class DioModule {
@lazySingleton
Dio dio(DioClient dioClient) => dioClient.dio;
}
@lazySingleton
class DioClient {
final BaseOptions _dioBaseOptions = BaseOptions(
baseUrl: ApiConst.baseUrl,
connectTimeout: TimeDelayConst.durationMill3500,
receiveTimeout: TimeDelayConst.durationMill3500,
followRedirects: false,
validateStatus: (status) => status != null && status >= 200 && status < 300,
);
Dio get dio {
final Dio dio = Dio(_dioBaseOptions);
dio.interceptors
..add(HeaderInterceptors())
..add(ErrorHandlerInterceptors())
..add(
LogInterceptor(
requestHeader: true,
requestBody: true,
responseBody: true,
error: true,
request: true,
logPrint: (object) {
if (kDebugMode) {
log('Error ${object.toString()}');
}
},
),
);
return dio;
}
}

View File

@@ -0,0 +1,41 @@
import 'package:dio/dio.dart';
import '../../feature/common/data/models/error_model.dart';
class ErrorHandlerInterceptors extends Interceptor {
@override
void onError(DioException err, ErrorInterceptorHandler handler) {
if (err.response != null && err.response!.statusCode != null) {
if (err.response?.data is String) {
final errorMessage = err.response?.data as String?;
final error = ErrorModel(
detail: errorMessage?.replaceAll(RegExp(r'<[^>]+>'), '') ?? '',
);
handler.next(
DioException(
requestOptions: err.requestOptions,
response: Response(
requestOptions: err.requestOptions,
data: error.toJson(),
),
),
);
return;
} else {
handler.next(err);
return;
}
}
const error = ErrorModel(detail: "");
handler.next(
DioException(
requestOptions: err.requestOptions,
response: Response(
requestOptions: err.requestOptions,
data: error.toJson(),
),
),
);
return;
}
}

View File

@@ -0,0 +1,17 @@
import 'package:dio/dio.dart';
class HeaderInterceptors extends Interceptor {
HeaderInterceptors._internal();
static final HeaderInterceptors _interceptors =
HeaderInterceptors._internal();
factory HeaderInterceptors() {
return _interceptors;
}
@override
void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
handler.next(options);
}
}