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§
Trait Implementations§
Source§impl<State> View<State> for AnyView<State>where
State: 'static,
impl<State> View<State> for AnyView<State>where
State: 'static,
Source§fn build(
&self,
ctx: &mut BuildCtx<'_>,
) -> <AnyView<State> as View<State>>::Element
fn build( &self, ctx: &mut BuildCtx<'_>, ) -> <AnyView<State> as View<State>>::Element
Source§fn rebuild(
&self,
prev: &AnyView<State>,
element: &mut <AnyView<State> as View<State>>::Element,
ctx: &mut BuildCtx<'_>,
) -> ChangeFlags
fn rebuild( &self, prev: &AnyView<State>, element: &mut <AnyView<State> as View<State>>::Element, ctx: &mut BuildCtx<'_>, ) -> ChangeFlags
prev (the previous view of the same type) against the live
element, mutating it in place and reporting what changed.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>
impl<State> Unpin for AnyView<State>
impl<State> UnsafeUnpin for AnyView<State>where
Box<dyn ErasedView<State>>: UnsafeUnpin,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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.impl<T> ErasedDestructor for Twhere
T: 'static,
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> ⓘ
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> StorageAccess<T> for T
impl<T> StorageAccess<T> for T
Source§fn as_borrowed(&self) -> &T
fn as_borrowed(&self) -> &T
Source§fn into_taken(self) -> T
fn into_taken(self) -> T
Source§impl<State, V> ViewSeq<State, One> for Vwhere
State: 'static,
V: View<State>,
impl<State, V> ViewSeq<State, One> for Vwhere
State: 'static,
V: View<State>,
Source§fn extend_views(self, out: &mut Vec<AnyView<State>>)
fn extend_views(self, out: &mut Vec<AnyView<State>>)
out — erasing each
with AnyView::new (a no-op for an element already an AnyView).