Untitled

mail@pastecode.io avatar
unknown
plain_text
7 months ago
2.4 kB
2
Indexable
Never
import 'package:cool_app/data/helpers/failure.dart';
import 'package:cool_app/data/locals/shared_pref.dart';
import 'package:cool_app/presentation/pages/auth/login_screen.dart';
import 'package:cool_app/presentation/utils/nav_utils.dart';
import 'package:dio/dio.dart';

class ErrorHandler implements Exception {
  late Failure failure;

  ErrorHandler.handle(dynamic error) {
    if (error is DioException) {
      failure = _handleDioError(error);
    } else {
      failure = Failure("Terjadi Kesalahan Tak Dikenal");
    }
  }

  Failure _handleDioError(DioException error) {
    if (error.response?.statusCode == 401) {
      Prefs().clearSession();
      Nav.toAll(const LoginScreen());
    }
    switch (error.type) {
      case DioExceptionType.connectionTimeout:
        return Failure(
            "Koneksi terputus. Mohon periksa koneksi internet Anda.");

      case DioExceptionType.sendTimeout:
        return Failure("Waktu pengiriman permintaan habis.");

      case DioExceptionType.receiveTimeout:
        return Failure("Waktu penerimaan respons habis.");

      case DioExceptionType.badResponse:
        switch (error.response!.statusCode) {
          case 401:
            Prefs().clearSession();
            Nav.toAll(const LoginScreen());
            return Failure("Tidak Diizinkan. Silahkan login kembali.");

          case 403:
            return Failure(
                "Akses ditolak. Anda tidak memiliki izin untuk melakukan tindakan ini.");

          case 404:
            return Failure("Tidak Ditemukan");

          case 500:
            return Failure(
                "Terjadi Kesalahan Server Internal. Silakan coba lagi nanti.");

          default:
            return Failure("Terjadi Kesalahan Tak Dikenal");
        }

      case DioExceptionType.cancel:
        return Failure("Permintaan dibatalkan. Silakan coba lagi.");

      case DioExceptionType.unknown:
        return Failure("Terjadi Kesalahan Tak Dikenal.");

      case DioExceptionType.badCertificate:
        return Failure(
            "Terjadi Kesalahan Sertifikat SSL. Mohon periksa koneksi jaringan Anda.");

      case DioExceptionType.connectionError:
        return Failure(
            "Terjadi Kesalahan Koneksi. Mohon periksa koneksi jaringan Anda.");

      default:
        return Failure("Terjadi Kesalahan yang Tidak Diperkirakan.");
    }
  }
}
Leave a Comment