more method

dynamic more()

Implementation

more() {
  // cancelando la consulta anterior
  _currentTask?.cancel();

  var tarea = _currentTask = AbortableTask((status) async {
    if (status.canceled) {
      _currentTask = null;
      return;
    }

    //  si no hay mas o esta ocupado
    if (_state == SearchState.noMore || _state == SearchState.busy) return;

    // parametros
    var x = args.get();
    x['offset'] = args.offset.value + args.limit.value;

    //  guardando estado
    var last = _state;
    _state = SearchState.busy;

    //  realizando consulta
    List r = await app.request(urlForSearch.path, data: x);

    //  restaurando el estado si se cancela
    if (status.canceled) {
      _state = last;
    }
    //  aplicando cambios al parametro
    args.offset.resetTo(value: x['offset']);
    if (r.isEmpty) {
      _state = SearchState.noMore;

      refresh();
      return;
    }
    _state = SearchState.completed;

    var dato = get();
    dato.addAll(util.toList(r));

    resetTo(value: dato);
    refresh();
  });
  tarea.done().catchError((e) => null);
}