반응형
1. 사전 선언 된 위젯으로 간단 구현
package: flutter/widget.dart 내부에 선언 된 Animated... 로 시작되는 위젯 호출하여 사용
- ex) AnimatedContainer 를 쓴다면
AnimatedContainer(
transform: !animate?startTransform():endTransform(),
duration: const Duration(milliseconds: 300),
child: widget.child
)
이 외에도 AnimatedOpacity, AnimatedAlign 등 여러가지가 있음
2. TweenAnimationBuilder 를 사용하는 방법
0, 1 두가지 상태만 있는 Animated...Widgets와 다르게 범위 내에 특정 액션 취하도록
/// 1 ///
controller.drive(
Tween<Offset>(
begin: const Offset(0.0, 0.0),
end: const Offset(100.0, 500.0),
),
);
/// 2 ///
Tween<Offset>(
begin: const Offset(0.0, 0.0),
end: const Offset(100.0, 500.0),
).animate(controller);
3. Staggered Animation
여러 애니메이션을 AnimationController로 Tween 범위만큼 Interval 비율로 동작
opacity = Tween<double>(begin: 0, end: 1).animate(
CurvedAnimation(
parent: _controller,
curve: Interval(0.0, 0.5, curve: Curves.easeIn),
),
);
padding = Tween<double>(begin: 0, end: 50).animate(
CurvedAnimation(
parent: _controller,
curve: Interval(0.5, 1.0, curve: Curves.easeOut),
),
);
color = ColorTween(begin: Colors.blue, end: Colors.red).animate(
CurvedAnimation(
parent: _controller,
curve: Interval(0.0, 1.0, curve: Curves.linear),
),
);
controller.forward();
AnimatedBuilder(
animation: controller,
builder: (context, child) {
return Container(
padding: EdgeInsets.all(padding.value),
color: color.value,
child: Opacity(
opacity: opacity.value,
child: FlutterLogo(size: 100),
),
);
},
)
4. Hero Animation Hero 안에 담긴 같은 id의 위젯을 전환시켜주는 애니메이션
(안드로이드의 Transition Animation 과 거의 동일)
// 화면1 내부
Hero(
tag: 'hero-logo',
child: FlutterLogo(size: 100),
)
// 화면2 내부
Hero(
tag: 'hero-logo',
child: FlutterLogo(size: 200),
)
반응형
'개발 > flutter' 카테고리의 다른 글
하단에 붙어서 스크롤 가능한 시트 DraggableScrollableSheet (0) | 2024.05.27 |
---|---|
클로바 Speech Recognition (1) | 2024.04.26 |
Flutter 웹 렌더러를 html 모드로 세팅해두고 싶다면 (0) | 2024.03.28 |
Flutter TextField에서 고정 높이 height 가 수정 안되면 (0) | 2023.08.09 |
Flutter ListView 에서 item index로 scroll Position 변경하기 (0) | 2023.07.27 |