Saltar al contenido

Aleteo: botón parpadeante

Si te encuentras con alguna parte que te causa duda puedes comentarlo y te responderemos rápidamente.

Solución:

Puede lograr esto de una manera fácil usando AnimationController y FadeTransition widget, aquí tienes el código:

  class MyBlinkingButton extends StatefulWidget 
    @override
    _MyBlinkingButtonState createState() => _MyBlinkingButtonState();
  

  class _MyBlinkingButtonState extends State
      with SingleTickerProviderStateMixin 
    AnimationController _animationController;

    @override
    void initState() 
      _animationController =
          new AnimationController(vsync: this, duration: Duration(seconds: 1));
      _animationController.repeat(reverse: true);
      super.initState();
    

    @override
    Widget build(BuildContext context) 
      return FadeTransition(
        opacity: _animationController,
        child: MaterialButton(
          onPressed: () => null,
          child: Text("Text button"),
          color: Colors.green,
        ),
      );
    

    @override
    void dispose() 
      _animationController.dispose();
      super.dispose();
    
  

Uso:

main() 
  runApp(
    MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Material(
        child: Center(
          child: MyBlinkingButton(),
        ),
      ),
    ),
  );

Ejemplo de DartPad

Resultado:

ingrese la descripción de la imagen aquí

También puede hacerlo con este enfoque. Mi lógica es un poco diferente, estoy usando alternativa para la animación. Una vez que la animación se completa hacia adelante, voy hacia atrás.

que es bueno para la vista

es decir:

adelante -> atrás

atrás -> adelante

y así

import 'package:flutter/material.dart';
import 'package:flutter/animation.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return new MaterialApp(
      title: 'Wordpress App',
      theme: new ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: new BlinkAnimation(),
    );
  


class BlinkAnimation extends StatefulWidget 
  @override
  _BlinkAnimationState createState() => _BlinkAnimationState();


class _BlinkAnimationState extends State
    with SingleTickerProviderStateMixin 
  Animation animation;
  AnimationController controller;

  initState() 
    super.initState();
    controller = AnimationController(
        duration: const Duration(milliseconds: 500), vsync: this);
    final CurvedAnimation curve =
        CurvedAnimation(parent: controller, curve: Curves.linear);
    animation =
        ColorTween(begin: Colors.white, end: Colors.blue).animate(curve);
    animation.addStatusListener((status) 
      if (status == AnimationStatus.completed) 
        controller.reverse();
       else if (status == AnimationStatus.dismissed) 
        controller.forward();
      
      setState(() );
    );
    controller.forward();
  

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: new Text('Blink Animation'),
      ),
      body: new Center(
        child: AnimatedBuilder(
          animation: animation,
          builder: (BuildContext context, Widget child) 
            return new Container(
              child: new RaisedButton(
                color: animation.value,
                onPressed: () 
                  controller.forward();
                ,
                child: Text('Blink Animation'),
              ),
            );
          ,
        ),
      ),
    );
  

  dispose() 
    controller.dispose();
    super.dispose();
  

Puntuaciones y reseñas

Al final de todo puedes encontrar los comentarios de otros creadores, tú de igual manera puedes dejar el tuyo si te gusta.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *