import 'dart:async'; import 'dart:developer'; import 'dart:io'; import 'package:dartz/dartz.dart'; import 'package:dio/dio.dart'; import 'package:flutter_project/shared/data/remote/remote.dart'; import 'package:flutter_project/shared/domain/models/response.dart' as response; import 'package:flutter_project/shared/exceptions/http_exception.dart'; mixin ExceptionHandlerMixin on NetworkService { Future> handleException( Future> Function() handler, {String endpoint = ''}) async { try { final res = await handler(); return Right( response.Response( statusCode: res.statusCode ?? 200, data: res.data, statusMessage: res.statusMessage, ), ); } catch (e) { String message = ''; String identifier = ''; int statusCode = 0; log(e.runtimeType.toString()); switch (e.runtimeType) { case SocketException: e as SocketException; message = 'Unable to connect to the server.'; statusCode = 0; identifier = 'Socket Exception ${e.message}\n at $endpoint'; break; case DioError: e as DioError; message = e.response?.data?['message'] ?? 'Internal Error occured'; statusCode = 1; identifier = 'DioError ${e.message} \nat $endpoint'; break; default: message = 'Unknown error occured'; statusCode = 2; identifier = 'Unknown error ${e.toString()}\n at $endpoint'; } return Left( AppException( message: message, statusCode: statusCode, identifier: identifier, ), ); } } }