pub struct ListItem<Msg: Clone> {
pub label: String,
pub subtitle: Option<String>,
pub trailing: Option<String>,
pub on_press: Option<Msg>,
pub id: Option<WidgetId>,
pub selected: bool,
pub icon: Option<(Arc<Vec<u8>>, u32, u32)>,
}Expand description
A row inside a list with a primary label and optional subtitle / trailing text.
Use to build settings menus, navigation lists, contact rows or any other
vertically-stacked tappable content. The widget paints its own hover and
pressed surfaces and a rounded focus ring; wrap a column of ListItems
inside a scroll for scrollable lists.
// In view():
scroll(
column()
.push( list_item( "Wi-Fi" ).trailing( "Eduroam" ).on_press( Msg::OpenWifi ) )
.push( list_item( "Bluetooth" ).subtitle( "AirPods Pro" ).on_press( Msg::OpenBluetooth ) )
.push( list_item( "Display" ).trailing( "Light" ).on_press( Msg::OpenDisplay ) ),
)
.into()Fields§
§label: StringPrimary label (always visible, top-aligned when a subtitle is present).
subtitle: Option<String>Optional secondary line drawn below the label in muted colour. Doubles the row height when set.
trailing: Option<String>Optional right-aligned text (current setting, badge count, “›” disclosure). Drawn in muted colour.
on_press: Option<Msg>Message emitted on tap. None keeps the item visible but inert.
id: Option<WidgetId>Optional stable identifier for focus management.
selected: booltrue paints the row with the dark selected surface and white
text, regardless of hover / press state. Use to indicate the
active item in a list of choices (combo dropdown, settings
group with a single active value).
icon: Option<(Arc<Vec<u8>>, u32, u32)>Optional leading icon — RGBA bytes + native dimensions. The
row reserves theme::ICON_SIZE + theme::ICON_GAP on the left
when this is set, and offsets the label / subtitle by the
same amount. Pass None to keep the icon-less layout.
Implementations§
Source§impl<Msg: Clone> ListItem<Msg>
impl<Msg: Clone> ListItem<Msg>
Sourcepub fn new(label: impl Into<String>) -> Self
pub fn new(label: impl Into<String>) -> Self
Create a list item with the given primary label, no subtitle, no trailing text and no callback.
Sourcepub fn icon(self, rgba: Arc<Vec<u8>>, w: u32, h: u32) -> Self
pub fn icon(self, rgba: Arc<Vec<u8>>, w: u32, h: u32) -> Self
Attach a leading icon. Pass the decoded RGBA buffer alongside
the image’s native width and height; the draw path scales it
down to theme::ICON_SIZE on the same row baseline as the
label. Symbolic icons should be pre-tinted by the caller (see
crate::tint_symbolic).
Sourcepub fn selected(self, yes: bool) -> Self
pub fn selected(self, yes: bool) -> Self
Mark this row as the currently-selected option in its list. Selected rows paint with a dark surface and white text and override hover / press visuals.
Sourcepub fn subtitle(self, s: impl Into<String>) -> Self
pub fn subtitle(self, s: impl Into<String>) -> Self
Add a secondary line below the label. Doubles the row height to fit both lines comfortably.
Sourcepub fn trailing(self, s: impl Into<String>) -> Self
pub fn trailing(self, s: impl Into<String>) -> Self
Add right-aligned text (settings value, badge, disclosure arrow).
pub fn preferred_size(&self, max_width: f32, _canvas: &Canvas) -> (f32, f32)
Sourcepub fn paint_bounds(&self, rect: Rect) -> Rect
pub fn paint_bounds(&self, rect: Rect) -> Rect
Focus stroke is centered on rect, so half the stroke width plus ~1 px
of antialiasing bleed sits outside.
pub fn draw( &self, canvas: &mut Canvas, rect: Rect, focused: bool, hovered: bool, pressed: bool, )
Trait Implementations§
Auto Trait Implementations§
impl<Msg> Freeze for ListItem<Msg>where
Msg: Freeze,
impl<Msg> RefUnwindSafe for ListItem<Msg>where
Msg: RefUnwindSafe,
impl<Msg> Send for ListItem<Msg>where
Msg: Send,
impl<Msg> Sync for ListItem<Msg>where
Msg: Sync,
impl<Msg> Unpin for ListItem<Msg>where
Msg: Unpin,
impl<Msg> UnwindSafe for ListItem<Msg>where
Msg: UnwindSafe,
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<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<T> DowncastSync for T
impl<T> DowncastSync for T
§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