Skip to main content

AnyView

Struct AnyView 

Source
pub struct AnyView<State>
where State: 'static,
{ /* private fields */ }
Expand description

A type-erased View: lets a piece of UI change its concrete view type between frames (e.g. a conditional if cond { text(..) } else { button(..) }) while still fitting the statically-typed rebuild machinery.

Rebuild follows the xilem AnyView pattern: the previous view is downcast to detect whether the concrete type is unchanged. Same type → a typed in-place rebuild; different type → the old widget is torn down and a fresh one built and swapped in (signalling LAYOUT | PAINT). Its Element is a Box<dyn Widget>, which implements Widget through the blanket impl so it satisfies View::Element: Widget.

Erasure is idempotent, and the generic builders (child, tuples such as Column((a, b)), ..) accept any View and erase internally, so app code needs AnyView only for stored views, branches of more than eight arms, and genuinely heterogeneous dynamic lists (see any). Branches are written with either(..) (two arms) or EitherOf3..EitherOf8 (three to eight), which keep every arm statically typed and do not erase.

Implementations§

Source§

impl<State> AnyView<State>
where State: 'static,

Source

pub fn new<V>(view: V) -> AnyView<State>
where V: View<State>,

Erase view into an AnyView.

Erasure is idempotent: if view is already an AnyView<State>, it is returned unchanged — any(any(v)) and AnyView::new(any_view) do not box twice.

Trait Implementations§

Source§

impl<State> View<State> for AnyView<State>
where State: 'static,

Source§

type Element = Box<dyn Widget>

The retained widget this view produces.
Source§

fn build( &self, ctx: &mut BuildCtx<'_>, ) -> <AnyView<State> as View<State>>::Element

Materialise a fresh widget for this view.
Source§

fn rebuild( &self, prev: &AnyView<State>, element: &mut <AnyView<State> as View<State>>::Element, ctx: &mut BuildCtx<'_>, ) -> ChangeFlags

Reconcile prev (the previous view of the same type) against the live element, mutating it in place and reporting what changed.
Source§

fn teardown( &self, element: &mut <AnyView<State> as View<State>>::Element, ctx: &mut BuildCtx<'_>, )

Tear down element when this view is being removed. Read more
Source§

fn message(&self, _element: &mut Self::Element, _state: &mut State)

Deliver an event message to this view, mutating application state. Read more

Auto Trait Implementations§

§

impl<State> !RefUnwindSafe for AnyView<State>

§

impl<State> !Send for AnyView<State>

§

impl<State> !Sync for AnyView<State>

§

impl<State> !UnwindSafe for AnyView<State>

§

impl<State> Freeze for AnyView<State>
where Box<dyn ErasedView<State>>: Freeze,

§

impl<State> Unpin for AnyView<State>
where Box<dyn ErasedView<State>>: Unpin,

§

impl<State> UnsafeUnpin for AnyView<State>
where Box<dyn ErasedView<State>>: UnsafeUnpin,

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> Downcast for T
where T: Any,

Source§

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>

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)

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)

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> ErasedDestructor for T
where T: 'static,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T, S> SimdFrom<T, S> for T
where S: Simd,

Source§

fn simd_from(_simd: S, value: T) -> T

Source§

impl<F, T, S> SimdInto<T, S> for F
where T: SimdFrom<F, S>, S: Simd,

Source§

fn simd_into(self, simd: S) -> T

Source§

impl<T> StorageAccess<T> for T

Source§

fn as_borrowed(&self) -> &T

Borrows the value.
Source§

fn into_taken(self) -> T

Takes the value.
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.
Source§

impl<State, V> ViewSeq<State, One> for V
where State: 'static, V: View<State>,

Source§

fn extend_views(self, out: &mut Vec<AnyView<State>>)

Push every element of this sequence, in order, onto out — erasing each with AnyView::new (a no-op for an element already an AnyView).
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more