Skip to main content

TextField

Struct TextField 

Source
pub struct TextField<Msg = Callback> { /* private fields */ }
Expand description

A single-line text input field, with optional form decoration (label, hint, helper text, error). Validity stays decided by the application (a pure function of the state); the field only displays its result through error.

Implementations§

Source§

impl TextField<Callback>

Source

pub fn controller(self, controller: &TextEditingController) -> Self

Drives the field from controller: it shows the controller’s text, and what is typed in it is written to the controller.

This sets the field’s text and its on_input, so it replaces both. To do more when the text changes, listen to the controller.

Source§

impl<Msg> TextField<Msg>

Source

pub fn new(value: impl Into<String>) -> Self

Creates a field displaying value.

Source

pub fn outlined(self) -> Self

Outlined: a box the caller can see all the way round, the floating label notching its top border. The default.

Source

pub fn borderless(self) -> Self

Filled: a tinted container with a single line under it, the label floating inside the box rather than on its edge. No container: no fill, no box, no line — the reference’s InputBorder.none. For a field inside something that is already a container. See TextFieldVariant::None.

Source

pub fn filled(self) -> Self

The filled variant: a tinted container with a single line under it, the label floating inside. See TextFieldVariant::Filled.

Source

pub fn variant(self, variant: TextFieldVariant) -> Self

Chooses the variant directly, for a caller holding one in a variable.

Source

pub fn enabled(self, enabled: bool) -> Self

Greys the field out and makes it inert. A disabled field still shows its value: the reference dims it rather than hiding it, since it is usually the answer to why the rest of a form is the way it is.

Source

pub fn style(self, style: TextFieldStyle) -> Self

Overrides part of the styling for this field alone. Anything left None falls to the theme’s TextFieldTheme, then to the framework’s defaults.

Source

pub fn dense(self, dense: bool) -> Self

Tightens the field: the reference’s isDense, which trades the comfortable padding for a control that fits inside a table row. The shape, the label and the border are unchanged — only the room around the content.

Source

pub fn autofill(self, hints: impl IntoIterator<Item = AutofillHint>) -> Self

What the field is for — a username, a new password, a one-time code, a postal code — so that the platform’s autofill service can fill it, and save it once the form is submitted. See AutofillHint.

A list, most telling first: a sign-in box that takes an email address is both [AutofillHint::Username, AutofillHint::Email]. The fields of one form belong in an AutofillGroup, or a password is shown to the service with no username to save it under.

ⓘ
TextField::new(&app.code).autofill([AutofillHint::OneTimeCode])
Source

pub fn multiline(self) -> Self

Switches the field to multi-line: Enter inserts a line break (instead of submitting), and the box shows rows lines (see rows).

Source

pub fn rows(self, rows: u16) -> Self

Number of visible lines in multi-line mode (at least 1). Implies multiline.

Source

pub fn obscure(self, obscure: bool) -> Self

Masks the value (a password field): every character becomes a dot. Editing stays normal; only the display is masked.

It also changes what the software keyboard is told, unless keyboard_type says otherwise: a masked field is a Password, which is what stops the keyboard learning what is typed into it. The dots are drawn by us and tell the keyboard nothing.

Source

pub fn text_align(self, align: TextAlign) -> Self

Where the text sits inside the field: an amount to the right, a code centred.

Start — the default — follows the reading direction, so a field is left-aligned in English and right-aligned in Arabic. Left and Right do not: a column of figures wants the same edge whatever the prose around it is doing.

Single-line fields only. A multi-line one stays at the start, and that is a boundary rather than an oversight: aligning wrapped text means moving each line by its own width, and the caret and the click would then have to be told about an offset that differs line by line. That belongs inside the text layout, where the caret and the hit test already live, and not in a widget nudging a block sideways behind their backs.

Source

pub fn keyboard_type(self, keyboard: KeyboardType) -> Self

Which keys the software keyboard should offer — a phone keypad, an email address, a number.

Untold, it is worked out from the field: a masked field is a secret, a multi-line one takes newlines, and anything else is ordinary text.

Source

pub fn action(self, action: TextInputAction) -> Self

What the keyboard’s action key does, and what it says — Next in a form, Search over a query, Send on a message.

Untold, a multi-line field takes a newline and every other field says Done.

Source

pub fn prefix_icon(self, icon: IconData) -> Self

Decorative icon on the left inside the field.

Source

pub fn suffix_icon(self, icon: IconData) -> Self

Decorative icon on the right inside the field.

Source

pub fn on_suffix(self, message: impl Into<Msg>) -> Self

Makes the suffix icon clickable: a click on it emits message (a clear button, a reveal-password button…) instead of placing the caret. Implies a suffix icon (to be set through suffix_icon).

Source

pub fn label(self, label: impl Into<String>) -> Self

Label displayed above the field.

Source

pub fn placeholder(self, placeholder: impl Into<String>) -> Self

Hint displayed inside the field while it is empty.

Source

pub fn helper(self, helper: impl Into<String>) -> Self

Helper text below the field (replaced by the error, if present).

Source

pub fn error(self, message: impl Into<String>) -> Self

Marks the field in error: red border and label, message displayed below the field. Chain it only when the application’s validation fails.

Source

pub fn width(self, width: f32) -> Self

Sets the width, in logical pixels.

Source

pub fn size(self, size: f32) -> Self

Sets the font size, in pixels.

Source

pub fn max_length(self, max: usize) -> Self

The most characters the field will hold.

It is enforced, as the reference’s default is: a keystroke past the limit does not reach the value, and neither does the tail of a paste that would cross it — the part that fits still lands, because dropping a whole paste for being one character too long loses work the user can see they had.

It also puts a counter — 5/10 — at the end of the line below the box, where the reference puts one, and reserves that line even when there is no helper text to share it with.

The limit is in characters, not bytes: “é” is one, and a name in an alphabet that is not Latin is counted the way its writer would count it.

Source

