Skip to main content

app_bar_scroll_provider

Function app_bar_scroll_provider 

Source
pub fn app_bar_scroll_provider() -> AppBarScrollProviderBuilder
Expand description

§app_bar_scroll_provider

Coordinate a top app bar and scrollable page content for navigation and feeds.

§Usage

Wrap both the app bar and its scrolling content, such as a complete scaffold.

§Parameters

  • state — optional external height and overlap state.
  • behavior — pinned, immediately expanding, or expand-at-start behavior.
  • enabled — whether scroll input updates the bar.
  • snap — settle an intermediate height after scrolling ends; defaults to true.
  • scroll_controller — optional content controller to synchronize overlap after programmatic scrolling.
  • child — app bar and scrolling page content in the shared scroll scope.

§Examples

use tessera_components::{
    app_bar::{AppBarScrollState, TopAppBarVariant, app_bar_scroll_provider, top_app_bar},
    column::column,
    modifier::ModifierExt as _,
    scaffold::scaffold,
    scrollable::ScrollableController,
    text::text,
};
use tessera_ui::{Modifier, remember, tessera};
#[tessera]
fn screen() {
    let state = remember(AppBarScrollState::default);
    let scroll = remember(ScrollableController::new);
    app_bar_scroll_provider()
        .state(state)
        .scroll_controller(scroll)
        .child(move || {
            scaffold()
                .top_bar(move || {
                    top_app_bar()
                        .scroll_state(state)
                        .variant(TopAppBarVariant::MediumFlexible)
                        .title("Inbox");
                })
                .content(move || {
                    column()
                        .modifier(Modifier::new().vertical_scroll(scroll))
                        .children(|| {
                            text("Messages");
                        });
                });
        });
    assert_eq!(state.with(AppBarScrollState::collapsed_fraction), 0.0);
}