execute<T> static method

void execute<T>({
  1. required BuildContext context,
  2. required Future<T> action(),
  3. required dynamic onSuccess(
    1. T result
    ),
  4. dynamic onError(
    1. Object error
    )?,
  5. dynamic onComplete()?,
  6. String? errorMessage,
})

Implementation

static void execute<T>({
  required BuildContext context,
  required Future<T> Function() action,
  required Function(T result) onSuccess,
  Function(Object error)? onError,
  Function()? onComplete,
  String? errorMessage,
}) {
  context.loaderOverlay.show();

  action().then((result) {
    if (context.mounted) {
      context.loaderOverlay.hide();
      onSuccess(result);
    }
  }).catchError((error) {
    if (context.mounted) {
      context.loaderOverlay.hide();

      if (errorMessage != null) {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(
            content: Text(errorMessage),
            backgroundColor: Colors.red,
          ),
        );
      }

      onError?.call(error);
    }
  }).whenComplete(() {
    if (context.mounted) {
      context.loaderOverlay.hide();
      onComplete?.call();
    }
  });
}