Animation & Motion Widgets
Animation & Motion Widgets
@override
@override
return GestureDetector(
onTap: () {
setState(() {
selected = !selected;
});
},
child: Center(
child: Container(
width: double.infinity,
height: 250.0,
color: Colors.blueGrey,
child: AnimatedAlign(
curve: Curves.fastOutSlowIn,
),
),
),
);
2. AnimatedBuilder Widget
import 'dart:math' as math;
import 'package:flutter/material.dart';
@override
with TickerProviderStateMixin {
vsync: this,
)..repeat();
@override
void dispose() {
_controller.dispose();
super.dispose();
@override
Widget build(BuildContext context) {
return Center(
child: AnimatedBuilder(
animation: _controller,
return Transform.rotate(
child: child,
);
},
),
);
3. AnimatedContainer Widget
import 'package:flutter/material.dart';
@override
@override
return GestureDetector(
onTap: () {
setState(() {
selected = !selected;
});
},
child: Center(
child: AnimatedContainer(
curve: Curves.fastOutSlowIn,
),
),
);
4. AnimatedCrossFade
import 'package:flutter/material.dart';
@override
}
class _AnimatedCrossFadeWidgetState extends
State<AnimatedCrossFadeWidget> {
@override
return Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AnimatedCrossFade(
firstChild: Image.asset(
'assets/icon/blue.jpg',
width: double.infinity,
),
secondChild: Image.asset(
'assets/icon/ocean.jpg',
width: double.infinity,
),
crossFadeState: showFirst
? CrossFadeState.showFirst
: CrossFadeState.showSecond,
),
TextButton(
onPressed: () {
setState(() {
showFirst = !showFirst;
});
},
),
],
),
);
5. AnimatedDefaultTextStyle Widget
import 'package:flutter/material.dart';
@override
_AnimatedDefaultTextStyleWidgetState();
class _AnimatedDefaultTextStyleWidgetState
extends State<AnimatedDefaultTextStyleWidget> {
@override
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
SizedBox(
height: 120,
child: AnimatedDefaultTextStyle(
duration: const Duration(milliseconds: 300),
style: TextStyle(
fontSize: _fontSize,
color: _color,
fontWeight: FontWeight.bold,
),
),
),
TextButton(
onPressed: () {
setState(() {
_first = !_first;
});
},
),
],
);
}
6. Animated List
import 'package:flutter/material.dart';
return MediaQuery.removePadding(
context: context,
removeTop: true,
removeBottom: true,
child: AnimatedList(
initialItemCount: 50,
return Card(
color: Colors.amber,
);
},
),
);
7. AnimatedListState Widget
Key Points to Remember
@override
void _addItem() {
_listKey.currentState!.insertItem(_items.length - 1); //
Animate insertion
void _removeItem() {
_listKey.currentState!.removeItem(
);
return SizeTransition(
child: ListTile(
tileColor: Colors.amber,
),
);
}
@override
return Scaffold(
body: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: _addItem,
),
ElevatedButton(
onPressed: _removeItem,
),
],
),
Expanded(
child: AnimatedList(
initialItemCount: _items.length,
_buildItem(_items[index], animation),
),
),
],
),
);
8. AnimatedModelBarrier Widget
import 'package:flutter/material.dart';
@override
State<AnimatedModalBarrierWidget> createState() =>
_AnimatedModalBarrierWidgetState();
with SingleTickerProviderStateMixin {
@override
void initState() {
super.initState();
begin: Colors.orangeAccent.withOpacity(0.5),
end: Colors.blueGrey.withOpacity(0.5),
);
_animationController = AnimationController(
vsync: this,
);
_colorAnimation = _colorTween.animate(_animationController);
@override
void dispose() {
_animationController.dispose();
super.dispose();
@override
return Scaffold(
body: Stack(
children: [
Center(
child: ElevatedButton(
onPressed: () {
setState(() {
isPressed = !isPressed;
if (isPressed) {
_animationController.forward();
} else {
_animationController.reverse();
});
},
),
),
if (isPressed)
AnimatedModalBarrier(
color: _colorAnimation,
dismissible: true,
),
],
),
);
9. AnimatedOpacity Widget
import 'package:flutter/material.dart';
const LogoFade({super.key});
@override
void _changeOpacity() {
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
AnimatedOpacity(
opacity: opacityLevel,
),
ElevatedButton(
onPressed: _changeOpacity,
),
],
);
@override
_AnimatedPhysicalModelWidgetState();
class _AnimatedPhysicalModelWidgetState
extends State<AnimatedPhysicalModelWidget> {
@override
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
AnimatedPhysicalModel(
curve: Curves.fastOutSlowIn,
borderRadius: _isFlat
shadowColor: Colors.black,
height: 120.0,
width: 120.0,
child: Icon(Icons.android_outlined),
),
),
ElevatedButton(
onPressed: () {
setState(() {
_isFlat = !_isFlat; // Toggle flat/elevated state
});
},
),
ElevatedButton(
onPressed: () {
setState(() {
});
},
),
],
),
);
extends State<AnimatedPositionedExample> {
@override
return SizedBox(
width: 200,
height: 350,
child: Stack(
children: <Widget>[
AnimatedPositioned(
duration: widget.duration,
curve: widget.curve,
child: GestureDetector(
onTap: () {
setState(() {
selected = !selected;
});
},
color: Colors.blue,
child: Center(
child: Text(
'Tap me',
),
),
),
),
),
],
),
);
@override
return GestureDetector(
onTap: () {
setState(() {
});
},
child: Container(
color: Colors.white,
child: AnimatedSize(
curve: Curves.easeIn,
),
),
);
}
13. AnimatedWidget Widget
class AnimatedWidgetExampleApp extends StatelessWidget {
const AnimatedWidgetExampleApp({super.key});
@override
home: AnimatedWidgetExample(),
);
const SpinningContainer({
super.key,
}) : super(listenable: controller);
@override
Widget build(BuildContext context) {
return Transform.rotate(
child: Container(
width: 200.0,
height: 200.0,
color: Colors.green,
),
);
const AnimatedWidgetExample({super.key});
@override
with TickerProviderStateMixin {
late final AnimationController _controller =
AnimationController(
vsync: this,
@override
void dispose() {
super.dispose();
@override
return Scaffold(
body: Center(
),
);
const DecoratedBoxTransitionExampleApp({super.key});
@override
home: DecoratedBoxTransitionExample(),
);
const DecoratedBoxTransitionExample({super.key});
@override
_DecoratedBoxTransitionExampleState();
}
class _DecoratedBoxTransitionExampleState
begin: BoxDecoration(
BoxShadow(
blurRadius: 10.0,
spreadRadius: 3.0,
),
],
),
end: BoxDecoration(
borderRadius: BorderRadius.zero,
),
);
vsync: this,
@override
void dispose() {
super.dispose();
@override
return ColoredBox(
color: Colors.white,
child: Center(
child: DecoratedBoxTransition(
decoration: decorationTween.animate(_controller), //
Animated decoration
child: Container(
),
),
),
);
@override
return ListTile(
trailing: const Hero(
tag: 'tag-1',
child: Icon(Icons.person),
),
MaterialPageRoute(
),
),
);
@override
return Scaffold(
appBar: AppBar(
title: const Text('Second Page'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
Hero(
tag: 'tag-1',
child: Container(
color: Colors.orangeAccent,
height: 100,
width: 100,
),
),
],
),
),
);