mirror of
https://github.com/Uuttssaavv/flutter-clean-architecture-riverpod.git
synced 2025-08-06 16:19:42 +08:00
60 lines
1.7 KiB
Dart
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,
|
|
),
|
|
);
|
|
}
|
|
}
|
|
}
|