// @dart = 2.9 part of swarmlib; /** * An iterator that allows the user to move forward and backward though * a set of items. (Bi-directional) */ class BiIterator { /** * Provides forward and backward iterator functionality to keep track * which item is currently selected. */ ObservableValue currentIndex; /** * The collection of items we will be iterating through. */ List list; BiIterator(this.list, [List oldListeners = null]) : currentIndex = new ObservableValue(0) { if (oldListeners != null) { currentIndex.listeners = oldListeners; } } /** * Returns the next section from the sections, given the current * position. Returns the last source if there is no next section. */ E next() { if (currentIndex.value < list.length - 1) { currentIndex.value += 1; } return list[currentIndex.value]; } /** * Returns the current Section (page in the UI) that the user is * looking at. */ E get current { return list[currentIndex.value]; } /** * Returns the previous section from the sections, given the current * position. Returns the front section if we are already at the front of * the list. */ E previous() { if (currentIndex.value > 0) { currentIndex.value -= 1; } return list[currentIndex.value]; } /** * Move the iterator pointer over so that it points to a given list item. */ void jumpToValue(E val) { for (int i = 0; i < list.length; i++) { if (identical(list[i], val)) { currentIndex.value = i; break; } } } }