본문 바로가기
flutter

Flutter[플러터] / AnimatedContainer 를 사용하여 움직이는 컨테이너 만들기(애니메이션 컨테이너) AnimatedContainer (Flutter Widget of the Week)

by ch5c 2025. 4. 23.
반응형

AnimatedContainer class

시간이 지남에 따라 값이 점차 바뀌는 Container 의 애니메이션 버전입니다.

 

AnimatedContainer 는 제공된 곡선과 지속 시간을 사용하여 속성의 이전 값과 새 값 사이에서 자동으로 애니메이션을 적용합니다. null인 속성은 애니메이션이 적용되지 않습니다. 자식 및 하위 항목도 애니메이션이 적용되지 않습니다.

이 클래스는 내부 AnimationController 를 사용하여 Container 의 여러 매개변수 간에 간단한 암시적 전환을 생성하는 데 유용합니다. 더 복잡한 애니메이션의 경우 DecoratedBoxTransition 과 같은 AnimatedWidget 의 하위 클래스를 사용하거나 자체 AnimationController 사용하는 것이 좋습니다.

 

https://youtu.be/yI-8QHpGIP4

공식 문서 코드

 


AnimatedContainer 는 우리가 앱을 제작할 때에 디자인적 요소에 있어서 정말 빠질 수 없는 부분을 채워주는 위젯이다.

"정말 빠질 수 없는 부분"은 바로 유연한, 유동적인, 움직이는 레이아웃을 말하는 것인데 애니메이션이 들어간 것과 들어가지 않은 것에 대한 차이는 말하지 않아도 알 것이다.

 

일단 이 위젯은 사용하기가 굉장히 쉽다. 그 이유가 어째서냐면 이 위젯은 그냥 컨테이너이기 때문이다.

그렇다. 그냥 컨테이너랑 다른 점이라고는 값이 바뀌면 알아서 그에 따라 애니메이션이 되고 듀레이션이 있다는 정도밖에 없다.

그래서 사용 또한 굉장히 쉬운 것인데 먼저 하위 속성을 알고 가자.

 

하위 속성
속성명 타입 기본값 설명
child Widget? - 내부에 배치될 자식 위젯
alignment AlignmentGeometry? null 자식 위젯을 정렬할 위치 지정
padding EdgeInsetsGeometry null 자식 위젯 주변의 내부 여백
color Color? - 단색 배경 색상 (단독 사용 시 decoration 대신 가능)
decoration Decoration? null 배경 및 테두리 등 장식 효과
foregroundDecoration Decoration? null 자식 위젯 위에 덧씌울 장식 효과
width double? - 컨테이너 너비
height double? - 컨테이너 높이
constraints BoxConstraints? null 자식 위젯에 적용할 추가 제약 조건
margin EdgeInsetsGeometry? null 컨테이너 외부 여백
transform Matrix4? null 컨테이너에 적용할 변형 행렬
transformAlignment AlignmentGeometry? null 변형 기준 정렬 (transform 사용 시만 유효)
clipBehavior Clip.none Clip.none 데코레이션이 있을 때 잘라내기 여부
curve Curve Curves.linear 애니메이션 스타일
duration Duration (필수) 애니메이션 지속 시간
onEnd VoidCallback? null 애니메이션 종료 시 콜백 함수

 

어우 역시 컨테이너라 들어가는 하위 속성이 많긴 하다;;

일단 어떻게 동작되는지 알아보자. 영상에 나와 있다시피 값이 다른 값으로 바뀔 때면 setState로 호출을 해야 한다고 나와있다.

그렇다. 당연한 것이지만 이 위젯은 단독으로는 사용 못 한다. 무조건 뭐 값을 생성해서 연결해야 하는 숙명인 것이다.

 

사용법은 간단하다.

AnimatedContainer(
  duration: Duration(seconds: 2),
  height: isToggled ? 200 : 100,
  width: isToggled ? 150 : 75,
  // TODO Try Anything!!
),

required 값인 duration 을 넣어주고 넣고 싶은 아무 값이나 넣어서 삼항연산자로 만들든 if 문으로 만들든 그냥 만들면 된다.

 

난 이걸 사용할 때에 처음에 이런 의문이 들었다. "듀레이션 값도 설정했고 값도 정상적으로 바뀌는데 이제 애니메이션은 어떻게 주는 거지?" 이 의문의 대답은 바로 "이미 애니메이션은 들어가 있음" 이였다.

이게 무슨 말이냐 하면 우리가 따로 애니메이션 하는 동작을 넣지 않아도 그냥 값이 바뀌는 것만으로도 알아서 애니메이션 시켜준다는 것이다.

우리가 할 일은 그저 그 애니메이션의 curve 값과 duration 값만 설정해 주면 되는 것이다. 정말 쉽지 않은가? 이게 끝이다.

 

애니메이션 되는 값은 이렇게 있는데

테두리, 테두리 반경, 배경 이미지, 그림자, 그라디언트, 모양, 패딩, 폭, 높이, 정렬, 변형

 

이 모든 것이 애니메이션 된다는 소리이다!

 

허나 애니메이션이 마음에 안들 수 있다. 그럼 이제 어떻게 하는가 하면 맨 처음에 설명했듯이 그냥 AnimatedController 사용해서 직접 애니메이션을 제작하면 된다. 음음

 

갑자기 생각나서 넣은 대 상 혁

 

암튼 이렇게 알아보았는데 도움이 되었길 바라며 마치겠다.

반응형

 

반응형