subscribe method

void subscribe()

Implementation

void subscribe() {
  if (_subscription != null) return;

  if (!hasData) {
    status.value = ZenQueryStatus.loading;
  }
  error.value = null;

  try {
    final stream = streamFn();
    _subscription = stream.listen(
      (event) {
        if (_isDisposed) return;
        data.value = event;
        status.value = ZenQueryStatus.success;
        error.value = null;
      },
      onError: (err, stack) {
        if (_isDisposed) return;
        error.value = err;
        status.value = ZenQueryStatus.error;
        ZenLogger.logError('Stream error [$queryKey]', err, stack);
      },
    );
  } catch (e, s) {
    if (!_isDisposed) {
      error.value = e;
      status.value = ZenQueryStatus.error;
    }
    ZenLogger.logError('Failed to subscribe to stream [$queryKey]', e, s);
  }
}