feat:dio client done
This commit is contained in:
44
lib/core/network/dio_client.dart
Normal file
44
lib/core/network/dio_client.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
41
lib/core/network/error_handler_interceptor.dart
Normal file
41
lib/core/network/error_handler_interceptor.dart
Normal 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;
|
||||
}
|
||||
}
|
||||
17
lib/core/network/header_interceptors.dart
Normal file
17
lib/core/network/header_interceptors.dart
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user