Skip to content

Commit

Permalink
Merge pull request #23 from NeoSOFT-Technologies/error-module-config
Browse files Browse the repository at this point in the history
Updating Error Module configs to support fallback values
  • Loading branch information
faiyyazs authored Oct 4, 2022
2 parents f428034 + b7d6b03 commit a7cd0c5
Show file tree
Hide file tree
Showing 6 changed files with 84 additions and 32 deletions.
42 changes: 26 additions & 16 deletions app/lib/di/app_dependency_configurator.config.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

57 changes: 45 additions & 12 deletions app/lib/di/error/errors_module.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import 'package:app/errors/flutter_alert_error_presenter.dart';
import 'package:app/errors/flutter_snack_bar_error_presenter.dart';
import 'package:app/model/alert_texts.dart';
import 'package:data/data.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter_errors/flutter_errors.dart';
import 'package:injectable/injectable.dart';

Expand All @@ -17,24 +20,54 @@ abstract class ErrorsModule {
return FlutterSnackBarErrorPresenter();
}

@singleton
FlutterAlertErrorPresenter providesFlutterAlertErrorPresenter() {
return FlutterAlertErrorPresenter();
}

@singleton
SelectorErrorPresenter providesSelectorErrorPresenter(
FlutterToastErrorPresenter toastErrorPresenter,
FlutterSnackBarErrorPresenter snackBarErrorPresenter,
FlutterAlertErrorPresenter alertErrorPresenter) {
return SelectorErrorPresenter((e) {
switch (e.runtimeType) {
case FormatException:
return toastErrorPresenter;

case NetworkError:
return alertErrorPresenter;

default:
return snackBarErrorPresenter;
}
});
}

@lazySingleton
ExceptionMappers providersGlobalErrors() {
return ExceptionMappers()
/*.condition<String>((e) => e is NetworkError && e.error.code == 1,
(e) => "My custom error from mapper")*/
ExceptionMapperStorage providersGlobalErrors() {
return ExceptionMapperStorage.instance
.register<NetworkError, String>((e) => "NetworkError registered error")
.register<FormatException, String>(
(e) => "Format Exception registered error");
(e) => "Format Exception registered error")
.condition<AlertTexts>(
(e) => (e is NetworkError) && e.error.code == 1,
(e) => AlertTexts(
title: 'NetworkError code error 1', message: 'error 1 message'))
.setFallBackValue(AlertTexts(
title: 'Alert default title', message: 'Alert Default Message'));
}

@singleton
FlutterExceptionHandlerBinder providerDefaultExceptionHandler(
FlutterToastErrorPresenter errorPresenter,
ExceptionMappers exceptionMappersStorage) {
return FlutterExceptionHandlerBinderImpl<String>(
exceptionMappersStorage.throwableMapper(),
errorPresenter,
FlutterEventsDispatcher(),
(Exception e) {});
SelectorErrorPresenter errorPresenter,
ExceptionMapperStorage exceptionMappersStorage) {
return FlutterExceptionHandlerBinderImpl(
exceptionMapperStorage: exceptionMappersStorage.throwableMapper(),
flutterErrorPresenter: errorPresenter,
flutterEventsDispatcher: FlutterEventsDispatcher(),
onCatch: (Exception e) {
debugPrint("Exception found $e");
});
}
}
7 changes: 5 additions & 2 deletions app/lib/errors/flutter_alert_error_presenter.dart
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
import 'package:flutter/material.dart';
import 'package:flutter_errors/flutter_errors.dart';

class FlutterAlertErrorPresenter extends AlertErrorPresenter<String> {
import '../model/alert_texts.dart';

class FlutterAlertErrorPresenter<T extends AlertTexts>
extends AlertErrorPresenter<T> {
FlutterAlertErrorPresenter(
{super.alertTitle = "", super.positiveButtonText = ""});

@override
void show(Exception throwable, BuildContext context, String data) {
void show(Exception throwable, BuildContext context, AlertTexts data) {
// your alert provider
}
}
2 changes: 1 addition & 1 deletion app/lib/errors/flutter_snack_bar_error_presenter.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter_errors/flutter_errors.dart';

class FlutterSnackBarErrorPresenter extends SnackBarErrorPresenter<String> {
class FlutterSnackBarErrorPresenter<T extends String> extends SnackBarErrorPresenter<T> {
FlutterSnackBarErrorPresenter({super.duration});

@override
Expand Down
2 changes: 1 addition & 1 deletion app/lib/errors/flutter_toast_error_presenter.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter_errors/flutter_errors.dart';
import 'package:fluttertoast/fluttertoast.dart';

class FlutterToastErrorPresenter extends ToastErrorPresenter<String> {
class FlutterToastErrorPresenter<T extends String> extends ToastErrorPresenter<T> {
@override
void show(Exception throwable, BuildContext context, String data) {
Fluttertoast.showToast(
Expand Down
6 changes: 6 additions & 0 deletions app/lib/model/alert_texts.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
class AlertTexts {
final String title;
final String message;

AlertTexts({required this.title, required this.message});
}

0 comments on commit a7cd0c5

Please sign in to comment.