Skip to main content

VirtualList

Struct VirtualList 

Source
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

Source

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>
where Key: Hash + 'static, Item: 'static, S: Fn() -> Vec<Item> + 'static, K: Fn(&Item) -> Key + 'static, B: Fn(usize, Item) -> Result<Box<dyn LayoutItem>, LayoutError> + 'static,

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.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more