pub fn input_filter( self, filter: impl Fn(char) -> Option<char> + 'static, ) -> Self

What each typed character becomes before it reaches the value: None drops it, Some(c) puts c in instead of what was typed.

The reference’s inputFormatters reshape the whole value after every keystroke, which buys grouping (spaces every four digits of a card number) and costs a caret: the formatter has to say where it went, and getting that wrong puts the cursor in the middle of a group the reader did not touch. A filter that works one character at a time cannot group, and cannot lose the caret either — a dropped character simply never arrives, and a substituted one takes the same place. That covers digits-only, letters-only, no-spaces and forced case, which is nearly every field that filters at all.

It applies to what is typed or pasted, and a paste keeps whatever it can rather than being refused whole — the same rule max_length follows, for the same reason.

A value the caller supplied is left alone: it is the application’s state, not something typed, and rewriting it would be editing a value nobody edited.

ⓘ
TextField::new(&app.code).input_filter(|c| c.to_uppercase().next())
TextField::new(&app.tag).input_filter(|c| (!c.is_whitespace()).then_some(c))
Source

pub fn digits_only(self) -> Self

Digits, and nothing else.

It also asks for a number keypad, unless one was named already: a field that refuses everything but digits and then opens a QWERTY keyboard is a field whose keys mostly do nothing. Naming a keyboard before or after this leaves that choice standing, so the two builders can be written in either order.

Source

pub fn capitalization(self, capitalization: Capitalization) -> Self

Which letters the software keyboard capitalises by itself.

A hint: it is what the keyboard does to what it sends, and a reader who turns it off still types what they meant to. A field that must hold capitals wants input_filter as well, which works whatever the keyboard does and works on a desktop, where there is no keyboard to hint to.

Source

pub fn read_only(self) -> Self

A field whose value can be read, selected and copied — but not changed.

It is not enabled(false), and the difference matters. A disabled field is greyed out and inert: out of the tab order, no caret, nothing to select. A read-only one looks and behaves like any other field except that typing does nothing — you can focus it, move the caret through it, select a reference number and copy it. That is what an identifier the application generated wants, and greying it out would suggest it is unavailable rather than fixed.

Source

pub fn selection_toolbar( self, build: impl Fn(&ToolbarContext, Vec<ToolbarItem<Msg>>) -> Vec<ToolbarItem<Msg>> + 'static, ) -> Self

What the bar over a selection offers — Cut, Copy, Paste, Select all — decided by the application (milestone 568, #23).

build is handed the ToolbarContext (is something selected, is there text to paste, is everything selected already) and the field’s default list for it, and returns the list to show. Drop an item, reorder them, add one of the application’s own (ToolbarItem::custom) — or return an empty list, and no bar shows at all.

use frus_widgets::{TextField, ToolbarItem};

#[derive(Clone)]
enum Msg { Translate }

// A field that never lets its text be pasted over, and offers a way to translate it.
let field: TextField<Msg> = TextField::new("Bonjour").selection_toolbar(|context, mut items| {
    items.retain(|item| item.label() != "Paste");
    if context.has_selection {
        items.push(ToolbarItem::custom("Translate", Msg::Translate));
    }
    items
});

The defaults already keep a secret: a masked field (obscure) is given neither Cut nor Copy, and a read_only one neither Cut nor Paste, so an application only has to change the list to depart from them.

Source

pub fn on_input<R: IntoMsg<Msg>>( self, on_input: impl Fn(String) -> R + 'static, ) -> Self

Closure producing a message from the field’s new value.

Source

pub fn on_submit(self, message: impl Into<Msg>) -> Self

Message emitted on submission (the Enter key), without changing the value.

Source

pub fn announce(self, message: impl Into<String>) -> Self

Text to speak through the screen reader’s live region when Self::on_submit fires — the field’s own counterpart to a button’s Widget::announce, which only ever fires on a click or a plain Enter and so never sees a field’s submit (#18). Compute it from the value the caller already has — TextField::new(draft).announce(format!("{draft} added")) — since by the time this fires, the widget it is read from is the one built before the keystroke, still holding what is about to be cleared.

Trait Implementations§

Source§

impl<Msg: Clone + 'static> Widget<Msg> for TextField<Msg>

Source§

fn fill_axes(&self, _theme: &Theme) -> FillAxes

All the room on offer on an axis nobody sized, as the reference’s takes (milestone 590) — unless it was told to grow, which says the same thing already.

Source§

fn soft_extent(&self) -> FillAxes

The default size is only a default: the room replaces it wherever the layout can give the room, and it stands where the reference would have nothing to give.

Source§

fn takes_typing(&self) -> bool

A field that is read-only, or that cannot be focused, takes no typing.

Source§

fn style(&self) -> Style

Layout style (handed to frus-layout).
Source§

fn children(&self) -> &[Box<dyn Widget<Msg>>]

The widget’s children (possibly empty).
Source§

fn paint(&self, bounds: Rect, status: Status, theme: &Theme, scene: &mut Scene)

Paints the widget’s own decoration, according to its status (hover / focus / cursor / selection) and the current theme.
Source§

fn on_click(&self) -> Option<Msg>

Message to emit on click (None = not clickable).
Source§

fn positional_click( &self, local_x: f32, local_y: f32, width: f32, _height: f32, ) -> Option<Msg>

Positional click: a message emitted according to where the click landed (local coordinates from the widget’s top-left corner, within the width × height box), taking priority over on_click. For clickable sub-regions — e.g. the suffix icon of a crate::TextField (clear / reveal) or a chart point (milestone 221). None (the default) = no sub-region; the shell falls back to on_click.
Source§

fn cursor_icon( &self, local_x: f32, local_y: f32, width: f32, _height: f32, ) -> Option<Cursor>

Shape of the system cursor wanted at the local position (local_x, local_y) inside the widget’s width × height box (milestone 205): Some(Cursor::Pointer) over a clickable sub-region (a suffix icon…), None (the default) = no opinion, the shell keeps the default cursor. Does not affect clicking; this is purely the pointer’s appearance on hover.
Source§

fn on_edit(&self, edit: &mut Edit, key: &Key) -> Option<Msg>

Applies a key to the focused widget: mutates the edit state (cursor/selection) and returns a message if the value changes.
Source§

fn ime(&self) -> Ime

What the software keyboard should be, when this widget is the focused editable one. Read more
Source§

fn cursor_at( &self, local_x: f32, local_y: f32, width: f32, scroll_cursor: usize, ) -> Option<usize>

Cursor index matching a local position (px from the widget’s top-left corner) — for placing the caret on click. local_y picks the line in a multi-line field (ignored on a single line). Read more
Source§

fn text_metrics( &self, width: f32, cursor: usize, ) -> Option<(f32, f32, f32, f32)>

SingleChildScrollView metrics of a multi-line field, for a widget width and a cursor: (content height, visible box height, caret top, caret height), in content space (px). The shell uses them to register the scrollable region and to keep the caret in view. None otherwise.
Source§

fn text_viewport(&self, rect: Rect) -> Option<Rect>

Frame (input box) of a multi-line field within its rect — the area where the text scrolls, below the label. Used to place the scrollbar and the scrollable region exactly on the box. None otherwise.
Source§

fn caret_vertical( &self, width: f32, cursor: usize, down: bool, page: bool, goal_x: Option<f32>, ) -> Option<(usize, f32)>

Moves the caret vertically in a multi-line field and returns (new index, visual column used). Read more
Source§

fn text_value(&self) -> Option<&str>

The field’s whole value, if this widget is a text field — to give the IME its input context (suggestions). None otherwise.
Source§

fn replace_value(&self, value: String) -> Option<Msg>

The message that puts value in this field: the one typing would have produced, for a value the framework restores rather than the user typing it. Read more
Source§

fn semantics(&self) -> Option<SemanticsProperties>

The widget’s accessibility annotation (role, label, value, state), exposed to assistive technologies through the AccessKit tree. None = no semantics of its own (a layout container — its children, though, may have some). See frus_core::SemanticsProperties.
Source§

fn selected_text(&self, edit: &Edit) -> Option<String>

The currently selected text (for copy/cut).
Source§

fn word_at(&self, index: usize) -> Option<(usize, usize)>

Range (start, end) of the word around the given index (for double-click).
Source§

fn selection_handles( &self, width: f32, edit: &Edit, scroll_y: f32, ) -> Option<[SelectionHandle; 2]>

The two handles of the selection in edit, start then end, for a field width wide whose content is scrolled down by scroll_y — where they are painted, and so where a finger takes them. None when there is no selection, or this is not a text field.
Source§

fn selection_toolbar(&self, context: ToolbarContext) -> Option<&dyn Widget<Msg>>

The bar this field shows over its selection (Cut, Copy, Paste, Select all — see crate::ToolbarItem) for context, or None when there is none to show: this is not a text field, or the application’s list for that context is empty. Read more
Source§

fn selection_anchor( &self, width: f32, edit: &Edit, scroll_y: f32, ) -> Option<Rect>

The box the bar is placed against, in the field’s local coordinates: the selection’s, or the caret’s when nothing is selected. Like selection_handles it is the paint’s own geometry.
Source§

fn autofill_hints(&self) -> &[AutofillHint]

What this field is for, so the platform can fill it in — see AutofillHint. Empty (the default) is a field that takes no part in autofill at all. Read more
Source§

fn focusable(&self) -> bool

If true, the widget can take keyboard focus (click or Tab).
Source§

fn draws_own_focus(&self) -> bool

If true, the widget draws its focus indicator itself (the driver then does not stroke the generic ring). E.g. TextField.
Source§

fn announce(&self) -> Option<String>

Text to announce to the screen reader when this widget is activated (mouse click or Enter/Space) — a live region reads it out loud. Describes the effect the activation produced (“Sorted by Name ascending”, “All rows selected”), for the blind user who cannot perceive the visual change. None = nothing to announce (the default).
Source§

fn opaque(&self) -> bool

Whether a press that lands on this widget and on nothing inside it stops here. Read more
Source§

fn key(&self) -> Option<u64>

Stable identity key (independent of the position among siblings). None = positional identity. See crate::Keyed.
Source§

fn debug_name(&self) -> &'static str

Short name of the widget — for the inspector and diagnostic dumps. Defaults to the name of the concrete type, without module path or generics (each implementation gets its own monomorphised copy of this default body). Transparent wrappers (Box, crate::Keyed…) delegate to their content.
Source§

fn describes(&self) -> Option<Description>

What this widget says about its child’s subtree, when it knows something the child cannot know about itself — the crate::Semantics wrapper, and nothing else so far. Read more
Source§

fn selection_text(&self) -> Option<&str>

The words this widget shows, if it takes part in a SelectionArea: a Text, and nothing that is not made of words. The walk registers such a widget as a text stop when it is inside an area, so that a selection can begin, end and pass through it.
Source§

fn selection_hit( &self, _local_x: f32, _local_y: f32, _width: f32, ) -> Option<usize>

The character boundary of selection_text nearest a local position (px from the widget’s top-left corner) in a box width wide — the layout the widget was drawn with, which is what a press is hit against.
Source§

fn selection_grip( &self, _width: f32, _index: usize, _start: bool, ) -> Option<SelectionHandle>

The handle that hangs from character boundary index of this widget’s words — the start handle when start, the end handle otherwise — in local coordinates, for a widget width wide: where it is painted, and so where a finger takes it. None for anything that is not a text.
Source§

fn area_toolbar( &self, _context: ToolbarContext, ) -> Option<Option<&dyn Widget<Msg>>>

The bar a SelectionArea offers over its selection, for context, when the application has said what it holds (SelectionArea::selection_toolbar): Some of the bar, or Some(None) for no bar at all. None for anything else — and for an area that was told nothing — whose texts then offer Copy and Select all.
Source§

fn region_toolbar( &self, _context: ToolbarContext, _width: f32, _range: (usize, usize), ) -> Option<(Rect, &dyn Widget<Msg>)>

The bar over the part of a selection area’s selection that lies in this widget — range, in characters — for context, and the box it is placed against in local coordinates, for a widget width wide. None for anything that is not a text, or when the list for context is empty.
Source§

fn edit_action(&self) -> Option<EditAction>

The editing action pressing this widget performs on the focused field, for a button of the bar that carries no message (see crate::EditAction).
Source§

fn shortcut_bindings(&self) -> &[(KeyStroke, Intent)]

Keystrokes this subtree binds to intents — see crate::Shortcuts.
Source§

fn shortcut_callbacks(&self) -> &[(KeyStroke, Msg)]

Keystrokes this subtree binds straight to messages — see crate::CallbackShortcuts.
Source§

fn action_bindings(&self) -> &[(Intent, Msg)]

Intents this subtree answers — see crate::Actions.
Source§

fn action_listeners(&self) -> &[(Intent, Msg)]

Intents this subtree watches without answering — see crate::ActionListener.
Source§

fn on_keystroke(&self) -> Option<Rc<dyn Fn(KeyStroke) -> Option<Msg>>>

Every keystroke reaching this subtree, handed to a closure — see crate::KeyboardListener. None (the default) is not a listener.
Source§

fn autofocus(&self) -> bool

If true, a focusable widget takes the focus when it appears: a menu’s first row when the menu opens, a field on a screen made to type into (milestone 605). Where the focus came from is remembered, and it goes back there when this one goes.
Source§

fn descendants_focusable(&self) -> bool

If false, nothing inside this subtree can take focus — the reference’s ExcludeFocus. A dimmed panel behind a sheet is still drawn and still measured; it simply stops being somewhere Tab can land.
Source§

fn focus_skip_traversal(&self) -> bool

If true, this subtree’s focus stops are skipped by Tab while remaining focusable by a click — the reference’s ExcludeFocusTraversal. The two are separate questions: a toolbar button may be reachable with the pointer and still not belong in the keyboard’s order.
Source§

fn focus_order(&self) -> Option<f32>

A traversal order for this subtree’s focus stops, smallest first — the reference’s NumericFocusOrder. None leaves them in tree order, which is where everything sits until someone says otherwise.
Source§

fn focus_group(&self) -> bool

If true, this subtree is a traversal group: an order set inside it is resolved among its own members and nowhere else, so a reordered dialog does not reshuffle the page behind it.
Source§

fn autofill_group(&self) -> bool

If true, this subtree’s fields are one form — the reference’s AutofillGroup. A service shown a password with no username beside it has nothing to save the pair under.
Source§

fn draggable(&self) -> bool

If true, the widget responds to pointer dragging (sliders, handles).
Source§

fn drag_track(&self) -> DragTrack

Where along a draggable widget its drag lands (milestone 648): how far in from each end the travel starts, and whether it runs from the right in a right-to-left reading direction. The fraction on_drag and its edges are given is measured along that travel. The default is the whole width, left to right.
Source§

fn on_drag(&self, _fraction: f32) -> Option<Msg>

Message produced while dragging, fraction being the relative horizontal position (0.0..=1.0) within the widget’s bounds.
Source§

fn on_drag_start(&self, _fraction: f32) -> Option<Msg>

Message produced when a value drag begins — on the press, before the first on_drag. Read more
Source§

fn on_drag_end(&self, _fraction: f32) -> Option<Msg>

Message produced when a value drag ends — on the release, with the fraction the pointer finished on. Read more
Source§

fn on_drag_delta(&self, _dx: f32) -> Option<Msg>

Message produced by a horizontal drag expressed as a delta: dx is the movement (logical px) since the last event. For handles that accumulate (column resizing), unlike on_drag (an absolute fraction, e.g. a slider). The shell tries it before on_drag; a widget implements only one of the two.
Source§

fn hero_tag(&self) -> Option<u64>

If this widget is a shared element, its tag. Two heroes with the same tag on the two sides of a route transition are one thing in two places. See crate::Hero.
Source§

fn drag_payload(&self) -> Option<u64>

If this widget can be picked up and dropped elsewhere, what it carries. See crate::Draggable.
Source§

fn drag_needs_long_press(&self) -> bool

Does this item lift on a long press rather than on the first movement? The answer inside a scrollable, where a plain drag belongs to the scroll. Read more
Source§

fn drag_ghost_opacity(&self) -> f32

How solid the item left behind looks while a copy of it is being dragged.
Source§

fn on_dropped(&self, _accepted: bool) -> Option<Msg>

Message sent when a drag of this item ends, true if a target took it.
Source§

fn drop_zone(&self) -> bool

Is this widget a drop target? See crate::DragTarget.
Source§

fn accepts_drag(&self, _payload: u64) -> bool

Would this target take payload? Only asked of a drop target.
Source§

fn on_drop(&self, _payload: u64) -> Option<Msg>

Message sent when an accepted item is dropped on this target.
Source§

fn reorder_index(&self) -> Option<usize>

If this widget is a reorderable header, its column index. The shell uses it to identify the source column (on press) and the target column (under the pointer on release) of a reordering drag.
Source§

fn on_reorder(&self, _to: usize) -> Option<Msg>

Message emitted when this header (the source) is dropped on column to. The widget knows its own index and the on_reorder(from, to) callback.
Source§

fn reorder_axis(&self) -> ReorderAxis

Movement axis of this reorderable (default ReorderAxis::Horizontal): the shell orients the drag preview (ghost + insertion indicator) accordingly. Kanban cards return ReorderAxis::Vertical.
Source§

fn reorder_inserts(&self) -> bool

Is a horizontal reorderable dropped between its neighbours, like a list’s row, rather than into the place of the one under the pointer, like a table’s column? false by default, which is the table. Read more
Source§

fn reorder_draggable(&self) -> bool

Can this reorderable be picked up as a drag source? true by default for every reorderable. A target-only slot — the drop zone at the end of a Kanban column — returns false: a card can be dropped there, not lifted from it (otherwise the drag would raise an empty ghost that moves nothing).
Source§

fn reorder_droppable(&self) -> bool

Can this reorderable be dropped onto? true by default, and the mirror image of reorder_draggable: a source-only grip — a list row’s drag handle — returns false. Read more
Source§

fn reorder_announcement(&self, _to: usize) -> Option<String>

What to say to a screen reader once this reorderable has been moved to to — the spoken counterpart of the ghost, for someone who cannot see it land. Read more
Source§

fn stack(&self) -> bool

If true, the widget is a stack: its children are superimposed layers (the same box), rendered in order (the last one on top).
Source§

fn sticky_header(&self) -> bool

If true, the widget is a section with a sticky header (crate::StickyHeader): its first child is painted, and takes taps, at the top of what is visible of the section, over the second (milestone 602).
Source§

fn custom_layout(&self) -> Option<CustomLayout<'_>>

If the widget places its children with a function — a crate::CustomMultiChildLayout — the function and one key per child. The children are then laid out and placed in the walk, by the function, and not in this node’s layout (milestone 601).
Source§

fn continuous(&self) -> bool

If true, the widget animates continuously (driven by time, not by a target): the framework keeps redrawing. E.g. CircularProgressIndicator.
Source§

fn repaint_boundary(&self) -> bool

If true, this widget is a repaint boundary: its subtree is cached (primitives + interaction maps) and reused as is as long as its geometry and the interaction state of its descendants do not change — a widget animating elsewhere no longer forces it to repaint. See crate::Container::repaint_boundary and paintcache.rs.
Source§

fn scroll_content(&self) -> Option<&dyn Widget<Msg>>

If the widget is a scrollable container, returns its content.
Source§

fn virtual_list(&self, _viewport: Size) -> Option<VirtualList<'_, Msg>>

If the widget is a virtualised list, returns its description (item count, height, factory). Only the visible items are built.
Source§

fn page_view(&self) -> Option<PagedView<'_, Msg>>

If the widget is a paged view, returns its description (page count, axis, factory). Like a virtualised list, only the visible pages are built.
Source§

fn on_page_changed(&self, _page: usize) -> Option<Msg>

Message sent by a paged view when the page on screen changes.
Source§

fn on_scroll(&self, _position: ScrollPosition) -> Option<Msg>

Message sent by a scroll region when its offset changes — the reading half of crate::ScrollPosition. Read more
Source§

fn scroll_grain(&self) -> f32

How far this region must move before it says so again, in pixels; 0 — the default — reports every change. Read more
Source§

fn intrinsic(&self) -> Option<(IntrinsicAxis, Option<f32>)>

If the widget takes one axis from its content’s preferred size, returns that axis and the step its measurement is rounded up to. See crate::Intrinsic.
Source§

fn overflow_box(&self) -> Option<Overflow>

If the widget lays its child out to constraints of its own, which the child may exceed, returns them. See crate::OverflowBox.
Source§

fn constraints_transform(&self) -> Option<ConstraintsTransform>

The box this widget gives its child as a function of the box it was offered, with the child laid out in it separately and the box then sized to what came back. None — the default — means the child shares this node’s layout, as everything ordinary does. See crate::ConstraintsTransformBox.
Source§

fn animated_size(&self) -> Option<SizeAnimation>

If the box this widget’s constraints_transform makes follows its child’s size over time rather than at once, how (milestone 594). See crate::AnimatedSize.
Source§

fn size_factor(&self) -> Option<(f32, f32)>

If the box this widget’s constraints_transform makes is a multiple of its child’s size — (across, down), 1 for as big as the child — the multiples (milestones 596 and 597). See crate::SizeTransition and crate::Aligned::width_factor.
Source§

fn clips_to_box(&self) -> bool

Whether the box this widget’s constraints_transform makes cuts its child to itself. A reveal does; an anchor with a factor lets its child spill (milestone 597).
Source§

fn layout_builder(&self) -> Option<&dyn Fn(Size) -> Box<dyn Widget<Msg>>>

If the widget builds its content from its actual box, returns the size → widget factory. The content is built on the fly: no retained state and no overlay (like a virtualised list item).
Source§

fn scroll_overlay(&self) -> Option<&OverlayBuilder<Msg>>

If the widget draws something over its scroll region, returns the offset → overlay factory. See crate::ScrollOverlay. Read more
Source§

fn scroll_axis(&self) -> Axis

SingleChildScrollView axis (or axes), for a scrollable container.
Source§

fn scroll_physics(&self) -> Option<ScrollPhysics>

The edge and fling behaviour of a scrollable container, when this widget wants one in particular. None — the usual answer — leaves the choice to the application, which defaults to what the platform does.
Source§

fn scrollbars(&self) -> Option<Scrollbars>

Whether this area draws a scrollbar, when it wants its own answer rather than the application’s. None — the default — follows the application, which follows the platform. See crate::Scrollbars.
Source§

fn thumb_visibility(&self) -> Option<bool>

Keep this area’s scrollbar on screen, instead of letting it fade away when the area stops moving (scrollbar.dart:214). Read more
Source§

fn overlay(&self) -> Option<(&dyn Widget<Msg>, Placement)>

If the widget is a portal, returns its floating content and its placement.
Source§

fn overlay_dismiss(&self) -> Option<Msg>

Message emitted when the scrim of a modal is clicked (dismissal), if any.
Source§

fn overlay_scrim(&self, _theme: &Theme) -> Option<Color>

The colour of the scrim behind this widget’s modal overlay, when it wants one in particular. None — the usual answer — leaves it to the scheme’s scrim role at the framework’s own opacity. Read more
Source§

fn overlay_traps_focus(&self) -> bool

If true, this widget’s anchored overlay (a menu…) traps focus: Tab and the arrow keys cycle within its focusables while it is open (the keyboard pattern of menus). Modal (scrimmed) overlays already trap by default; a tooltip or an autocomplete list (focus stays on the field) do not. Default: false.
Source§

fn anim_target(&self) -> Option<f32>

Target of the widget’s own animated value (e.g. 1.0 for a switch that is on, 0.0 for off). The runtime drives the retained value towards this target and hands it back through Status::value. None = no animated value.
Source§

fn anim_transform(&self) -> Option<TransformValues>

Target transform of an animated one (Transform::animated): the runtime tweens the scales and the turn through anim_duration/anim_curve and hands the interpolated value back through Runtime::anim_transform, which the paint walk reads in place of the static transform_scale/transform_rotate. None = the transform does not move. Read more
Source§

fn anim_duration(&self) -> f32

Duration (seconds) of the animated value’s transition (anim_target). Default: the framework’s standard duration.
Source§

fn anim_curve(&self) -> Curve

Easing curve of the animated value’s transition (anim_target). Default: linear.
Source§

fn opacity_group(&self) -> Option<f32>

If the widget is an opacity group, returns the (target) opacity [0,1] applied to its whole subtree as one: the paint walk wraps its primitives in a composited layer at that opacity — no double-blending where they overlap. None = not a group. Combined with anim_target, the opacity animates (a group fade).
Source§

fn anim_color(&self) -> Option<Color>

Target background colour of an animated background (Container::animated_color): the runtime tweens it (through anim_duration/anim_curve) and hands the interpolated value back in Status::anim_color. None = no animated colour.
Source§

fn anim_size(&self) -> Option<Size>

Target size of an animated size (Container::animated_size): the runtime tweens it (through anim_duration/anim_curve) and the interpolated size is injected at layout (see effective_style). None = fixed size.
Source§

fn anim_radius(&self) -> Option<BorderRadius>

Target corner radius of an animated radius (Container::animated_radius): the runtime tweens it and hands the interpolated value back in Status::anim_radius. None = fixed radius.
Source§

fn anim_padding(&self) -> Option<Insets>

Target padding of an animated padding (Container::animated_padding): the runtime tweens it and the interpolated padding is injected at layout (see effective_style). None = fixed padding.
Source§

fn anim_offset(&self) -> Option<(f32, f32)>

The pair of fractions this node’s offset rule is made of, animated: an alignment’s two fractions, or a slide’s. None — the default — leaves the rule reading the widget’s own numbers. Read more
Source§

fn anim_pins(&self) -> Option<Positioning>

Target pins of an animated stack layer (crate::AnimatedPositioned): the runtime tweens them and the interpolated pins are read where the stack lays its layers out. None — the default — leaves Widget::positioned alone. Read more
Source§

fn anim_fractions(&self) -> Option<(Option<f32>, Option<f32>)>

Target fractions of an animated share of the parent (FractionallySizedBox::animated), as (width factor, height factor): the runtime tweens them and the interpolated pair is injected at layout (see effective_style), like the size and the padding. None = fixed factors. Read more
Source§

fn anim_text_style(&self) -> Option<TextStyle>

Target text style an animated subtree is heading for (AnimatedDefaultTextStyle). None = the subtree inherits whatever it inherits. Read more
Source§

fn alignment_geometry(&self) -> Option<AlignmentGeometry>

Alignment of the single child within the box: the walk offsets the child through the free space according to the alignment’s fractions, resolved against the reading direction (physical or directional — see frus_core::AlignmentGeometry). Being continuous, a Tween<Alignment> read in view() slides the child. None = default flex placement.
Source§

fn transform_translate(&self) -> Option<(f32, f32)>

Paint offset (dx, dy) applied to the widget’s whole subtree: the render and the hit-test are offset without touching layout (siblings do not move, the child may overflow its box). Continuous → a Tween read in view() slides the subtree. None = no offset. See crate::Transform.
Source§

fn translate_fraction(&self) -> Option<(f32, f32)>

Paint offset as a fraction of the child’s own size (fx, fy): (0.5, 0.0) slides the subtree half its own width to the right. Added to Widget::transform_translate, and offsetting the render and the hit-test the same way, without touching layout. None = no offset. Read more
Source§

fn transform_scale(&self) -> Option<(f32, f32, Alignment)>

Paint scaling (sx, sy, pivot) of the whole subtree: the render and the hit-test are scaled — per axis — around the pivot (a frus_core::Alignment within the box), without touching layout. Stays axis-aligned (a scaled rect is still a rect). None = no scaling. See crate::Transform.
Source§

fn transform_rotate(&self) -> Option<(f32, Alignment)>

Paint rotation (angle, pivot) of the whole subtree: the subtree is painted rotated by angle radians (clockwise) around the pivot (a frus_core::Alignment within the box), without touching layout. The render goes through a rotated composited layer; the hit-test counter-rotates the point. None = no rotation. See crate::Transform.
Source§

fn clip_shape(&self) -> Option<ClipShape>

Shape clip of the whole subtree: the paint walk wraps its primitives in a composited layer whose frus_core::ClipShape (rounded corners, ellipse) modulates the alpha — whatever falls outside the shape is erased, edges antialiased. None = no shape clip. See crate::ClipRRect, crate::ClipOval.
Source§

fn style_themed(&self, _theme: &Theme) -> Style

The widget’s style once the theme has had its say — the layout half of the caller ?? theme ?? framework chain. Read more
Source§

fn theme_override(&self, _inherited: &Theme) -> Option<Box<Theme>>

The theme this widget imposes on itself and its subtree, given the one it inherits. None — the default — means “whatever came down from above”, which is what every widget but crate::Themed answers. Read more
Source§

fn media_override(&self, _inherited: MediaQuery) -> Option<MediaQuery>

The surface this widget imposes on itself and its subtree, given the one it inherits. None — the default — means “whatever came down from above”, which is what every widget but MediaScope answers. Read more
Source§

fn scaffold_override(&self) -> Option<ScaffoldInfo>

The shell this widget imposes on its subtree: what a Scaffold knows about itself and its slots do not. Read more
Source§

fn scroll_behavior_override(&self) -> Option<ScrollBehavior>

The ScrollBehavior this widget puts in force for its subtree, or None — the default — for whatever came down from above. Only ScrollConfiguration answers otherwise. Applied by the same four walks as Self::scaffold_override: the scrollables under it record what it decides when they are registered (milestone 616).
Source§

fn build_themed(&self, _theme: &Theme)

Builds this widget’s subtree from the ambient theme, for the widgets that defer that decision — see ThemeBuilder. Does nothing by default, which is what all but a handful of widgets want. Read more
Source§

fn build_in(&self, _id: WidgetId, _runtime: &Runtime, theme: &Theme)

Self::build_themed, for the few widgets that also need who they are and what the frame remembers to compose their subtree. An AnimatedSwitcher keeps what it is letting go of in the runtime, under its own identity, and that is reachable nowhere else before its children are read. Read more
Source§

fn expand(&self, _id: WidgetId, _runtime: &Runtime, _theme: &Theme)

Builds what this node stands for, before anything else is asked of it. Read more
Source§

fn switches(&self) -> bool

Whether this node is an AnimatedSwitcher. An identity is a position, so a switcher and the widget that comes to stand where it stood have the same one: this is how the runtime tells the switcher still being there from its having gone, and forgets what it kept for it.
Source§

fn system_ui_style(&self) -> Option<SystemUiOverlayStyle>

What the system bars over this widget should look like — see AnnotatedRegion. None for every widget but that one; a transparent wrapper forwards it, or a keyed region would say nothing.
Source§

fn ink(&self, _theme: &Theme) -> Option<InkStyle>

If the widget takes ink — the splash a tap leaves on a material surface — the shape and colour to splash in. None = no ink, which is the default: a widget has to ask. Read more
Source§

fn foreground(&self, _theme: &Theme) -> Option<BoxDecoration>

A decoration painted over this widget’s children rather than behind them: the reference’s foregroundDecoration. Read more
Source§

fn layer_filter(&self, _cx: FilterContext) -> Option<LayerFilter>

The pixel effects this widget applies to its whole subtree: a blur, a colour transform, a mask, or a filter over what is painted underneath. The paint walk drains the subtree into a composited layer and hands the filter to the renderer, exactly as it does for an opacity group or a shape clip. Read more
Source§

fn backdrop_group(&self) -> bool

true when this widget is a backdrop group: the backdrops below it that ask to be shared are filtered once between them. See crate::BackdropGroup.
Source§

fn text_baseline(&self, _theme: &Theme) -> Option<f32>

The widget’s own text baseline: the distance from the top of its box down to the line its letters sit on. None — the default — means this widget has no text of its own, and whatever is inside it answers instead. Read more
Source§

fn ignores_baseline(&self) -> bool

true when this subtree should be left out of a parent’s baseline alignment: it has a baseline, and the parent is to pretend it does not. An icon beside a label, where the label is what the row should line up on. See crate::IgnoreBaseline.
Source§

fn main_axis_floor(&self, _theme: &Theme) -> Option<f32>

The width below which this widget must not be squeezed when its parent runs horizontally — a line of text that would rather run past the end of a row than be folded into a column of single words. None means squeeze freely. Read more
Source§

fn tile_shape(&self) -> Option<f32>

If this container gives all of its children the shape of a tile, the width / height ratio to impose on each of them. None = each child keeps its own shape. Read more
Source§

fn positioned(&self) -> Option<Positioning>

If this is a layer pinned against its crate::Stack’s edges (crate::Positioned), what it pins. None = an ordinary layer, sized and placed by the stack’s own fit and alignment. Read more
Source§

fn stack_fit(&self) -> StackFit

How this stack sizes its unpinned layers (crate::StackFit). Unset, Passthrough: each is handed the stack’s box, and one with a size of its own keeps it. Meaningless unless Widget::stack is true.
Source§

fn stack_measured(&self) -> bool

Whether this stack is as big as its largest unpinned layer (milestone 639), as crate::Stack is, rather than the size its own style says. Meaningless unless Widget::stack is true.
Source§

fn stack_clips(&self) -> bool

Whether this stack cuts its layers at its edges. Unset, it does.
Source§

fn stack_direction(&self) -> Option<TextDirection>

The reading direction this stack resolves its alignment and its layers’ start and end pins in, when it names one. Unset, the theme’s.
Source§

fn stack_visible(&self) -> Option<usize>

Which layer of this stack is shown: the one at that index paints and takes input, and every other one is laid out and then silenced — not drawn, not clickable, not read out. None, the default, shows all of them. Read more
Source§

fn keep_visible(&self, _size: Size, _theme: &Theme) -> Option<KeepVisible>

The box this widget asks the scroll region around it to keep in view, in its own coordinates, with a key naming which box it is. Read more
Source§

fn scroll_reverse(&self) -> bool

Whether this scrollable runs from the far end (crate::SingleChildScrollView::reverse): the content is anchored to the end of the viewport and offsets are counted from there. Meaningless unless Widget::scroll_content is Some.
Source§

fn scroll_padding(&self) -> Insets

The insets a scrollable area puts around its content, inside the viewport. Read more
Source§

fn baseline_target(&self) -> Option<f32>

If the widget positions its child by the child’s baseline (crate::Baseline), the distance from the top of this box at which that baseline should land. None = not a baseline box.
Source§

fn clip_path(&self) -> Option<&Path>

If the widget clips its child to an arbitrary path (ClipPath), returns the path in local coordinates (origin at the box’s top-left corner). The walk offsets it to the screen and wraps it in a layer whose mask (the path) erases the outside. Takes priority over Widget::clip_shape. None = no path clip. See crate::ClipPath.
Source§

fn dismissible(&self) -> Option<DismissSpec>

If the widget is a dismissible item (crate::Dismissible), its configuration for this frame. The shell gives a mostly-sideways drag on it to the dismissal and a mostly-up-and-down one to the enclosing scrollable. None = not dismissible.
Source§

fn on_dismissed(&self, _direction: DismissDirection) -> Option<Msg>

The message a dismissed item dispatches, once it has flown out and its gap has closed. None = the swipe is shown but removes nothing.
Source§

fn sheet(&self) -> Option<&SheetSpec>

If the widget is the moving panel of a crate::DraggableScrollableSheet, its configuration for this frame. The layout makes it as tall as the retained height, and the shell shares a finger on it between the sheet and the scroll areas inside. None = not a sheet.
Source§

fn on_sheet_dismissed(&self) -> Option<Msg>

The message a sheet dispatches once it has been lowered to nothing. None = it cannot be dismissed, or says nothing when it is.
Source§

fn refresh(&self) -> Option<RefreshSpec>

If the widget is a refresh area (crate::RefreshIndicator), its configuration for this frame. Any scrollable inside it routes the movement its physics refuses at the top edge into the pull, instead of into the overscroll glow. None = not a refresh area.
Source§

fn on_refresh(&self) -> Option<Msg>

The message a refresh area dispatches when an armed pull is released. None = the pull is shown but asks for nothing, which is what an area still waiting for its on_refresh looks like.
Source§

fn barrier(&self) -> Option<ModalBarrier>

What the widget withholds from the frame on behalf of its whole subtree: input targets, primitives, accessibility nodes. The walk visits the subtree normally and then discards whatever it added to the selected registries, so a target registered deep inside is caught just as surely as one at the top. None = nothing withheld (the default). See crate::ModalBarrier, crate::IgnorePointer, crate::AbsorbPointer, crate::Visibility, crate::ExcludeSemantics.
Source§

fn interactive(&self) -> Option<(f32, f32)>

If the widget is an interactive viewport (InteractiveViewer), returns its scale bounds (min, max). The paint walk renders its child in a transformed layer (retained scale + translation, clipped to the viewport); the shell routes drag → pan and wheel/pinch → zoom. None = not an interactive viewport. See crate::InteractiveViewer.
Source§

fn fitted(&self) -> Option<BoxFit>

If the widget fits its child to its box (FittedBox), returns the frus_core::BoxFit: the walk measures the child at its natural size, scales it according to the fit and centres it (composited layer, hit-test through M⁻¹). None = not a fitter. See crate::FittedBox.
Source§

fn rotated_quarter_turns(&self) -> Option<i32>

If the widget rotates its child by quarter turns (RotatedBox), returns the number of quarters. Unlike Transform, this affects layout: the box swaps its dimensions for an odd number. None = not a RotatedBox. See crate::RotatedBox.
Source§

fn navigator(&self) -> Option<(f32, bool)>

If the widget is a screen navigator, returns (progress, push?). Its children ([screen] or [outgoing, incoming]) are rendered full-window with a sliding transition.
Source§

fn navigator_gesture(&self) -> bool

Whether a finger drives the navigator’s transition — a back gesture — so that it follows the finger linearly (milestone 620).
Source§

fn navigator_clips(&self) -> bool

Whether a navigator clips its pages to its own box. true, which is the reference’s default (Clip.hardEdge) and the only sane one: a screen sliding in comes from outside the box and has to stop at its edge. Read more
Source§

fn navigator_retained(&self) -> usize

How many of a navigator’s first children are kept but not shown: the pages under the one on show. They are built, so what their components hold survives, and they are not laid out, drawn or given input. 0, the default, is a navigator that shows every page it holds.
Source§

fn on_long_press(&self) -> Option<Msg>

Message emitted by a long press (a press held ~500 ms without movement). The long press pre-empts the click: the release that follows does not emit on_click.
Source§

fn on_double_tap(&self) -> Option<Msg>

Message emitted by a double tap: two taps on this widget in quick succession (within 300 ms and 100 px of each other, the reference’s numbers). While one is possible, a first tap’s on_click waits out those 300 ms, so that the second tap of a double tap is not also a tap.
Source§

fn on_secondary_tap(&self) -> Option<Msg>

Message emitted by a secondary tap: a click of the secondary mouse button, usually the right one.
Source§

fn pointer_listener(&self) -> bool

Whether this widget hears the pointer’s raw events (milestone 586): a press inside it, and then that pointer wherever it goes until it lifts; and a mouse’s hover.
Source§

fn on_pointer_event(&self, _event: ListenerEvent) -> Vec<Msg>

The messages for one raw event of the pointer, on a widget that is a pointer_listener. Several, when listeners wrap each other at the same place.
Source§

fn hover_region(&self) -> Option<HoverRegion>

Whether this widget is a region the mouse enters and leaves (milestone 583), and how: the cursor it asks for while the pointer is over it, and whether it hides the regions behind it. None for anything that is not one.
Source§

fn on_hover_event(&self, _event: HoverEvent) -> Option<Msg>

Message for the pointer entering, moving over or leaving this region — one whose hover_region is set.
Source§

fn pan_axis(&self) -> Option<PanAxis>

Which way this widget takes a drag, if it takes one at all (milestone 582): the shell then reports it through on_pan. Inside a scroll, a drag along the scroll’s axis stays the scroll’s unless this axis claims it.
Source§

fn on_pan(&self, _event: PanEvent) -> Option<Msg>

Message for one moment of a drag — its start, a movement, its end — on a widget whose pan_axis is set.
Source§

fn wants_title_bar(&self) -> bool

Whether this widget wants the title bar’s line for itself (milestone 640): a WindowMenuBar’s row. The shell gives it the line where the system allows it.
Source§

fn title_bar_role(&self) -> Option<TitleBarRole>

What this widget is to the system on the title bar’s line, which acts on it: the window’s icon or its three buttons (milestone 640).
Source§

fn pan_value(&self, _event: PanEvent, _value: f32, _rtl: bool) -> Option<f32>

A drag that moves this widget’s own animated value (anim_target) — a switch’s thumb following the finger (milestone 638). Given a moment of the drag, the value now and whether the text runs right to left, the value to hold it at; None leaves it alone. The shell holds the value there while the finger is down, and when it lifts lets it settle from there, asking on_value_release what that means.
Source§

fn on_value_release(&self, _value: f32) -> Option<Msg>

Message for a drag that moved this widget’s value letting go at value — a switch flips when its thumb was let go past half way (milestone 638).
Source§

fn on_key(&self, _key: &Key) -> KeyResponse<Msg>

Key received while bubbling leaf→root: the focused widget gets it first, then each ancestor as long as the response is Ignored. (E.g. an OverlayPortal consumes Escape to close itself.)
Source§

fn measure(&self, _theme: &Theme) -> Option<MeasureFn<'_>>

Measure under constraints: for a widget whose size depends on the space offered (a paragraph that wraps…), returns the closure wired into taffy. None = size fixed by style(). Contract: must be Some if and only if Widget::measure_key is. Read more
Source§

fn measure_key(&self, _theme: &Theme) -> Option<u64>

Fingerprint of the content Widget::measure depends on (text, style…), mixed into the relayout fingerprint: without it, two different contents with the same style would be conflated by the cache and would keep a stale geometry. Contract: Some if and only if measure() is. Read more

Auto Trait Implementations§

§

impl<Msg = Callback> !Freeze for TextField<Msg>

§

impl<Msg = Callback> !RefUnwindSafe for TextField<Msg>

§

impl<Msg = Callback> !Send for TextField<Msg>

§

impl<Msg = Callback> !Sync for TextField<Msg>

§

impl<Msg = Callback> !UnwindSafe for TextField<Msg>

§

impl<Msg> Unpin for TextField<Msg>
where Option<Box<dyn Fn(String) -> Msg>>: Unpin, Option<Msg>: Unpin, Option<Box<dyn Fn(&ToolbarContext, Vec<ToolbarItem<Msg>>) -> Vec<ToolbarItem<Msg>>>>: Unpin, [OnceCell<Option<Box<dyn Widget<Msg>>>>; 8]: Unpin,

§

impl<Msg> UnsafeUnpin for TextField<Msg>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<Msg> IntoMsg<Msg> for Msg

Source§

fn defer(work: impl Fn() -> Msg + 'static) -> Msg

The message that stands for work’s result.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.