Forward and Reverse animation on text flutter. Animation Controller, dispose, AnimationStatus, CurvedAnimation, SingleTickerProviderStateMixin.
import 'package:flutter/material.dart'; import 'login_screen.dart'; import 'registration_screen.dart'; class WelcomeScreen extends StatefulWidget { static const String id = 'welcome_screen'; @override _WelcomeScreenState createState() => _WelcomeScreenState(); } class _WelcomeScreenState extends State<WelcomeScreen> with SingleTickerProviderStateMixin{ AnimationController controller; Animation animation; @override void initState() { // TODO: implement initState super.initState(); controller = AnimationController( duration: Duration(seconds: 1), vsync: this, ); animation = CurvedAnimation(parent: controller, curve: Curves.easeIn); controller.forward(); animation.addStatusListener((status) { if(status == AnimationStatus.completed){ controller.reverse(from: 1.0); }else if (status == AnimationStatus.dismissed){ controller.forward(); } }); controller.addListener(() { setState(() {}); print(controller.value); }); } @override void dispose() { // TODO: implement dispose controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.white, body: Padding( padding: EdgeInsets.symmetric(horizontal: 24.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.stretch, children: <Widget>[ Row( children: <Widget>[ Hero( tag: 'logo', child: Container( child: Image.asset('images/logo.png'), height: 60.0, ), ), Text( 'Flash Chat', style: TextStyle( fontSize: 45.0, fontWeight: FontWeight.w900, ), ), ], ), SizedBox( height: 48.0, ), Padding( padding: EdgeInsets.symmetric(vertical: 16.0), child: Material( elevation: 5.0, color: Colors.lightBlueAccent, borderRadius: BorderRadius.circular(30.0), child: MaterialButton( onPressed: () { Navigator.pushNamed(context, LoginScreen.id); }, minWidth: 200.0, height: 42.0, child: Text( 'Log In', ), ), ), ), Padding( padding: EdgeInsets.symmetric(vertical: 16.0), child: Material( color: Colors.blueAccent, borderRadius: BorderRadius.circular(30.0), elevation: 5.0, child: MaterialButton( onPressed: () { Navigator.pushNamed(context, RegistrationScreen.id); }, minWidth: 200.0, height: 42.0, child: Text( 'Register', ), ), ), ), ], ), ), ); } }