pub struct DatePickerState { /* private fields */ }Expand description
State held by a Material date picker.
Implementations§
Source§impl DatePickerState
impl DatePickerState
Sourcepub fn new(selected_date: Option<Date>) -> Self
pub fn new(selected_date: Option<Date>) -> Self
Creates date picker state with the default Material year range (1900..=2100).
Examples found in repository?
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 year_range(self, year_range: RangeInclusive<i32>) -> Self
pub fn year_range(self, year_range: RangeInclusive<i32>) -> Self
Sets the supported year range, clamping the displayed month to it.
Sourcepub fn initial_displayed_month(self, displayed_month: YearMonth) -> Self
pub fn initial_displayed_month(self, displayed_month: YearMonth) -> Self
Sets the initially displayed month independently from the selected date.
Months outside the configured year range are ignored, matching Material state semantics.
Sourcepub fn selectable_dates(self, selectable_dates: SelectableDates) -> Self
pub fn selectable_dates(self, selectable_dates: SelectableDates) -> Self
Sets date/year enablement predicates.
Sourcepub fn first_day_of_week(self, first_day_of_week: Weekday) -> Self
pub fn first_day_of_week(self, first_day_of_week: Weekday) -> Self
Sets the first day of week used by the calendar grid.
Sourcepub fn formatter(self, formatter: DatePickerFormatter) -> Self
pub fn formatter(self, formatter: DatePickerFormatter) -> Self
Sets date display formatting hooks.
pub fn selected_date(&self) -> Option<Date>
pub fn displayed_month(&self) -> YearMonth
pub fn display_mode(&self) -> DateDisplayMode
pub fn year_picker_visible(&self) -> bool
pub fn input_value(&self) -> &str
pub fn calendar_first_day_of_week(&self) -> Weekday
pub fn date_formatter(&self) -> &DatePickerFormatter
Sourcepub fn scroll_to_year<Message>(&self) -> Task<Message>where
Message: Send + 'static,
pub fn scroll_to_year<Message>(&self) -> Task<Message>where
Message: Send + 'static,
Returns a task that positions the year picker near the displayed year.
pub fn is_input_valid(&self) -> bool
pub fn input_error(&self) -> Option<String>
Sourcepub fn update(&mut self, action: DatePickerAction)
pub fn update(&mut self, action: DatePickerAction)
Applies a date picker action.
Sourcepub fn update_and_scroll<Message>(
&mut self,
action: DatePickerAction,
) -> Task<Message>where
Message: Send + 'static,
pub fn update_and_scroll<Message>(
&mut self,
action: DatePickerAction,
) -> Task<Message>where
Message: Send + 'static,
Applies a date picker action and returns the follow-up scroll task used when the year picker becomes visible.
Examples found in repository?
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 update_and_scroll_at<Message>(
&mut self,
action: DatePickerAction,
now: Instant,
) -> Task<Message>where
Message: Send + 'static,
pub fn update_and_scroll_at<Message>(
&mut self,
action: DatePickerAction,
now: Instant,
) -> Task<Message>where
Message: Send + 'static,
Applies a date picker action at now and returns the follow-up scroll
task used when the year picker becomes visible.
Sourcepub fn update_at(&mut self, action: DatePickerAction, now: Instant)
pub fn update_at(&mut self, action: DatePickerAction, now: Instant)
Applies a date picker action, using now as the transition start time.
Sourcepub fn advance(&mut self, now: Instant) -> bool
pub fn advance(&mut self, now: Instant) -> bool
Advances any running Material picker transitions.
Examples found in repository?
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
Returns whether this picker needs frame ticks for animations.
Examples found in repository?
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>
Returns a frame subscription while picker animations are running.
Trait Implementations§
Source§impl Clone for DatePickerState
impl Clone for DatePickerState
Source§fn clone(&self) -> DatePickerState
fn clone(&self) -> DatePickerState
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for DatePickerState
impl Debug for DatePickerState
Auto Trait Implementations§
impl !RefUnwindSafe for DatePickerState
impl !UnwindSafe for DatePickerState
impl Freeze for DatePickerState
impl Send for DatePickerState
impl Sync for DatePickerState
impl Unpin for DatePickerState
impl UnsafeUnpin for DatePickerState
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
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>
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.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>)
Application.