Untitled
unknown
dart
a year ago
2.7 kB
8
Indexable
import 'dart:convert';
import 'package:dio/dio.dart';
import 'package:ecommerce_integration_mobile_app/core/model/response/base_response_model.dart';
import 'package:ecommerce_integration_mobile_app/core/provider/snack_bar_provider.dart';
import 'package:ecommerce_integration_mobile_app/core/provider/token_provider.dart';
import 'package:ecommerce_integration_mobile_app/core/widget/snack_bar_widget.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
typedef DioParams = ({
bool? authRequired,
List<String>? endpointsToIgnore, // Yoksayılacak endpointler için buna ekley
});
final dioProvider = Provider.family<Dio, DioParams>((ref, DioParams params) {
BaseOptions baseOptions = BaseOptions(
contentType: "application/json", responseType: ResponseType.json);
baseOptions.headers.addAll({
'Authorization': params.authRequired == true
? "Bearer ${ref.watch(tokenProvider)?.access_token ?? ""}"
: null,
"X-CSRF-TOKEN": params.authRequired == true
? ref.watch(tokenProvider)?.csrf_token ?? ""
: null
});
var dio = Dio(baseOptions);
dio.interceptors.add(InterceptorsWrapper(
onError: (e, handler) async {
// İsteğin endpointinin yoksayılacak endpointler listesinde olup olmadığını kontrol et
final requestUri = e.requestOptions.uri.toString();
final endpointsToIgnore = params.endpointsToIgnore ?? [];
if (endpointsToIgnore.contains(requestUri)) {
// Endpoint ignore listesindeyse, toastı göstermeyi atla
handler.next(e);
return;
}
if (e.response?.data != null) {
final Map<String, dynamic> jsonData = json.decode(e.response?.data);
final response = BaseResponseModel.fromJson(jsonData, null);
if (response.message != null) {
ref.read(snackBarProvider.notifier).showSnackBar(
message: response.message ?? "",
snackBarType: SnackBarType.error);
}
} else if (e.type == DioExceptionType.connectionError) {
ref.read(snackBarProvider.notifier).showSnackBar(
message: "Please check your connection and try again.",
snackBarType: SnackBarType.error);
} else if (e.type == DioExceptionType.connectionTimeout) {
ref.read(snackBarProvider.notifier).showSnackBar(
message: e.message ?? "Timeout",
snackBarType: SnackBarType.error);
} else if (e.type == DioExceptionType.badResponse) {
ref.read(snackBarProvider.notifier).showSnackBar(
message: e.message ?? "An error occurred.",
snackBarType: SnackBarType.error);
}
handler.next(e);
},
));
return dio;
});
Editor is loading...
Leave a Comment