Last active
March 20, 2022 15:54
-
-
Save qureshiayaz29/20870b67e5ff8b81ee0a511b14704ad4 to your computer and use it in GitHub Desktop.
Flutter Animation
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import 'package:flutter/material.dart'; | |
void main() => runApp(const MyApp()); | |
class MyApp extends StatefulWidget { | |
const MyApp({Key? key}) : super(key: key); | |
@override | |
_MyAppState createState() => _MyAppState(); | |
} | |
class _MyAppState extends State<MyApp> with SingleTickerProviderStateMixin { | |
late Animation<double> animation; | |
late AnimationController controller; | |
@override | |
void initState() { | |
super.initState(); | |
controller = AnimationController( | |
duration: const Duration(seconds: 10), vsync: this); | |
animation = Tween<double>(begin: 0.0, end: 1.0).animate(controller); | |
controller.forward(); | |
} | |
// This widget is the root of your application. | |
@override | |
Widget build(BuildContext context) { | |
controller.forward(); | |
return MaterialApp( | |
title: 'Flutter Demo', theme: ThemeData(primarySwatch: Colors.blue,), | |
home: MyHomePage(title: 'Product layout demo home page', animation: animation,) | |
); | |
} | |
@override | |
void dispose() { | |
controller.dispose(); | |
super.dispose(); | |
} | |
} | |
class MyHomePage extends StatelessWidget { | |
MyHomePage({Key? key, required this.title, required this.animation}): super(key: key); | |
final String title; | |
final Animation<double> animation; | |
@override | |
Widget build(BuildContext context) { | |
return Scaffold( | |
appBar: AppBar(title: Text("Product Listing")), | |
body: ListView( | |
shrinkWrap: true, | |
padding: const EdgeInsets.fromLTRB(2.0, 10.0, 2.0, 10.0), | |
children: <Widget>[ | |
FadeTransition( | |
child: const ProductBox( | |
name: "iPhone", | |
description: "iPhone is the stylist phone ever", | |
price: 1000, | |
image: "iphone.png" | |
), | |
opacity: animation | |
), | |
MyAnimatedWidget( | |
child: const ProductBox( | |
name: "Pixel", | |
description: "Pixel is the most featureful phone ever", | |
price: 800, | |
image: "pixel.png" | |
), | |
animation: animation | |
), | |
const ProductBox( | |
name: "Laptop", | |
description: "Laptop is most productive development tool", | |
price: 2000, | |
image: "laptop.png" | |
), | |
const ProductBox( | |
name: "Tablet", | |
description: "Tablet is the most useful device ever for meeting", | |
price: 1500, | |
image: "tablet.png" | |
), | |
const ProductBox( | |
name: "Pendrive", | |
description: "Pendrive is useful storage medium", | |
price: 100, | |
image: "pendrive.png" | |
), | |
const ProductBox( | |
name: "Floppy Drive", | |
description: "Floppy drive is useful rescue storage medium", | |
price: 20, | |
image: "floppy.png" | |
), | |
], | |
) | |
); | |
} | |
} | |
class ProductBox extends StatelessWidget { | |
const ProductBox({Key? key, required this.name, required this.description, required this.price, required this.image}) : | |
super(key: key); | |
final String name; | |
final String description; | |
final int price; | |
final String image; | |
@override | |
Widget build(BuildContext context) { | |
return Container( | |
padding: const EdgeInsets.all(2), | |
height: 140, | |
child: Card( | |
child: Row( | |
mainAxisAlignment: MainAxisAlignment.spaceEvenly, | |
children: <Widget>[ | |
Image.asset("assets/appimages/" + image), | |
Expanded( | |
child: Container( | |
padding: const EdgeInsets.all(5), | |
child: Column( | |
mainAxisAlignment: MainAxisAlignment.spaceEvenly, | |
children: <Widget>[ | |
Text( | |
this.name, style: const TextStyle( | |
fontWeight: FontWeight.bold | |
) | |
), | |
Text(description), Text( | |
"Price: " + price.toString() | |
), | |
], | |
) | |
) | |
) | |
] | |
) | |
) | |
); | |
} | |
} | |
class MyAnimatedWidget extends StatelessWidget { | |
const MyAnimatedWidget({required this.child, required this.animation}); | |
final Widget child; | |
final Animation<double> animation; | |
Widget build(BuildContext context) => Center( | |
child: AnimatedBuilder( | |
animation: animation, | |
builder: (context, child) => Container( | |
child: Opacity(opacity: animation.value, child: child), | |
), | |
child: child | |
), | |
); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment