2021.07.01 - [Usage/Flutter] - [Flutter] Json 데이터를 GetX를 활용하여 list view, detail view 만들기
Hero 애니메이션 적용
Hero 애니메이션을 적용하기 위해서는 적용받는 대상의 부모와 자식 위젯의 태그를 동일하게 만들어줘야함
아래는 디테일 페이지로 이동하기위해 클릭하는 위젯
아래 위젯의 Image를 클릭하면 디테일 페이지로 이동하는데 이때의 이미지와 디테일 페이지의 이미지의 태그를 동일하게 만들어줘야함
class PostWidget extends StatelessWidget {
final String uid;
final String thumbnail;
final String title;
final String description;
final PostClickFunction callBack;
const PostWidget(
{required this.uid,
required this.thumbnail,
required this.title,
required this.description,
required this.callBack});
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: callBack,
child: Container(
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
// tag가 연결되는 이미지의 tag와 같아야함
// 리스트의 이미지의 태그와 디테일 페이지의 이미지의 태그가 동일해야함
Hero(tag: uid, child: Image.asset(thumbnail)),
Padding(
padding: const EdgeInsets.only(
top: 10, bottom: 20, left: 10, right: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
title,
style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
),
Text(
description,
style: TextStyle(
fontSize: 12,
),
)
],
),
),
],
),
),
);
}
}
아래는 디테일 페이지
class PostDetailView extends GetView<TextAnimation> {
const PostDetailView();
@override
Widget build(BuildContext context) {
Get.put(TextAnimation());
return Scaffold(
appBar: AppBar(
title: Text(controller.post!['title']!),
),
body: Column(
children: [
Hero(
tag: controller.post!['uid']!,
child: Image.asset(controller.post!['thumbnail']!)),
Column(
children: [
Text(
controller.post!['title']!,
),
Text(
controller.post!['description']!,
),
],
),
],
),
);
}
}
728x90
'Usage > Flutter' 카테고리의 다른 글
IndexedStack, bottomNavigation으로 화면 전환 (0) | 2021.08.28 |
---|---|
[Flutter] GetX를 활용해서 stateless에서 애니메이션 사용하기 (0) | 2021.07.01 |
[Flutter] Json 데이터를 GetX를 활용하여 list view, detail view 만들기 (0) | 2021.07.01 |
[Flutter/Animation] AnimatedSwitcher를 활용한 위젯 바꿀때 애니메이션 효과 넣기 (0) | 2021.06.24 |
[Flutter/Animation] PositionedTransition을 직접 구현해보기 (0) | 2021.06.24 |