asyncOperation method
Future<T?>
asyncOperation(
- FutureFunction<
T> futureFunction, { - bool? reloading,
- SuccessCallBack<
T> ? onSuccess, - VoidCallback? onDone,
- ErrorCallBack? onError,
- 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,
);
}