pub struct AnyView<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 three or more arms, and
genuinely heterogeneous dynamic lists (see any). A two-arm branch is
written with either(..), which keeps both arms statically typed and does
not erase.
Implementations§
Trait Implementations§
Source§impl<State: 'static> View<State> for AnyView<State>
impl<State: 'static> View<State> for AnyView<State>
Source§fn build(&self, ctx: &mut BuildCtx<'_>) -> Self::Element
fn build(&self, ctx: &mut BuildCtx<'_>) -> Self::Element
Source§fn rebuild(
&self,
prev: &Self,
element: &mut Self::Element,
ctx: &mut BuildCtx<'_>,
) -> ChangeFlags
fn rebuild( &self, prev: &Self, element: &mut Self::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.