pub struct VirtualScrollView<D, B>{ /* private fields */ }Expand description
One-direction scrollable area that dynamically builds and renders items based in their size and current available size, this is intended for apps using large sets of data that need good performance.
Unlike ScrollView, which lays out every child even when it is
off screen, a VirtualScrollView takes a builder closure and only calls it for the items that
are actually visible, so the cost stays roughly constant no matter how long the list is.
It needs two things to know which items fall inside the viewport:
item_size, the fixed size of each item along the scroll axis,
and length, the total number of items.
§Example
fn app() -> impl IntoElement {
rect().child(
VirtualScrollView::new(|i, _| {
rect()
.key(i)
.height(Size::px(25.))
.padding(4.)
.child(format!("Item {i}"))
.into()
})
.length(300usize)
.item_size(25.),
)
}
§Preview
Implementations§
Source§impl<B> VirtualScrollView<(), B>
impl<B> VirtualScrollView<(), B>
Sourcepub fn new(builder: B) -> VirtualScrollView<(), B>
pub fn new(builder: B) -> VirtualScrollView<(), B>
Creates a virtual scroll view that builds each item on demand from its index.
Sourcepub fn new_controlled(
builder: B,
scroll_controller: ScrollController,
) -> VirtualScrollView<(), B>
pub fn new_controlled( builder: B, scroll_controller: ScrollController, ) -> VirtualScrollView<(), B>
Like new but driven by the given ScrollController.
Source§impl<D, B> VirtualScrollView<D, B>
impl<D, B> VirtualScrollView<D, B>
Sourcepub fn new_with_data(builder_data: D, builder: B) -> VirtualScrollView<D, B>
pub fn new_with_data(builder_data: D, builder: B) -> VirtualScrollView<D, B>
Like new but passes shared builder_data to every item build.
The builder closure cannot be compared across renders, so data captured inside it never
triggers a rebuild. Passing the data here instead makes it part of the view’s PartialEq,
so the visible items are rebuilt whenever it changes.
fn app() -> impl IntoElement {
let items = use_state(|| vec!["a".to_string(), "b".to_string(), "c".to_string()]);
// The current items are passed as data, so editing `items` rebuilds the visible rows.
VirtualScrollView::new_with_data(items.read().clone(), |i, items: &Vec<String>| {
rect()
.key(i)
.height(Size::px(25.))
.child(items[i].clone())
.into()
})
.length(items.read().len())
.item_size(25.)
}Sourcepub fn new_with_data_controlled(
builder_data: D,
builder: B,
scroll_controller: ScrollController,
) -> VirtualScrollView<D, B>
pub fn new_with_data_controlled( builder_data: D, builder: B, scroll_controller: ScrollController, ) -> VirtualScrollView<D, B>
Like new_with_data but driven by the given ScrollController.
Sourcepub fn show_scrollbar(self, show_scrollbar: bool) -> VirtualScrollView<D, B>
pub fn show_scrollbar(self, show_scrollbar: bool) -> VirtualScrollView<D, B>
Toggles whether the scrollbar is shown when the content overflows.
Sourcepub fn direction(self, direction: Direction) -> VirtualScrollView<D, B>
pub fn direction(self, direction: Direction) -> VirtualScrollView<D, B>
Sets the axis the items flow and scroll in.
Sourcepub fn scroll_with_arrows(
self,
scroll_with_arrows: impl Into<bool>,
) -> VirtualScrollView<D, B>
pub fn scroll_with_arrows( self, scroll_with_arrows: impl Into<bool>, ) -> VirtualScrollView<D, B>
Toggles whether the arrow keys scroll the view while it is focused.
Sourcepub fn item_size(self, item_size: impl Into<f32>) -> VirtualScrollView<D, B>
pub fn item_size(self, item_size: impl Into<f32>) -> VirtualScrollView<D, B>
Sets the fixed size of every item along the scroll axis, used to decide which items to render.
Sourcepub fn length(self, length: impl Into<usize>) -> VirtualScrollView<D, B>
pub fn length(self, length: impl Into<usize>) -> VirtualScrollView<D, B>
Sets the total number of items the view can scroll through.
Sourcepub fn invert_scroll_wheel(
self,
invert_scroll_wheel: impl Into<bool>,
) -> VirtualScrollView<D, B>
pub fn invert_scroll_wheel( self, invert_scroll_wheel: impl Into<bool>, ) -> VirtualScrollView<D, B>
Inverts the direction of the mouse wheel relative to the content.
Sourcepub fn drag_scrolling(self, drag_scrolling: bool) -> VirtualScrollView<D, B>
pub fn drag_scrolling(self, drag_scrolling: bool) -> VirtualScrollView<D, B>
Toggles scrolling by dragging the content, useful mainly for touch input.
Sourcepub fn scroll_controller(
self,
scroll_controller: impl Into<Option<ScrollController>>,
) -> VirtualScrollView<D, B>
pub fn scroll_controller( self, scroll_controller: impl Into<Option<ScrollController>>, ) -> VirtualScrollView<D, B>
Attaches a ScrollController to drive this view externally.
Sourcepub fn max_width(self, max_width: impl Into<Size>) -> VirtualScrollView<D, B>
pub fn max_width(self, max_width: impl Into<Size>) -> VirtualScrollView<D, B>
Caps the width of the scroll view.
Sourcepub fn max_height(self, max_height: impl Into<Size>) -> VirtualScrollView<D, B>
pub fn max_height(self, max_height: impl Into<Size>) -> VirtualScrollView<D, B>
Caps the height of the scroll view.
Trait Implementations§
Source§impl<D, B> Clone for VirtualScrollView<D, B>
impl<D, B> Clone for VirtualScrollView<D, B>
Source§fn clone(&self) -> VirtualScrollView<D, B>
fn clone(&self) -> VirtualScrollView<D, B>
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<D, B> Component for VirtualScrollView<D, B>
impl<D, B> Component for VirtualScrollView<D, B>
fn render(&self) -> impl IntoElement
fn render_key(&self) -> DiffKey
Source§impl<D, B> ContainerSizeExt for VirtualScrollView<D, B>
impl<D, B> ContainerSizeExt for VirtualScrollView<D, B>
Source§impl<D, B> KeyExt for VirtualScrollView<D, B>
impl<D, B> KeyExt for VirtualScrollView<D, B>
Source§impl<D, B> LayoutExt for VirtualScrollView<D, B>
impl<D, B> LayoutExt for VirtualScrollView<D, B>
Source§fn get_layout(&mut self) -> &mut LayoutData
fn get_layout(&mut self) -> &mut LayoutData
§fn layout(self, layout: LayoutData) -> Self
fn layout(self, layout: LayoutData) -> Self
LayoutData.Source§impl<D, B> PartialEq for VirtualScrollView<D, B>
impl<D, B> PartialEq for VirtualScrollView<D, B>
Auto Trait Implementations§
impl<D, B> Freeze for VirtualScrollView<D, B>
impl<D, B> !RefUnwindSafe for VirtualScrollView<D, B>
impl<D, B> !Send for VirtualScrollView<D, B>
impl<D, B> !Sync for VirtualScrollView<D, B>
impl<D, B> Unpin for VirtualScrollView<D, B>
impl<D, B> UnsafeUnpin for VirtualScrollView<D, B>where
B: UnsafeUnpin,
D: UnsafeUnpin,
impl<D, B> !UnwindSafe for VirtualScrollView<D, B>
Blanket Implementations§
§impl<T> AnyEq for T
impl<T> AnyEq for T
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> ComponentKey for Twhere
T: Component,
impl<T> ComponentKey for Twhere
T: Component,
fn default_key(&self) -> DiffKey
§impl<T> ComponentProps for T
impl<T> ComponentProps for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.§impl<S> FromSample<S> for S
impl<S> FromSample<S> for S
fn from_sample_(s: S) -> S
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more