lecture 4 done, created hero animation

This commit is contained in:
Ayan Das
2023-04-23 01:15:22 +05:30
parent 35c15f22b2
commit a54a1cd8ef
3 changed files with 143 additions and 0 deletions

114
lib/Screens/lecture4.dart Normal file
View File

@ -0,0 +1,114 @@
// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/placeholder.dart';
class Person {
final String name;
final String age;
final String emoji;
Person({
required this.name,
required this.age,
required this.emoji,
});
}
final people = [
Person(name: "Ayan", age: '20', emoji: '👨'),
Person(name: "Daddu", age: '20', emoji: '👴'),
Person(name: "Thakur ji", age: '20', emoji: '👮'),
Person(name: "Angela", age: '20', emoji: '👼'),
];
class Lecture4 extends StatefulWidget {
final String title;
const Lecture4({
Key? key,
required this.title,
}) : super(key: key);
@override
State<Lecture4> createState() => _Lecture4State();
}
class _Lecture4State extends State<Lecture4> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(widget.title)),
body: ListView.builder(
itemCount: people.length,
itemBuilder: (context, index) {
Person person = people[index];
return InkWell(
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) => Details(person: people[index]),
)),
child: ListTile(
leading: Hero(
tag: person.name,
child: Text(
person.emoji,
style: TextStyle(fontSize: 30),
),
),
title: Text(person.name),
subtitle: Text("${person.age} years old"),
),
);
},
),
);
}
}
class Details extends StatelessWidget {
final Person person;
const Details({super.key, required this.person});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
centerTitle: true,
title: Hero(
flightShuttleBuilder: (flightContext, animation, flightDirection,
fromHeroContext, toHeroContext) {
switch (flightDirection) {
case HeroFlightDirection.push:
return Material(
color: Colors.transparent, child: fromHeroContext.widget);
break;
case HeroFlightDirection.pop:
return Material(
color: Colors.transparent, child: toHeroContext.widget);
break;
}
},
tag: person.name,
child: Text(
person.emoji,
style: TextStyle(fontSize: 40),
),
),
),
body: Center(
child: Column(
children: [
SizedBox(
height: 20,
),
Text(person.name),
SizedBox(
height: 20,
),
Text("${person.age} years old")
],
)),
);
}
}

26
lib/Screens/lecture5.dart Normal file
View File

@ -0,0 +1,26 @@
// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/src/widgets/placeholder.dart';
class Lecture5 extends StatefulWidget {
final String title;
const Lecture5({
Key? key,
required this.title,
}) : super(key: key);
@override
State<Lecture5> createState() => _Lecture5State();
}
class _Lecture5State extends State<Lecture5> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
);
}
}

View File

@ -3,6 +3,7 @@ import 'dart:math';
import 'package:animations/Screens/lecture2.dart';
import 'package:animations/Screens/lecture3.dart';
import 'package:animations/Screens/lecture4.dart';
import 'package:flutter/material.dart';
import 'Screens/lecture1.dart';
@ -35,6 +36,7 @@ class MyApp extends StatelessWidget {
),
'lec3/': (context) =>
const Lecture3(title: "3D Animation, Stack and rotate widgets"),
'lec4/': (context) => const Lecture4(title: "Hero Animation"),
},
);
}
@ -68,6 +70,7 @@ class _MyHomePageState extends State<MyHomePage> {
Link(
link: 'lec3/',
title: "3D Animations, Stack and rotate widgets"),
Link(link: 'lec4/', title: 'Hero Animations'),
],
),
),