handleReport method

Future<R?> handleReport({
  1. String? successMsg,
  2. String? emptyListMsg,
  3. bool isDisplayFailedMsg = false,
  4. FailureCallback? onFailed,
  5. SuccessCallback<R>? onSuccess,
  6. VoidCallback? onEmpty,
})

This handles Either and returns the success result if available

Implementation

Future<R?> handleReport({
  String? successMsg,
  String? emptyListMsg,
  bool isDisplayFailedMsg = false,
  FailureCallback? onFailed,
  SuccessCallback<R>? onSuccess,
  VoidCallback? onEmpty,
}) async {
  try {
    return fold(
      (L l) {
        final String message = mapFailureToMessage(l as IFailure);
        debugPrint('ResultEitherExtensions | handleReport | error: $message');

        if (isDisplayFailedMsg) {
          AppToast.showToast(msg: message);
        }

        onFailed?.call(message);
        return null;
      },
      (R successReport) {
        debugPrint(
          'ResultEitherExtensions | handleReport | success: $successReport',
        );

        if (successReport is List && successReport.isEmpty) {
          AppToast.showToast(msg: emptyListMsg ?? "No data available.");
          onEmpty?.call();
          return null;
        }

        if (successMsg != null) {
          AppToast.showToast(msg: successMsg);
        }

        onSuccess?.call(successReport);
        return successReport;
      },
    );
  } catch (e, stackTrace) {
    debugPrint('ResultEitherExtensions | handleReport | exception: $e');
    debugPrint('$stackTrace');
    return null;
  }
}