Las animaciones suelen aumentar el atractivo visual de una aplicación o sitio web y mejoran la participación general de los usuarios. Según un estudio de Forrester Research, los sitios web con animaciones bien ejecutadas experimentan un aumento en la participación de los usuarios de hasta un 400 %. Las animaciones atractivas pueden captar la atención de los usuarios y alentarlos a interactuar más con la plataforma. Sin embargo, existe una curva de aprendizaje para que los desarrolladores dominen la animación, especialmente cuando trabajan con herramientas y técnicas de animación más avanzadas.
Comprender Rive como desarrollador sin experiencia en animación puede ser relativamente fácil en comparación con otras herramientas o marcos de animación. Rive (anteriormente conocido como Flare) está diseñado para ser fácil de usar y accesible para los desarrolladores, incluso para aquellos con poca o ninguna experiencia previa en animación. En este artículo, aprenderá cómo crear animaciones Rive sencillas e impresionantes con facilidad y cómo administrarlas en su aplicación Flutter.
Introducción a Rive🧙♂️
Una animación de inicio de sesión interactiva simple🚀
Conclusión 🏋️♀️
Referencias🧶
Rive es una herramienta de animación potente y fácil de usar y un motor de tiempo de ejecución que permite a los desarrolladores y diseñadores crear animaciones impresionantes e interactivas para varias plataformas, incluidas aplicaciones móviles, aplicaciones web y juegos.
Estos son los conceptos clave:
Pasaremos por el proceso de crear una animación de inicio de sesión simple y exportarla a nuestra aplicación Flutter. Usaremos StateMachine para administrar la interactividad de esta animación en la aplicación. Al final, debería verse así 👇🏽
Siga los pasos a continuación para configurar el elemento en la mesa de trabajo de Rive:
A continuación, vendaremos nuestros huesos y los pesaremos. La unión asegura que cuando un hueso se mueve, las partes correspondientes de la superficie del personaje se mueven en consecuencia, creando la ilusión de deformación. La ponderación, también conocida como ponderación de vértices, implica asignar valores de influencia (pesos) a cada vértice de la malla del personaje en función de su proximidad a huesos específicos. Navegaremos a la ruta de la forma que estaríamos enlazando. Para el cuello, así es como lo unimos al hueso del cuello.
Después de unir los huesos, establecemos los vértices asignándoles pesos. Aquí, observe que hemos puesto el último conjunto de vértices al 50% porque queremos que los dos huesos tengan un efecto del 50% sobre ellos. Debe usar el 50%, especialmente cuando los vértices establecidos cubren una sección que afecta a los dos huesos. Ahora, haríamos lo mismo con el camino del cabello. También cambiaremos los huesos izquierdo y derecho de uno a dos huesos para ayudarnos a lograr el movimiento fluido que queremos para el cabello.
Nos gustaría tener un efecto de parpadeo en esta animación, para lograrlo, usaremos la función de clip en las dos formas de ojos como esta 👇🏽
A continuación, agregaremos el seguimiento de la cabeza mediante restricciones de traducción a este elemento porque queremos mover la cabeza durante la animación. Dado que es un elemento 2d, agregar restricciones de traducción le dará profundidad y algún tipo de efecto 3d. Selecciona todo y agrúpalo. Ahora tenemos un solo grupo.
Luego, en la esquina superior izquierda, seleccione la herramienta de grupo y cree un grupo en el centro de la cabeza (en el área de la nariz). En la barra de herramientas de la derecha, cambie su estilo de grupo a destino, asígnele el nombre ctrl_front, duplíquelo y nombre el duplicado ctrl_back.
Para el objetivo ctrl_back, seleccione la opción de restricciones en la barra de herramientas de la derecha. Elija restricciones de traducción de la lista de opciones de restricciones disponibles. Haga clic en el icono antes de la opción de restricción seleccionada para establecer sus propiedades.
Establezca la fuerza en -100 y establezca su objetivo en ctrl al frente. Ahora, cuando mueve el Ctrl hacia adelante, el Ctrl hacia atrás se mueve en la dirección opuesta. Nos ayudará a establecer restricciones para partes de la cara que deben moverse en una dirección opuesta, como las orejas. Debería verse así 👇🏽
Ahora estableceremos restricciones para el resto de la cara. También agruparemos los ojos (izquierdo y derecho) y los oídos (izquierdo y derecho) para ayudarnos a manejarlos mejor. Estableceremos restricciones para los ojos así 👇🏽
Grupo | Fuerza de la restricción | Posición de origen | Objetivo |
---|---|---|---|
anteojos | 5% | igual que el origen de ctrl_front | ctrl_frente |
cejas | 10% | igual que el origen de ctrl_front | ctrl_frente |
orejas | 5% | no es necesario establecer el origen | ctrl_atrás |
nariz | 5% | igual que el origen de ctrl_front | ctrl_frente |
rostro | 5% | igual que el origen de ctrl_front | ctrl_frente |
No necesitamos establecer restricciones para los labios.
Así es como se ve después de que terminamos de agregar todas nuestras restricciones 👇🏽
💃🏽 🥳 Felicitaciones, hemos logrado que nuestro elemento esté listo para el tipo de animación que queremos lograr. ¡¡Uf!!
En la barra de herramientas de la derecha, haga clic en el botón Animar para cambiar a la interfaz de animación. Crearemos seis líneas de tiempo de animación y vincularemos todo con una máquina de estado. En la línea de tiempo, usando lo que hemos configurado previamente con huesos y restricciones, podemos establecer fotogramas clave para crear la animación que queremos lograr.
La primera animación de la línea de tiempo es la animación inactiva. Será el estado inactivo de la animación. Usaremos esto cuando el elemento animado no esté activado.
Para esta animación inactiva, crearemos una ilusión de respiración, un ligero movimiento del cabello y un parpadeo. Usando el hueso del cuello, los huesos del cabello y los elementos del ojo derecho/izquierdo, estableceremos los fotogramas clave necesarios en diferentes poses, lo que significa que podemos establecer las propiedades específicas del elemento seleccionado en los puntos de la línea de tiempo. Teniendo en cuenta el estilo de transición de un fotograma clave al siguiente, elegiremos el tipo de interpolación que necesitamos. Puede encontrarlo en la parte inferior derecha de la sección Línea de tiempo. La interpolación es sostenida, lineal o curva, según cómo desee pasar de un fotograma clave al siguiente. Se verá así 👇🏽
En el gif anterior, puede notar que en los diferentes fotogramas clave en la línea de tiempo, hemos establecido diferentes poses para los elementos seleccionados. Esta transición de un fotograma clave al otro forma la animación. Usando este mismo procedimiento, crearemos las otras cinco líneas de tiempo. Puede hacer clic aquí para ver esta animación y ver las diferentes líneas de tiempo en detalle. Se parece a esto 👇🏽
Hemos llegado a la parte final de este proceso de animación. Una máquina de estado es una forma visual de conectar la animación. Usando la máquina de estado, podemos controlar qué animación se reproduce en función de la entrada que configuramos. Podemos mezclar o combinar dos o más animaciones de línea de tiempo para que se reproduzcan simultáneamente. Debemos seleccionar el tipo correcto de entradas en la máquina de estado porque esto es lo que usaremos para controlar la animación en la aplicación.
En la máquina de estado, tenemos tres tipos de entradas:
En el panel Animación, haga clic en el botón más y cree una máquina de estado. Lo llamaremos Máquina de estado de inicio de sesión . Este nombre es importante porque es lo que necesitaremos para identificar nuestra máquina de estado más adelante en el código.
Siga los pasos a continuación para configurar su máquina de estado:
Ahora la animación completa en máquina de estado se verá así 👇🏽
Vea la animación completa y la máquina de estado aquí .
¡Felicitaciones 🥳, animamos con éxito nuestro elemento y lo configuramos con una máquina de estado! Sin embargo, antes de exportar el archivo rive, cambiaremos el fondo y los colores de la camiseta del personaje. Se verá así 👇🏽
El color de fondo es (#B581EB) y el color de la camisa del personaje es (#BD08D7)
Aquí está el enlace a la animación para ver todo en detalle.
Usaremos esta animación en nuestra página de inicio de sesión. Cree un proyecto de aplicación Flutter y agregue la dependencia de Rive a pubspec.yaml
dependencies: rive: ^0.11.12
Además, agregue el archivo Rive exportado a los activos de su proyecto. Ahora podemos seguir adelante para crear la interfaz de usuario basada en nuestro diseño. Nuestro objetivo es que la animación haga lo siguiente:
Primero definiremos algunas cosas antes de la función Widget Build.
///Login details String emailCred = "[email protected]"; String passwordCred = "123456"; /// input form controller FocusNode emailFocusNode = FocusNode(); TextEditingController emailCtr = TextEditingController(); FocusNode passwordFocusNode = FocusNode(); TextEditingController passwordCtr = TextEditingController(); /// rive controller and input values StateMachineController? controller; SMIInput<bool>? check; SMIInput<double>? look; SMIInput<bool>? success; SMIInput<bool>? fail; bool isLoading = false; bool isError = false; @override void initState() { emailFocusNode.addListener(emailFocus); passwordFocusNode.addListener(passwordFocus); super.initState(); } @override void dispose() { emailFocusNode.removeListener(emailFocus); passwordFocusNode.removeListener(passwordFocus); super.dispose(); } void emailFocus() { check?.change(emailFocusNode.hasFocus); } void passwordFocus() { check?.change(passwordFocusNode.hasFocus); }
Aquí, podemos señalar lo siguiente:
emailFocus
y passwordFocus
, la entrada de verificación se cambia en función del booleano FocusNode.hasFocus
initState
y dispose
, vemos que los oyentes se agregan y eliminan. Los oyentes están acostumbrados a escuchar el cambio de enfoque.
Puede consultar el código de UI y el resto del código aquí . Este fragmento de código muestra cómo agregar el RiveAsset:
SizedBox( height: 250, width: 250, child: RiveAnimation.asset( "assets/login_screen.riv", fit: BoxFit.fitHeight, stateMachines: const ["Login State Machine"], onInit: (artboard) { controller = StateMachineController.fromArtboard( artboard, "Login State Machine", ); if (controller == null) return; artboard.addController(controller!); check = controller?.findInput("check"); look = controller?.findInput("look"); success = controller?.findInput("success"); fail = controller?.findInput("fail"); }, ), ),
Del código anterior, podemos notar lo siguiente:
Aquí está el código para la función de inicio de sesión:
void login()async{ //extract the text coming from the text fields final email = emailCtr.text; final password = passwordCtr.text; //Set loading boolean to true and delay to give an illusion of loading setState(() { isLoading = true; }); await Future.delayed( const Duration(milliseconds: 2000), ); // check if details entered is the same as the correct creditials defined if (email == emailCred && password == passwordCred) { //if correct trigger the success input and set error boolean to false success?.change(true); setState(() { isError = false; }); if(context.mounted){ // delay and navigate to home screen await Future.delayed( const Duration(seconds: 2),(){ Navigator.push(context, MaterialPageRoute(builder: (context) =>const HomeScreen())); }); } } else { // if details don't match defined credentials // set error boolean to true and trigger the fail input // set loading boolean to false setState(() { isError = true; }); fail?.change(true); } setState(() { isLoading = false; }); }
Consulta el código completo aquí .
Al hacer esto, hemos completado nuestro código de animación de inicio de sesión. Así es como se ve todo:
¡Felicidades! Hemos completado esta sencilla animación interactiva de inicio de sesión. Aquí hay una descripción general de todo lo que pudimos lograr:
Siguiendo este tutorial paso a paso, es posible que enfrente algunos cuellos de botella, pero será más fácil con la práctica. Puede comunicarse conmigo en Twitter o comentar si necesita ayuda mientras sigue este tutorial.
Consulte estos tutoriales en vídeo para comprender mejor la animación de Rive
También puede consultar el canal de Rive para ver varios tutoriales en video sobre animaciones de Rive.
Carácter de inicio de sesión animado
También publicado aquí .