run method

Future<JobResult<F>> run(
  1. Future<T> runner()
)

Implementation

Future<JobResult<F>> run(Future<T> Function() runner) async {
  final isComplete = _isComplete(data);

  if (isComplete) {
    return JobResult(
      false,
      data: data,
      errorMessage: 'Job has reached a terminal state',
    );
  }

  if (isInProgress) {
    return JobResult(
      false,
      data: data,
      errorMessage: 'Already in progress',
    );
  }
  if (kDebugMode) {
    try {
      setFetching();
      final response = await runner();
      setSuccess(response);
      return JobResult(true, data: response as F, errorMessage: errorMessage);
    } on ValueError catch (error) {
      setFailed(error.message);
    } on SocketException catch (_) {
      setFailed(socketExceptionDefaultMessage);
    } catch (error) {
      CrashReporter.report(error, StackTrace.current);
      setFailed(unknownErrorDefaultMessage);

      if (buildConfig.logHTTP) {
        Logger.log('error');
        Logger.log(StackTrace.current);
      }
    }
    return JobResult(false, errorMessage: errorMessage, data: data);
  }
  try {
    setFetching();
    final response = await runner();
    setSuccess(response);
    return JobResult(true, data: response as F, errorMessage: errorMessage);
  } on ValueError catch (error) {
    setFailed(error.message);
  } on SocketException catch (_) {
    setFailed(socketExceptionDefaultMessage);
  } on Error catch (error) {
    CrashReporter.report(error, error.stackTrace);
    setFailed(unknownErrorDefaultMessage);
  } // ignore: avoid_catches_without_on_clauses
  catch (error) {
    CrashReporter.report(error, StackTrace.current);
    setFailed(unknownErrorDefaultMessage);
  }
  return JobResult(false, errorMessage: errorMessage, data: data);
}