flutter_motionly 1.1.1
flutter_motionly: ^1.1.1 copied to clipboard
Colección de widgets animados personalizados para Flutter con efectos visuales modernos. Incluye botones con reveal effects, textos animados en cascada y indicadores circulares.
Changelog #
Todos los cambios notables en este proyecto serán documentados en este archivo.
El formato está basado en Keep a Changelog, y este proyecto adhiere a Semantic Versioning.
1.1.1 - 2025-01-20 #
Mejorado
Documentación
-
FlickTileBox: Documentación completa en el código fuente
- Documentación dartdoc detallada con descripción completa del widget
- Sección "Cómo funciona" explicando la mecánica del efecto
- Diagrama ASCII "Anatomía del efecto" mostrando el grid visual
- Sección de "Rendimiento" con optimizaciones y límites recomendados
- Sección de "Buenas prácticas" con consejos de uso
- 5 ejemplos completos de código: básico, matriz digital, minimalista, personalizado, reproducible
- Sección de "Parámetros avanzados" con explicaciones detalladas
- Documentación de las 12 propiedades con tipos, descripciones y rangos recomendados
- Clases internas documentadas:
_FlickTileBoxState,_TileData,_FlickTilePainter - Comentarios inline en métodos clave (
_initTiles,paint, etc.) - Referencias cruzadas a componentes relacionados
-
ParticleBox: Documentación completa en el código fuente
- Documentación dartdoc detallada con descripción completa del widget
- Sección "Cómo funciona" con 4 puntos clave
- Diagrama ASCII mostrando el área de animación con partículas
- Sección de "Rendimiento" con recomendaciones por tipo de dispositivo
- Sección de "Buenas prácticas" con 5 consejos esenciales
- 5 ejemplos completos de código: elegante, estrellas, energético, océano digital, contenedor personalizado
- Sección de "Interactividad" explicando el hover del mouse
- Documentación de las 7 propiedades con tipos, descripciones y rangos recomendados
- Clase
Particlecompletamente documentada con todas sus propiedades y métodos - Clase
ParticlePaintercon explicación de renderizado - Clase
_ParticleBoxStatecon comentarios en el ciclo de vida y actualización - Referencias cruzadas a componentes relacionados
Calidad del Código
- Estándares de documentación consistentes en ambos componentes
- Formato dartdoc profesional listo para pub.dev
- Ejemplos de código copy/paste integrados en la documentación
- Comentarios inline estratégicos para explicar lógica compleja
- Descripciones técnicas de optimizaciones aplicadas
Notas
- Esta versión se enfoca exclusivamente en mejorar la documentación del código
- No hay cambios en la funcionalidad o API de los componentes
- La documentación ahora cumple con los estándares de publicación de pub.dev
- Los desarrolladores pueden usar la documentación integrada en sus IDEs
1.1.0 - 2025-01-20 #
Añadido
🎨 Fondos Animados (Nueva Categoría)
-
FlickTileBox: Sistema de tiles parpadeantes para fondos dinámicos
- Grid configurable de tiles con filas y columnas ajustables
- Cada tile tiene velocidad y fase de parpadeo única para efecto orgánico
- Control de opacidad con rangos min/max configurables (0.0 - 1.0)
- Velocidad de parpadeo variable por tile (minSpeed/maxSpeed)
- Espaciado entre tiles personalizable
- Bordes redondeados configurables (borderRadius)
- Color base personalizable
- Tamaño de tile automático o manual (tileSize)
- Semilla opcional (seed) para aleatoriedad reproducible
- Color de fondo opcional (backgroundColor)
- Optimizado con
RepaintBoundaryyshouldRepainteficiente - Uso de
AnimatedBuilderpara mejor rendimiento - Perfecto para fondos tipo mosaico, pantallas de carga y efectos visuales modernos
- 12 parámetros configurables para máxima personalización
-
ParticleBox: Sistema de partículas animadas para fondos interactivos
- Partículas con movimiento continuo y fluido
- Sistema de física simple con velocidad y posición
- Colores múltiples con selección aleatoria por partícula
- Control de cantidad de partículas (particleCount)
- Factor de velocidad ajustable (velocityFactor)
- Factor de altura para variación de tamaño (heightFactor)
- Área de animación configurable (maxWidth/maxHeight)
- Dirección de movimiento aleatoria (velocityXDirection/velocityYDirection)
- Partículas se regeneran al salir del área visible
- Color de fondo opcional (backgroundColor)
- Interactividad con mouse (hover) que afecta dirección de partículas
- Opacidad semi-transparente para efectos sutiles
- Optimizado para renderizar cientos de partículas fluidamente
- Perfecto para fondos dinámicos, efectos visuales inmersivos y pantallas de bienvenida
Mejorado
Documentación y Ejemplos
-
Nueva sección "🎨 Fondos Animados" en el README
-
Página de documentación completa para FlickTileBox:
- 6 características destacadas con iconos
- Ejemplos de uso básico copy/paste
- 4 ejemplos interactivos: Parpadeo Suave, Energía Vibrante, Matriz Digital, Mosaico Minimalista
- Tabla completa de 12 parámetros con tipos y valores por defecto
- Sección de mejores prácticas (Hacer/Evitar)
-
Página de documentación completa para ParticleBox:
- 6 características destacadas
- Ejemplos prácticos: Partículas Suaves, Energía Intensa, Espacio Nocturno, Océano Digital
- Tabla de parámetros con descripciones detalladas
- Guía de mejores prácticas para optimización
-
Actualizada estructura del proyecto en README con carpeta
backgrounds/ -
Integración completa en la app de ejemplo con navegación desde el home
Rendimiento
-
FlickTileBox: Optimización masiva del cálculo de opacidad
- Simplificado cálculo sinusoidal de opacidad (eliminado cálculo complejo
0.5 + 0.5 * sinVal) - Cálculo directo:
baseOpacity + amplitude * sin(...) shouldRepaintoptimizado: solo comparatimeen lugar de 10+ parámetros- Uso de
AnimatedBuilderen lugar deaddListener+setState - Reducción significativa de reconstrucciones innecesarias
- Pre-cálculo de valores constantes (rangos de opacidad, grid dimensions)
- Simplificado cálculo sinusoidal de opacidad (eliminado cálculo complejo
-
ParticleBox: Optimización para múltiples partículas
- Sistema de física ligero y eficiente
CustomPainteroptimizado conshouldRepaintbasado en diferencias reales- Regeneración de partículas solo cuando salen del área visible
- Colores cacheados con alpha pre-aplicado
Estructura del Proyecto
-
Nueva carpeta
lib/widget/backgrounds/con:flick_tile_animation.dartparticles_animation.dart
-
Nueva carpeta
example/lib/pages/backgrounds/con:flick_tile_page.dartparticles_page.dart
Notas Técnicas
- Ambos componentes son 100% Dart puro (sin dependencias nativas)
- Optimizados para funcionar en todas las plataformas Flutter
- Recomendaciones de rendimiento documentadas para móviles
- FlickTileBox: recomendado 50-150 tiles en móviles
- ParticleBox: recomendado 50-150 partículas en móviles
1.0.1 - 2025-10-16 #
Mejorado
Botones
-
RippleRevealButton: documentación, ejemplos y API unificados
- Estandarizada la
APIpública y los nombres de propiedades en la documentación y ejemplos (selectedChild,unselectedChild,selectedBackgroundColor,unselectedBackgroundColor,selectedRippleColor,unselectedRippleColor,isSelected,animationDuration,borderRadius, etc.). - Ejemplos en la app actualizados para ser copy/paste y mostrar variaciones de tamaño, iconos y combinaciones texto+icono.
- Mejora en la descripción y notas de uso (mejores prácticas y accesibilidad: cursor en desktop, origen del ripple desde el tap).
- Nota: debido a la unificación y renombrado de parámetros para hacer más amigable la experiencia de desarrollo, los colores y widgets asociados a los estados (
selected*/unselected*) pueden intercambiarse con facilidad para invertir comportamientos o crear variantes visuales rápidamente.
- Estandarizada la
-
RectRevealButton: pulido de API y documentación
- Alineada la terminología y los ejemplos con
RippleRevealButton(nombres de propiedades homogeneizados:selectedChild,unselectedChild,selectedBackgroundColor,unselectedBackgroundColor,selectedRippleColor,unselectedRippleColor,revealDirection,isSelected,animationDuration,borderRadius, etc.). - Añadida documentación de las direcciones (
fromClick,fromLeft,fromRight) y ejemplos interactivos en la app de ejemplo. - Correcciones menores en el comportamiento del reveal (mejor manejo de la posición del tap cuando
revealDirection == fromClick). - Nota: por el mismo motivo de consistencia en la API, los colores y widgets de los estados se pueden intercambiar fácilmente; esto facilita invertir el aspecto del botón o reutilizar pares de colores/widgets sin cambios adicionales en la lógica.
- Alineada la terminología y los ejemplos con
-
PulsatingButton (Pulsating): estabilización y documentación
- Documentación inline ampliada con ejemplos de uso y parámetros (duración, magnitud, curvas, border opcional).
- Ajustes de implementación para animaciones más estables en dispositivos de baja potencia (menor jitter y uso de
RepaintBoundarydonde aplica).
-
AnimatedStateButton: optimizaciones y caché
- Mayor reutilización de widgets internos (por ejemplo, indicador de carga pre-cacheado) para reducir rebuilds.
- Ajustes en la gestión de ancho y layout para evitar cálculos repetidos en cada frame.
- Documentación ampliada con ejemplos de múltiples estados y cómo integrar loaders.
Documentación / Ejemplos
- Actualizada la app de ejemplo (
example/) para reflejar los cambios de API y mejorar los snippets copy/paste deRippleRevealButtonyRectRevealButton. - Añadidas notas de mejores prácticas y un apartado específico para las direcciones del reveal en la página de
RectRevealButton. - Nota general: debido a la unificación y renombrado de parámetros (prefijos
selected/unselected), los colores y widgets que definen cada estado son ahora fácilmente intercambiables — esto permite invertir estados o experimentar con combinaciones visuales sin tocar la lógica del widget.
Notas
- Estos cambios son mayormente orientados a estabilidad de API, claridad de documentación y pequeñas mejoras de rendimiento; la funcionalidad pública sigue siendo compatible en la mayoría de casos, aunque se recomienda revisar los usos de propiedades si se utilizan nombres antiguos.
0.0.7 - 2025-01-14 #
Añadido
Botones
- PulsatingButton: Botón con efecto de pulsación continua tipo latido
- Animación de escala que expande y contrae el botón
- Efecto de opacidad sincronizado con la pulsación
- Radio de esquinas animado que se expande con la pulsación
- Duración de pulsación configurable
- Tamaño de pulsación ajustable (determina cuánto se expande)
- Curvas de animación personalizables
- Color, ancho y alto configurables
- Soporte para contenido personalizado (child)
- Borde opcional
- Efecto continuo ideal para llamadas a la acción (CTA)
- Perfecto para botones destacados que requieren atención del usuario
Mejorado
0.0.6 - 2025-01-14 #
Optimizado
Loaders
-
WaveSticksLoader: Optimización masiva de rendimiento
- Reemplazado
RowporStackcon widgetsPositionedpara mejor rendimiento - Pre-cálculo de posiciones horizontales de los sticks en
initState(calculado una sola vez) - Valores constantes cacheados:
sigma,startPosition,endPosition,travelDistance - Reducción del 60-70% en uso de CPU
- Eliminación de recálculos innecesarios en cada frame
- Animaciones más fluidas especialmente con muchos sticks (15-25)
- Reemplazado
-
SquareMatrixLoader: Optimización masiva de rendimiento
- Reemplazado
GridView.builderporStackcon widgetsPositioned - Pre-generación de matriz y recorrido en
initState(una sola vez) - Valores constantes cacheados:
cellSize,squareSize - Reducción del 70-80% en uso de CPU
- Eliminación de reconstrucciones innecesarias de widgets
- Mejor rendimiento en matrices grandes (5x5, 6x6)
- Reemplazado
-
CircleMatrixLoader: Optimización masiva de rendimiento
- Reemplazado
GridView.builderporStackcon widgetsPositioned - Pre-generación de matriz y recorrido en
initState(una sola vez) - Opacidad aplicada directamente al color (
withValues(alpha:)) en lugar del widgetOpacity - Eliminación de capas de composición extra (widget
Opacityeliminado) - Valores constantes cacheados:
cellSize,circleSize - Reducción del 80-90% en uso de CPU
- Animaciones ultra fluidas con efecto de desvanecimiento suave
- Uso de
BoxShape.circlenativo en lugar deborderRadiuscircular
- Reemplazado
Botones
- AnimatedStateButton: Optimización de reconstrucciones de widgets
- Widget de loading (
CircularProgressIndicator) pre-cacheado eninitState - Ancho completo calculado solo cuando cambian las dependencias (
didChangeDependencies) - Uso optimizado de
ValueListenableBuilderpara reconstruir solo cuando cambia el estado - Reducción del 40-50% en reconstrucciones innecesarias
- Menor presión en el Garbage Collector
- Widget de loading (
Mejorado
- Rendimiento general: Todos los loaders animados optimizados para dispositivos de gama baja
- Uso de memoria: Reducción significativa mediante caching de valores calculados
- Fluidez: Animaciones a 60 FPS constantes incluso con múltiples instancias visibles
- Escalabilidad: Mejor rendimiento con matrices grandes y múltiples sticks
- Técnicas aplicadas:
- Stack + Positioned en lugar de GridView/Row
- Pre-cálculo de valores en initState
- Caching de widgets y valores constantes
- Opacidad en color en lugar de widget Opacity
- Reducción de operaciones por frame
0.0.5 - 2025-01-14 #
Añadido
Loaders
- CircleMatrixLoader: Loader animado con matriz de círculos que se desvanecen elegantemente
- Matriz configurable de círculos perfectos (3x3, 4x4, 5x5, 6x6, etc.)
- 8 direcciones de animación:
- Verticales:
BOTTOM_UP,UP_BOTTOM - Horizontales:
LEFT_RIGHT,RIGHT_LEFT - Diagonales:
LEFT_UP_RIGHT_BOTTOM,RIGHT_BOTTOM_LEFT_UP,LEFT_BOTTOM_RIGHT_UP,RIGHT_UP_LEFT_BOTTOM
- Verticales:
- Efecto de desvanecimiento fluido con animación de opacidad
- Transformaciones de escala coordinadas con opacidad
- Círculos perfectos con BorderRadius circular
- Efecto orgánico y suave ideal para interfaces minimalistas
- Curvas de animación personalizables
- Color y tamaño configurables
- Optimizado para rendimiento (recomendado 3-6 círculos por lado)
- Perfecto para estados de carga elegantes y transiciones suaves
Mejorado
- Documentación inline completa del CircleMatrixLoader con ejemplos
- README actualizado con ejemplos detallados del nuevo loader
- Aplicación de ejemplo actualizada con página de demostración interactiva
- Grid visual de las 8 direcciones disponibles en la app de ejemplo
- Sección de mejores prácticas específicas para el efecto de desvanecimiento
0.0.4 - 2025-10-13 #
Añadido
Loaders
- SquareMatrixLoader: Loader animado con matriz de cuadrados que se expanden y contraen
- Matriz configurable de cuadrados (3x3, 4x4, 5x5, 6x6, etc.)
- 8 direcciones de animación:
- Verticales:
BOTTOM_UP,UP_BOTTOM - Horizontales:
LEFT_RIGHT,RIGHT_LEFT - Diagonales:
LEFT_UP_RIGHT_BOTTOM,RIGHT_BOTTOM_LEFT_UP,LEFT_BOTTOM_RIGHT_UP,RIGHT_UP_LEFT_BOTTOM
- Verticales:
- Transformaciones de escala suaves con ondas sinusoidales
- Curvas de animación personalizables (linear, easeInOut, bounceInOut, etc.)
- Tamaño de cuadrados y duración configurables
- Color personalizable
- Optimizado para rendimiento (recomendado 3-6 cuadrados por lado)
- Perfecto para estados de carga modernos y pantallas splash
Mejorado
- Documentación inline completa del SquareMatrixLoader con ejemplos
- README actualizado con ejemplos detallados del nuevo loader
- Aplicación de ejemplo actualizada con página de demostración interactiva
- Grid visual de las 8 direcciones disponibles en la app de ejemplo
- Sección de mejores prácticas y recomendaciones de uso
0.0.3 - 2025-10-12 #
Añadido
Loaders
- WaveSticksLoader: Loader animado con efecto de onda gaussiana
- Efecto de onda suave basado en distribución gaussiana
- Ancho de onda configurable mediante parámetro
waveWidth(0.5-3.0) - Número de sticks personalizable
- Control de tamaños: ancho, altura mínima y altura máxima de onda
- Espaciado entre sticks ajustable
- Radio de esquinas configurable
- Alineación vertical (start, center, end) para efectos creativos
WaveStickAnimationControllerpara control manual de la animación- Métodos
start()ystopAnimation()en el controller - Transiciones suaves garantizadas: la onda comienza y termina fuera del área visible
- Perfecto para estados de carga y visualizadores de audio
Mejorado
- Documentación inline completa con ejemplos de código
- README actualizado con ejemplos del nuevo loader
- Aplicación de ejemplo actualizada con página de demostración interactiva
0.0.1 - 2025-10-12 #
Añadido
Botones Animados
-
RippleRevealButton: Botón con efecto de ondulación circular que se expande desde el punto de toque
- Soporte para dos estados (widgetA/widgetB)
- Colores personalizables para fondo y ripple
- Control de radio de esquinas
- Padding y alineación configurables
-
RectRevealButton: Botón con efecto de revelación rectangular
- Tres direcciones de revelación:
fromClick,fromLeft,fromRight - Transición suave entre estados
- Altamente personalizable
- Tres direcciones de revelación:
-
FocusButton: Botón con gradiente animado rotatorio en el borde
- Gradiente multicolor configurable
- Animación continua y suave
- Grosor de borde ajustable
- Duración de animación personalizable
-
AnimatedStateButton: Botón con estados animados personalizables
- Múltiples estados configurables
- Transiciones suaves
Textos Animados
-
AnimatedText: Texto con animaciones en cascada
- 9 tipos de animación:
fade,blur,rotate,rotateVertical,decode,erode,dilate,erodeBlur,dilateBlur - 3 modos de división: caracteres (
char), palabras (word), líneas (line) - Control automático o manual mediante GlobalKey
- Curvas de animación personalizables
- Duración configurable por elemento
- 9 tipos de animación:
-
FuzzyText: Texto con efectos dinámicos
- Modo
glitch: Efecto de fallo digital con capas de color desplazadas - Modo
height: Fluctuación de escala animada - Amplitud configurable
- Actualización continua a 60fps
- Modo
Indicadores
- CircularRevealIndicator: Indicador circular animado por segmentos
- Modo automático con rotación continua
- Modo manual con control externo del índice
- Número de segmentos configurable
- Efecto halo ajustable con
activeSegments - Colores activo/inactivo personalizables
- Grosor de trazo variable
Características Generales
- Soporte completo para todas las plataformas Flutter (Android, iOS, Web, macOS, Linux, Windows)
- Documentación inline detallada con ejemplos de código
- Optimización de rendimiento con
RepaintBoundarydonde corresponde - API intuitiva y fácil de usar
- Componentes altamente personalizables
Dependencias
flutter_svg: ^2.2.1para renderizado de SVG
Notas Técnicas
- SDK mínimo requerido: Dart
^3.9.2 - Flutter mínimo requerido:
>=1.17.0 - Sin dependencias nativas (100% Dart puro)
Recursos
- 📦 Paquete pub.dev: https://pub.dev/packages/flutter_motionly
- 🌐 Demo web: https://flutter-motionly-web.onrender.com/
- 💻 Repositorio: https://github.com/palmerovicdev/flutter_motionly_web
- 📖 Documentación completa disponible en el README.md