pub struct Anim {
pub key: u64,
pub duration: Duration,
pub easing: fn(f32) -> f32,
pub enter: bool,
pub exit: bool,
pub enter_from_xf: Option<Affine>,
pub switch: Option<u64>,
}Expand description
Declara que las props visuales de paint de este nodo se animan de forma
implícita. key debe ser estable entre rebuilds del View (índice de
item, hash de id, etc.) — es lo que enlaza “el mismo nodo” entre frames.
Fields§
§key: u64§duration: Duration§easing: fn(f32) -> f32Easing aplicado a t ∈ [0,1]. Las canónicas viven en
llimphi_theme::motion; por defecto el builder usa un ease-out cúbico.
enter: booltrue si la primera aparición de la key debe animar la opacidad de
0 hacia su valor (fade-in de entrada, estilo AnimatedSwitcher). Las
animaciones de props (fill/radius/alpha) no entran por acá: sólo cambian
el arranque del primer frame. Sin él, la primera aparición se asienta
instantánea (default histórico de View::animated).
exit: booltrue si la salida de la key debe animar (fade-out): cuando el nodo
desaparece del árbol, el runtime retiene la última subescena que pintó y
la reproduce con opacidad decreciente durante duration, en vez de que
el nodo se esfume de golpe. Tiene coste por frame (captura el subárbol
mientras vive) — usar en pocos nodos (toasts, modales, paneles), no en
cada fila de una lista grande.
enter_from_xf: Option<Affine>Transformación afín desde la que arrancar la entrada (enter). Por
ej. Some(Affine::scale(0.6)) da el “pop” del FAB; Some(Affine:: translate((0.0, 60.0))) da slide-in vertical. Llega al target del nodo
(node.transform o identidad) en duration. Sin efecto si enter es
false. Combinable con el fade de entrada por defecto.
switch: Option<u64>Discriminador de variante de contenido para cross-fade real
(Flutter AnimatedSwitcher). Cuando es Some(v) y v cambia
entre frames bajo la misma key, el runtime promueve la subescena del
contenido anterior a fantasma (fade-out) y hace fade-in del nuevo, en
el mismo rect — una transición real entre dos identidades distintas, no
la combinación enter+exit de dos keys. Implica captura live por frame
(como exit). La primera aparición no cruza (sólo asienta la variante).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Anim
impl RefUnwindSafe for Anim
impl Send for Anim
impl Sync for Anim
impl Unpin for Anim
impl UnsafeUnpin for Anim
impl UnwindSafe for Anim
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> 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.