Incular logoIncular
API ReferenceNavigation & Scrolling

Sliver Adapters

Box adapters, padding, viewports, and layout builders for slivers.

use incular::prelude::*;

fn main() {
    let app = Application::new(|_cx| {
        CustomScrollView::new(vec![
            Box::new(SliverToBoxAdapter::new(Text::new("Header")))
                as Box<dyn Sliver>,
        ]).into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}
AdapterPurpose
SliverToBoxAdapterEmbed one box child as a sliver
SliverPaddingInset a sliver
SliverFillRemainingFill leftover viewport space
SliverLayoutBuilderBuild from sliver constraints
Viewport / ShrinkWrappingViewportViewport hosts
Scrollable / NestedScrollViewScroll coordination
ListBodyNon-lazy sliver column

NestedScrollView::new(header_slivers, body) coordinates headers with a body; ListBody::new(children) lays out a non-lazy sliver column.

CustomScrollView composes slivers with shared scroll state:

use incular::prelude::*;

fn main() {
    let app = Application::new(|_cx| {
        Container::builder()
            .padding(EdgeInsets::all(24.0))
            .alignment(Alignment::CENTER)
            .child(
                CustomScrollView::new(vec![
                    Box::new(SliverToBoxAdapter::new(Text::new("Header")))
                        as Box<dyn Sliver>,
                    Box::new(SliverList::builder(50, |i| {
                        Text::new(format!("row {i}"))
                    })) as Box<dyn Sliver>,
                ])
                .cache_extent(256.0),
            )
            .build()
            .into()
    })
    .expect("valid application");
    incular::run(app).expect("run application");
}

Related: SliverList, Sliver Headers.