Untitled

 avatar
unknown
dart
a year ago
2.7 kB
5
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 endpointleri buna ekle
});

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