pub struct VirtualList;Expand description
A keyed list that builds only the rows currently on screen.
ReactiveList builds every item it is given, which is right until the list is long: a wallpaper grid or a
full application list pays for thousands of widgets to show a dozen. This builds the visible window plus a
little overscan and represents the rest as two spacer boxes, so the content keeps its true height and the
scrollbar keeps telling the truth.
Fixed row height. Every row must be row_height tall, because the window is computed by division
rather than by measurement — measuring rows that have not been built is the circular problem variable-height
virtualisation exists to solve, and it needs a size cache and an estimation pass this does not have. A list
whose rows genuinely vary belongs in a plain ReactiveList until that lands.
source still returns every item. That is deliberate: producing a Vec of plain data is cheap, and the
expensive part — constructing widgets, decoding images, laying out text — is what this defers. A source that
is itself expensive should be memoised by the caller, as it would be for any list.
Implementations§
Source§impl VirtualList
impl VirtualList
Sourcepub fn new<Item, Key, S, K, B>(
container_style: LayoutStyle,
viewport: ScrollViewport,
row_height: f32,
overscan: usize,
source: S,
key: K,
build: B,
) -> Result<ReactiveList, LayoutError>
pub fn new<Item, Key, S, K, B>( container_style: LayoutStyle, viewport: ScrollViewport, row_height: f32, overscan: usize, source: S, key: K, build: B, ) -> Result<ReactiveList, LayoutError>
viewport is the enclosing scroll area’s live window (see crate::LayoutScrollArea::new_with).
build constructs one row and receives its index alongside the item, since a virtualised row often
wants to know where it sits.