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);
}