asyncOperation method

  1. @override
Future<T?> asyncOperation(
  1. FutureFunction<T> futureFunction, {
  2. bool? reloading,
  3. SuccessCallBack<T>? onSuccess,
  4. VoidCallback? onDone,
  5. ErrorCallBack? onError,
  6. bool throwError = false,
})

Perform async function in manager

Implementation

@override
Future<T?> asyncOperation(
  FutureFunction<T> futureFunction, {
  bool? reloading,
  SuccessCallBack<T>? onSuccess,
  VoidCallback? onDone,
  ErrorCallBack? onError,
  bool throwError = false,
}) async {
  refresh = ({reloading, onSuccess, onDone, onError, throwError}) async {
    bool shouldReload = reloading ?? this.reloading;
    SuccessCallBack<T>? successCallBack = onSuccess ?? this.onSuccess;
    ErrorCallBack? errorCallBack = onError ?? this.onError;
    VoidCallback? onOperationDone = onDone ?? this.onDone;
    bool shouldThrowError = throwError ?? false;
    //
    bool triggerError = true;
    if (hasData) {
      triggerError = shouldReload;
    }
    try {
      if (shouldReload) {
        resetData();
      }
      T data = await futureFunction.call();
      if (successCallBack != null) {
        data = await successCallBack.call(data);
      }
      updateData(data);
      return data;
    } catch (exception, stackTrace) {
      FutureManagerError error = FutureManagerError(
        exception: exception,
        stackTrace: stackTrace,
      );
      errorCallBack?.call(error);
      if (triggerError) addError(error);
      if (shouldThrowError) {
        rethrow;
      }
      return null;
    } finally {
      onOperationDone?.call();
    }
  };
  return refresh(
    reloading: reloading,
    onSuccess: onSuccess,
    onDone: onDone,
    onError: onError,
    throwError: throwError,
  );
}