AnimationController
- 애니메이션의 진행 상태를 관리하는 핵심 클래스이다.
forward()는 시작, stop()은 정지, reset()은 초기화, reverse()는 되감기 등 애니메이션의 상태를 실시간으로 제어하며 값의 변화를 생성한다.
AnimationController를 생성할 때는 vsync 속성이 필수이다.
vsync
- 애니메이션은 초당 수십 번 화면을 다시 그리며 움직임을 만든다.
- 이때
vsync는 애니메이션이 화면의 리프레시 속도에 맞춰 불필요한 연산을 줄이고 성능을 최적화하도록 도와준다.
Ticker
- 새로운 프레임을 그릴 때마다 신호를 보내 애니메이션이 업데이트되도록 하는 역할을 한다.
- 신호를 받은
Ticker 객체는 애니메이션의 진행 상태를 계산하고 갱신하는 역할을 한다.
TickerProvider
Ticker를 생성하고 관리하는 역할을 한다.
- 즉
AnimationController가 사용할 Ticker를 제공하는 공급자이다.
TickerProviderMixin
TickerProvider가 구현된 Mixin 클래스로 statefulWidget의 state 클래스에서 with TickerProviderMixin 키워드를 사용해 적용한다.
- 이렇게 하면 해당
state 클래스가 vsync 속성을 자동으로 제공할 수 있게 된다.
- 즉
state 클래스 내에서 바로 Ticker를 사용할 수 있도록 만들어주는 역할을 한다.
class _welcomePageState extends state<WelcomePage>
with SingleTickerProviderStateMixin {
late final AnimationController _controller;
@override
void initState() {
_controller = AnimationController(vsync: this)
super.initState();
_controller.addStatusListener(
(status) {
if(status == AnimationStatus.completed) {
context.pushReplacement('/login')
...
Lottie.asset('assets/welcome/welcome.json',
controller : _controller,
onLoaded : (composition) {
_controller.duration = composition.duration;
_controller.forward();
Curve
- 애니메이션의 속도 변화 곡선을 정의한다.
Curves.easeInOut, Curves.linear 등으로 움직임의 리듬과 완급을 조절하며 자연스러운 동작을 만든다.
Twee
- 애니메이션의 시작 값과 끝 값을 정의한다.
Tween<double>(begin: 0.0, end:1.0) 형태로 지정하며 컨트롤러의 값 변화를 원하는 형태로 변환시킨다.
AnimatedBuilder
- 애니메이션의 현재 값을 위젯 속성에 적용해 화면을 다시 그리는 역할을 한다.
- 애니메이션 값이 바뀔 때마다
setState 해줄 필요 없이 UI를 부드럽게 업데이트한다.