pub struct SplitButtonView<State: 'static> { /* private fields */ }Expand description
A declarative split button. See the module docs.
Implementations§
Source§impl<State: 'static> SplitButtonView<State>
impl<State: 'static> SplitButtonView<State>
Sourcepub fn size(self, size: SplitButtonSize) -> Self
pub fn size(self, size: SplitButtonSize) -> Self
Set the size tier (the module docs’ Sizes table).
Sourcepub fn shape(self, shape: SplitButtonShape) -> Self
pub fn shape(self, shape: SplitButtonShape) -> Self
Set the corner-radius family (pill vs. per-size token radius).
Sourcepub fn variant(self, variant: SplitButtonVariant) -> Self
pub fn variant(self, variant: SplitButtonVariant) -> Self
Set the container treatment (the module docs’ Variants section).
Sourcepub fn trailing_alignment(self, alignment: SplitButtonTrailingAlignment) -> Self
pub fn trailing_alignment(self, alignment: SplitButtonTrailingAlignment) -> Self
Set how the trailing chevron is centred (trailingAlignment).
Sourcepub fn enabled(self, enabled: bool) -> Self
pub fn enabled(self, enabled: bool) -> Self
Whether the control as a whole accepts input — the reference’s
IgnorePointer(ignoring: !enabled). false disables both halves
regardless of Self::trailing_enabled.
Sourcepub fn trailing_enabled(self, enabled: bool) -> Self
pub fn trailing_enabled(self, enabled: bool) -> Self
Whether the trailing menu trigger accepts input, independently of the
leading action (default true).
The reference carries leadingEnabled/trailingEnabled as two distinct
variables fed from one prop (m3e_split_button_content.dart:212); this
makes the second one real, so an app can offer the action while the menu
has nothing to show. A disabled trailing half paints the 38%/12%
disabled roles, reports disabled semantics, and simply never arms.
Sourcepub fn leading_icon<F, V>(self, icon: F) -> Self
pub fn leading_icon<F, V>(self, icon: F) -> Self
Attach a leading icon before the label (M3ESplitButton.leadingIcon).
The factory is re-invoked per pass, since a view is a value rebuilt every
frame.
The factory may return any view, which is erased here:
.leading_icon(|| icon(icons::CHECK)).
Sourcepub fn trailing_label(self, label: impl Into<String>) -> Self
pub fn trailing_label(self, label: impl Into<String>) -> Self
Override the trailing half’s accessible name (default
"Show menu") — the reference’s trailingTooltip in the one role this
framework has for it.
Sourcepub fn gap(self, gap: f64) -> Self
pub fn gap(self, gap: f64) -> Self
Override the gap between the halves, in logical px
(M3ESplitButtonDecoration.gap). Unset resolves
SPLIT_ELEVATED_INNER_GAP for SplitButtonVariant::Elevated and
SPLIT_INNER_GAP otherwise.
Sourcepub fn haptic(self, haptic: HapticSignal) -> Self
pub fn haptic(self, haptic: HapticSignal) -> Self
The haptic signal both halves fire on activation. Defaults to
HapticSignal::None, matching the reference (a button is silent unless
its decoration names a signal).
Sourcepub fn items(self, items: Vec<SplitButtonItem>) -> Self
pub fn items(self, items: Vec<SplitButtonItem>) -> Self
The menu’s items (M3ESplitButton.items) — the list both
SplitButtonMenuStyles present.
Sourcepub fn selected_value(self, value: Option<String>) -> Self
pub fn selected_value(self, value: Option<String>) -> Self
The app-confirmed selected value the menu’s rows check against
(M3ESplitButton.selectedValue).
Which presentation the menu takes (M3ESplitButtonDecoration.menuStyle).
Sourcepub fn on_select<F: Fn(&mut State, MenuSelection) + 'static>(
self,
on_select: F,
) -> Self
pub fn on_select<F: Fn(&mut State, MenuSelection) + 'static>( self, on_select: F, ) -> Self
Fired when a menu row is activated (M3ESplitButton.onSelected).
Capture the trailing segment’s window rect into anchor on every
paint, so Self::popup_menu has a rect to place against — the same
OverlayAnchor handoff
crate::button_group::ButtonGroupView::overflow_anchor takes.
The popup-style menu — a crate::menu() anchored below the trailing
segment. Mount it separately (the top of the app’s own frust::Stack,
or a transparent navigator page) and keep it mounted, toggling the
open flag split_button takes rather than unmounting it, for the
host’s exit ramp. See the module docs’ Menu styles section.
The bottom-sheet-style menu — the same items inside a
crate::bottom_sheet, to hand to crate::show_bottom_sheet (which
needs a frust::NavigatorController this widget cannot reach). See the
module docs’ Menu styles section.
The presentation this button’s Self::menu_style calls for — the
route selector _openMenu performs (m3e_split_button_menu.dart:22),
minus the descoped native arm.
Trait Implementations§
Source§impl<State: 'static> View<State> for SplitButtonView<State>
impl<State: 'static> View<State> for SplitButtonView<State>
Source§type Element = SplitButtonWidget
type Element = SplitButtonWidget
Source§fn build(&self, ctx: &mut BuildCtx<'_>) -> SplitButtonWidget
fn build(&self, ctx: &mut BuildCtx<'_>) -> SplitButtonWidget
Source§fn rebuild(
&self,
prev: &Self,
element: &mut SplitButtonWidget,
ctx: &mut BuildCtx<'_>,
) -> ChangeFlags
fn rebuild( &self, prev: &Self, element: &mut SplitButtonWidget, ctx: &mut BuildCtx<'_>, ) -> ChangeFlags
prev (the previous view of the same type) against the live
element, mutating it in place and reporting what changed.Auto Trait Implementations§
impl<State> !RefUnwindSafe for SplitButtonView<State>
impl<State> !Send for SplitButtonView<State>
impl<State> !Sync for SplitButtonView<State>
impl<State> !UnwindSafe for SplitButtonView<State>
impl<State> Freeze for SplitButtonView<State>where
Option<Rc<dyn Fn() -> AnyView<State>>>: Freeze,
Rc<dyn Fn(&mut State)>: Freeze,
Option<Rc<dyn Fn(&mut State, MenuSelection)>>: Freeze,
impl<State> Unpin for SplitButtonView<State>where
Option<Rc<dyn Fn() -> AnyView<State>>>: Unpin,
Rc<dyn Fn(&mut State)>: Unpin,
Option<Rc<dyn Fn(&mut State, MenuSelection)>>: Unpin,
impl<State> UnsafeUnpin for SplitButtonView<State>where
Option<Rc<dyn Fn() -> AnyView<State>>>: UnsafeUnpin,
Rc<dyn Fn(&mut State)>: UnsafeUnpin,
Option<Rc<dyn Fn(&mut State, MenuSelection)>>: UnsafeUnpin,
Blanket Implementations§
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§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.Source§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.Source§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.Source§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<T> ErasedDestructor for Twhere
T: 'static,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> StorageAccess<T> for T
impl<T> StorageAccess<T> for T
Source§fn as_borrowed(&self) -> &T
fn as_borrowed(&self) -> &T
Source§fn into_taken(self) -> T
fn into_taken(self) -> T
Source§impl<State, V> ViewSeq<State, One> for Vwhere
State: 'static,
V: View<State>,
impl<State, V> ViewSeq<State, One> for Vwhere
State: 'static,
V: View<State>,
Source§fn extend_views(self, out: &mut Vec<AnyView<State>>)
fn extend_views(self, out: &mut Vec<AnyView<State>>)
out — erasing each
with AnyView::new (a no-op for an element already an AnyView).