Files
flutter-clean-architecture-…/lib/shared/mixins/exception_handler_mixin.dart
Utsav Ghimire 769527862b initial commit
2023-03-02 11:06:39 +05:45

60 lines
1.7 KiB
Dart

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<Either<AppException, response.Response>>
handleException<T extends Object>(
Future<Response<dynamic>> 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,
),
);
}
}
}