pub struct NavigationState<Id> { /* private fields */ }Implementations§
Sourcepub fn new(selected: Id) -> Self
pub fn new(selected: Id) -> Self
Examples found in repository?
More examples
examples/showcase/app.rs (line 175)
173 fn default() -> Self {
174 Self {
175 navigation: navigation::NavigationState::new(ShowcasePage::Inputs),
176 window_size: Size::new(1080.0, 980.0),
177 count: 0,
178 note: String::new(),
179 editor_content: material::widget::text_editor::Content::with_text(
180 "Material 3 multi-line text editor",
181 ),
182 select_choice: Some("Assist"),
183 combobox_options: material::widget::combobox::State::with_selection(
184 vec!["Assist", "Suggestion", "Filter"],
185 Some(&"Suggestion"),
186 ),
187 combobox_choice: Some("Suggestion"),
188 combobox_input: String::new(),
189 search_query: String::new(),
190 date_picker: material::widget::picker::DatePickerState::new(
191 material::widget::picker::Date::new(2026, 7, 4),
192 ),
193 date_range_picker: material::widget::picker::DateRangePickerState::new(
194 material::widget::picker::Date::new(2026, 7, 4),
195 material::widget::picker::Date::new(2026, 7, 10),
196 ),
197 time_picker: material::widget::picker::TimePickerState::new(14, 30, false),
198 progress: 42.0,
199 enabled: true,
200 radio_choice: Some(RadioChoice::Standard),
201 segment_choice: SegmentChoice::List,
202 segment_state: material::widget::segmented_button::State::new(
203 SegmentChoice::List.index(),
204 ),
205 primary_tab: TabChoice::Inputs,
206 primary_tab_state: material::widget::tabs::State::new(TabChoice::Inputs.index()),
207 secondary_tab: TabChoice::Controls,
208 secondary_tab_state: material::widget::tabs::State::new(TabChoice::Controls.index()),
209 progress_animation: material::widget::progress_bar::IndeterminateState::new(
210 Instant::now(),
211 ),
212 alert_dialog: material::widget::dialog::Transition::default(),
213 snackbar: material::widget::snackbar::Transition::default(),
214 theme_controller: theme_picker::ThemeController::default(),
215 }
216 }Sourcepub fn selected(&self) -> Id
pub fn selected(&self) -> Id
Examples found in repository?
More examples
examples/showcase/pages/mod.rs (line 13)
12pub(super) fn view(state: &Showcase) -> material::Element<'_, Message> {
13 let page = state.navigation.selected();
14 let content = match page {
15 ShowcasePage::Inputs => inputs::view(state),
16 ShowcasePage::Controls => controls::view(state),
17 ShowcasePage::Feedback => feedback::view(state),
18 ShowcasePage::Surfaces => surfaces::view(),
19 ShowcasePage::Navigation => navigation::view(state),
20 ShowcasePage::Structure => structure::view(state),
21 };
22
23 material::widget::page::surface(header(page), content).into()
24}examples/showcase/app.rs (line 394)
380fn subscription(state: &Showcase) -> Subscription<Message> {
381 let mut subscriptions =
382 vec![iced::window::resize_events().map(|(_id, size)| Message::WindowResized(size))];
383
384 if state.theme_controller.is_animating()
385 || state.navigation.is_animating()
386 || state.segment_state.is_animating()
387 || state.primary_tab_state.is_animating()
388 || state.secondary_tab_state.is_animating()
389 || state.alert_dialog.is_animating()
390 || state.snackbar.is_active()
391 || state.date_picker.is_animating()
392 || state.date_range_picker.is_animating()
393 || state.time_picker.is_animating()
394 || (state.navigation.selected() == ShowcasePage::Feedback
395 && state.progress_animation.is_animating())
396 {
397 subscriptions.push(iced::window::frames().map(Message::Frame));
398 }
399
400 Subscription::batch(subscriptions)
401}Sourcepub fn select(&mut self, selected: Id, now: Instant, layout: AdaptiveLayout)
pub fn select(&mut self, selected: Id, now: Instant, layout: AdaptiveLayout)
Examples found in repository?
examples/showcase/app.rs (line 238)
233fn update(state: &mut Showcase, message: Message) -> Task<Message> {
234 match message {
235 Message::Navigate(page) => {
236 state
237 .navigation
238 .select(page, Instant::now(), state.adaptive_navigation_layout());
239 Task::none()
240 }
241 Message::Increment => {
242 state.count += 1;
243 Task::none()
244 }
245 Message::Decrement => {
246 state.count -= 1;
247 Task::none()
248 }
249 Message::TextChanged(note) => {
250 state.note = note;
251 Task::none()
252 }
253 Message::EditorAction(action) => {
254 state.editor_content.perform(action);
255 Task::none()
256 }
257 Message::SelectChanged(choice) => {
258 state.select_choice = Some(choice);
259 Task::none()
260 }
261 Message::ComboboxSelected(choice) => {
262 state.combobox_choice = Some(choice);
263 state.combobox_input.clear();
264 state.combobox_options.set_selection(Some(&choice));
265 Task::none()
266 }
267 Message::ComboboxInputChanged(input) => {
268 state.combobox_options.set_input(input.clone());
269 state.combobox_input = input;
270 state.combobox_choice = None;
271 Task::none()
272 }
273 Message::SearchChanged(query) => {
274 state.search_query = query;
275 Task::none()
276 }
277 Message::DatePickerChanged(action) => state.date_picker.update_and_scroll(action),
278 Message::DateRangePickerChanged(action) => {
279 state.date_range_picker.update_and_scroll(action)
280 }
281 Message::TimePickerChanged(action) => {
282 state.time_picker.update(action);
283 Task::none()
284 }
285 Message::SliderChanged(progress) => {
286 state.progress = progress;
287 Task::none()
288 }
289 Message::EnabledChanged(enabled) => {
290 state.enabled = enabled;
291 Task::none()
292 }
293 Message::ChoiceSelected(choice) => {
294 state.radio_choice = Some(choice);
295 Task::none()
296 }
297 Message::SegmentSelected(choice) => {
298 state.segment_choice = choice;
299 state.segment_state.select(choice.index(), Instant::now());
300 Task::none()
301 }
302 Message::PrimaryTabSelected(choice) => {
303 state.primary_tab = choice;
304 state.primary_tab_state.select(
305 choice.index(),
306 Instant::now(),
307 material::widget::tabs::Variant::Primary,
308 );
309 Task::none()
310 }
311 Message::SecondaryTabSelected(choice) => {
312 state.secondary_tab = choice;
313 state.secondary_tab_state.select(
314 choice.index(),
315 Instant::now(),
316 material::widget::tabs::Variant::Secondary,
317 );
318 Task::none()
319 }
320 Message::MenuPressed => {
321 state.navigation.toggle_menu_now();
322 Task::none()
323 }
324 Message::DialogOpened => {
325 state.alert_dialog.show(Instant::now());
326 Task::none()
327 }
328 Message::DialogDismissed => {
329 state.alert_dialog.dismiss(Instant::now());
330 Task::none()
331 }
332 Message::DialogConfirmed => {
333 state.alert_dialog.dismiss(Instant::now());
334 state.count += 1;
335 Task::none()
336 }
337 Message::ShowSnackbar => {
338 state.snackbar.show(Instant::now());
339 Task::none()
340 }
341 Message::SnackbarUndo => {
342 state.count -= 1;
343 state.snackbar.dismiss(Instant::now());
344 Task::none()
345 }
346 Message::WindowResized(size) => {
347 state.window_size = size;
348 Task::none()
349 }
350 Message::ThemeChanged(action) => {
351 state.theme_controller.update(
352 action,
353 state.window_size,
354 theme_picker::bottom_margin(state.adaptive_navigation_layout()),
355 Instant::now(),
356 );
357 Task::none()
358 }
359 Message::Frame(now) => {
360 let _ = state.theme_controller.advance(now);
361 let _ = state.navigation.advance(now);
362 let _ = state.segment_state.advance(now);
363 let _ = state.primary_tab_state.advance(now);
364 let _ = state.secondary_tab_state.advance(now);
365 state.progress_animation.advance(now);
366 let _ = state.alert_dialog.advance(now);
367 let _ = state.snackbar.advance(now);
368 let _ = state.date_picker.advance(now);
369 let _ = state.date_range_picker.advance(now);
370 let _ = state.time_picker.advance(now);
371 Task::none()
372 }
373 }
374}pub fn select_for_size(&mut self, selected: Id, now: Instant, size: Size)
Sourcepub fn select_now_for_size(&mut self, selected: Id, size: Size)
pub fn select_now_for_size(&mut self, selected: Id, size: Size)
Examples found in repository?
More examples
examples/showcase/app.rs (line 321)
233fn update(state: &mut Showcase, message: Message) -> Task<Message> {
234 match message {
235 Message::Navigate(page) => {
236 state
237 .navigation
238 .select(page, Instant::now(), state.adaptive_navigation_layout());
239 Task::none()
240 }
241 Message::Increment => {
242 state.count += 1;
243 Task::none()
244 }
245 Message::Decrement => {
246 state.count -= 1;
247 Task::none()
248 }
249 Message::TextChanged(note) => {
250 state.note = note;
251 Task::none()
252 }
253 Message::EditorAction(action) => {
254 state.editor_content.perform(action);
255 Task::none()
256 }
257 Message::SelectChanged(choice) => {
258 state.select_choice = Some(choice);
259 Task::none()
260 }
261 Message::ComboboxSelected(choice) => {
262 state.combobox_choice = Some(choice);
263 state.combobox_input.clear();
264 state.combobox_options.set_selection(Some(&choice));
265 Task::none()
266 }
267 Message::ComboboxInputChanged(input) => {
268 state.combobox_options.set_input(input.clone());
269 state.combobox_input = input;
270 state.combobox_choice = None;
271 Task::none()
272 }
273 Message::SearchChanged(query) => {
274 state.search_query = query;
275 Task::none()
276 }
277 Message::DatePickerChanged(action) => state.date_picker.update_and_scroll(action),
278 Message::DateRangePickerChanged(action) => {
279 state.date_range_picker.update_and_scroll(action)
280 }
281 Message::TimePickerChanged(action) => {
282 state.time_picker.update(action);
283 Task::none()
284 }
285 Message::SliderChanged(progress) => {
286 state.progress = progress;
287 Task::none()
288 }
289 Message::EnabledChanged(enabled) => {
290 state.enabled = enabled;
291 Task::none()
292 }
293 Message::ChoiceSelected(choice) => {
294 state.radio_choice = Some(choice);
295 Task::none()
296 }
297 Message::SegmentSelected(choice) => {
298 state.segment_choice = choice;
299 state.segment_state.select(choice.index(), Instant::now());
300 Task::none()
301 }
302 Message::PrimaryTabSelected(choice) => {
303 state.primary_tab = choice;
304 state.primary_tab_state.select(
305 choice.index(),
306 Instant::now(),
307 material::widget::tabs::Variant::Primary,
308 );
309 Task::none()
310 }
311 Message::SecondaryTabSelected(choice) => {
312 state.secondary_tab = choice;
313 state.secondary_tab_state.select(
314 choice.index(),
315 Instant::now(),
316 material::widget::tabs::Variant::Secondary,
317 );
318 Task::none()
319 }
320 Message::MenuPressed => {
321 state.navigation.toggle_menu_now();
322 Task::none()
323 }
324 Message::DialogOpened => {
325 state.alert_dialog.show(Instant::now());
326 Task::none()
327 }
328 Message::DialogDismissed => {
329 state.alert_dialog.dismiss(Instant::now());
330 Task::none()
331 }
332 Message::DialogConfirmed => {
333 state.alert_dialog.dismiss(Instant::now());
334 state.count += 1;
335 Task::none()
336 }
337 Message::ShowSnackbar => {
338 state.snackbar.show(Instant::now());
339 Task::none()
340 }
341 Message::SnackbarUndo => {
342 state.count -= 1;
343 state.snackbar.dismiss(Instant::now());
344 Task::none()
345 }
346 Message::WindowResized(size) => {
347 state.window_size = size;
348 Task::none()
349 }
350 Message::ThemeChanged(action) => {
351 state.theme_controller.update(
352 action,
353 state.window_size,
354 theme_picker::bottom_margin(state.adaptive_navigation_layout()),
355 Instant::now(),
356 );
357 Task::none()
358 }
359 Message::Frame(now) => {
360 let _ = state.theme_controller.advance(now);
361 let _ = state.navigation.advance(now);
362 let _ = state.segment_state.advance(now);
363 let _ = state.primary_tab_state.advance(now);
364 let _ = state.secondary_tab_state.advance(now);
365 state.progress_animation.advance(now);
366 let _ = state.alert_dialog.advance(now);
367 let _ = state.snackbar.advance(now);
368 let _ = state.date_picker.advance(now);
369 let _ = state.date_range_picker.advance(now);
370 let _ = state.time_picker.advance(now);
371 Task::none()
372 }
373 }
374}Sourcepub fn is_animating(&self) -> bool
pub fn is_animating(&self) -> bool
Examples found in repository?
examples/showcase/app.rs (line 385)
380fn subscription(state: &Showcase) -> Subscription<Message> {
381 let mut subscriptions =
382 vec![iced::window::resize_events().map(|(_id, size)| Message::WindowResized(size))];
383
384 if state.theme_controller.is_animating()
385 || state.navigation.is_animating()
386 || state.segment_state.is_animating()
387 || state.primary_tab_state.is_animating()
388 || state.secondary_tab_state.is_animating()
389 || state.alert_dialog.is_animating()
390 || state.snackbar.is_active()
391 || state.date_picker.is_animating()
392 || state.date_range_picker.is_animating()
393 || state.time_picker.is_animating()
394 || (state.navigation.selected() == ShowcasePage::Feedback
395 && state.progress_animation.is_animating())
396 {
397 subscriptions.push(iced::window::frames().map(Message::Frame));
398 }
399
400 Subscription::batch(subscriptions)
401}Sourcepub fn subscription<Message, F>(&self, on_frame: F) -> Subscription<Message>
pub fn subscription<Message, F>(&self, on_frame: F) -> Subscription<Message>
Sourcepub fn advance(&mut self, now: Instant) -> bool
pub fn advance(&mut self, now: Instant) -> bool
Examples found in repository?
examples/showcase/app.rs (line 361)
233fn update(state: &mut Showcase, message: Message) -> Task<Message> {
234 match message {
235 Message::Navigate(page) => {
236 state
237 .navigation
238 .select(page, Instant::now(), state.adaptive_navigation_layout());
239 Task::none()
240 }
241 Message::Increment => {
242 state.count += 1;
243 Task::none()
244 }
245 Message::Decrement => {
246 state.count -= 1;
247 Task::none()
248 }
249 Message::TextChanged(note) => {
250 state.note = note;
251 Task::none()
252 }
253 Message::EditorAction(action) => {
254 state.editor_content.perform(action);
255 Task::none()
256 }
257 Message::SelectChanged(choice) => {
258 state.select_choice = Some(choice);
259 Task::none()
260 }
261 Message::ComboboxSelected(choice) => {
262 state.combobox_choice = Some(choice);
263 state.combobox_input.clear();
264 state.combobox_options.set_selection(Some(&choice));
265 Task::none()
266 }
267 Message::ComboboxInputChanged(input) => {
268 state.combobox_options.set_input(input.clone());
269 state.combobox_input = input;
270 state.combobox_choice = None;
271 Task::none()
272 }
273 Message::SearchChanged(query) => {
274 state.search_query = query;
275 Task::none()
276 }
277 Message::DatePickerChanged(action) => state.date_picker.update_and_scroll(action),
278 Message::DateRangePickerChanged(action) => {
279 state.date_range_picker.update_and_scroll(action)
280 }
281 Message::TimePickerChanged(action) => {
282 state.time_picker.update(action);
283 Task::none()
284 }
285 Message::SliderChanged(progress) => {
286 state.progress = progress;
287 Task::none()
288 }
289 Message::EnabledChanged(enabled) => {
290 state.enabled = enabled;
291 Task::none()
292 }
293 Message::ChoiceSelected(choice) => {
294 state.radio_choice = Some(choice);
295 Task::none()
296 }
297 Message::SegmentSelected(choice) => {
298 state.segment_choice = choice;
299 state.segment_state.select(choice.index(), Instant::now());
300 Task::none()
301 }
302 Message::PrimaryTabSelected(choice) => {
303 state.primary_tab = choice;
304 state.primary_tab_state.select(
305 choice.index(),
306 Instant::now(),
307 material::widget::tabs::Variant::Primary,
308 );
309 Task::none()
310 }
311 Message::SecondaryTabSelected(choice) => {
312 state.secondary_tab = choice;
313 state.secondary_tab_state.select(
314 choice.index(),
315 Instant::now(),
316 material::widget::tabs::Variant::Secondary,
317 );
318 Task::none()
319 }
320 Message::MenuPressed => {
321 state.navigation.toggle_menu_now();
322 Task::none()
323 }
324 Message::DialogOpened => {
325 state.alert_dialog.show(Instant::now());
326 Task::none()
327 }
328 Message::DialogDismissed => {
329 state.alert_dialog.dismiss(Instant::now());
330 Task::none()
331 }
332 Message::DialogConfirmed => {
333 state.alert_dialog.dismiss(Instant::now());
334 state.count += 1;
335 Task::none()
336 }
337 Message::ShowSnackbar => {
338 state.snackbar.show(Instant::now());
339 Task::none()
340 }
341 Message::SnackbarUndo => {
342 state.count -= 1;
343 state.snackbar.dismiss(Instant::now());
344 Task::none()
345 }
346 Message::WindowResized(size) => {
347 state.window_size = size;
348 Task::none()
349 }
350 Message::ThemeChanged(action) => {
351 state.theme_controller.update(
352 action,
353 state.window_size,
354 theme_picker::bottom_margin(state.adaptive_navigation_layout()),
355 Instant::now(),
356 );
357 Task::none()
358 }
359 Message::Frame(now) => {
360 let _ = state.theme_controller.advance(now);
361 let _ = state.navigation.advance(now);
362 let _ = state.segment_state.advance(now);
363 let _ = state.primary_tab_state.advance(now);
364 let _ = state.secondary_tab_state.advance(now);
365 state.progress_animation.advance(now);
366 let _ = state.alert_dialog.advance(now);
367 let _ = state.snackbar.advance(now);
368 let _ = state.date_picker.advance(now);
369 let _ = state.date_range_picker.advance(now);
370 let _ = state.time_picker.advance(now);
371 Task::none()
372 }
373 }
374}Sourcepub fn advance_frame(&mut self, now: Instant)
pub fn advance_frame(&mut self, now: Instant)
Trait Implementations§
Source§fn clone(&self) -> NavigationState<Id>
fn clone(&self) -> NavigationState<Id>
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
Convert
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>
Convert
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)
Convert
&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)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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>
Source§impl<State, Message> IntoBoot<State, Message> for State
impl<State, Message> IntoBoot<State, Message> for State
Source§fn into_boot(self) -> (State, Task<Message>)
fn into_boot(self) -> (State, Task<Message>)
Turns some type into the initial state of some
Application.