fetch method

Future<void> fetch({
  1. Q? query,
  2. bool silent = false,
})

Implementation

Future<void> fetch({Q? query, bool silent = false}) async {
  final currentRequest = ++_requestId;
  _query = query;

  if (!silent) {
    emit(
      QueryState<T>(
        isLoading: true,
        rawdata: _clearOnRefresh ? null : state.rawdata,
        filter: state.filter,
        errorMessage: '',
      ),
    );
  }

  try {
    final result = await _fetchCallback(_query);

    if (currentRequest != _requestId) return;

    if (!_hasLoadedOnce) {
      if (_onLoad != null) {
        final shouldContinue = _onLoad!.call(result);
        if (!shouldContinue) {
          _hasLoadedOnce = true;
          emit(
            QueryState<T>(
              rawdata: state.rawdata,
              filter: state.filter,
              isLoading: false,
            ),
          );
          return;
        }
      }
      _hasLoadedOnce = true;
    }

    emit(
      QueryState<T>(
        rawdata: result,
        filter: state.filter,
        isLoading: false,
      ),
    );

    _onUpdate?.call(result);
  } catch (e, stackTrace) {
    if (currentRequest != _requestId) return;

    final errorMessage = parseErrorMessage(e);

    emit(
      QueryState<T>(
        errorMessage: errorMessage,
        rawdata: state.rawdata,
        filter: state.filter,
        isLoading: false,
      ),
    );

    if (kDebugMode) {
      print('QueryController error: $e');
      print('StackTrace: $stackTrace');
    }
  }
}