addResult method

void addResult(
  1. QueryResult<TParsed> result, {
  2. bool fromRebroadcast = false,
})

Add a result to the stream unless it was created before lasestResult.

Copies the QueryResult.source from the latestResult if it is set to null.

Called internally by the QueryManager

Implementation

void addResult(QueryResult<TParsed> result, {bool fromRebroadcast = false}) {
  // don't overwrite results due to some async/optimism issue
  if (latestResult != null &&
      latestResult!.timestamp.isAfter(result.timestamp)) {
    return;
  }

  if (options.carryForwardDataOnException && result.hasException) {
    result.data ??= latestResult?.data;
  }

  if (lifecycle == QueryLifecycle.pending && result.isConcrete) {
    lifecycle = QueryLifecycle.completed;
  }

  latestResult = result;

  // TODO should callbacks be applied before or after streaming
  if (!controller.isClosed) {
    controller.add(result);
  }

  if (result.isNotLoading) {
    _applyCallbacks(result, fromRebroadcast: fromRebroadcast);
  }
}