본문 바로가기
Flutter/Widget

플러터에서 AnimatedCrossFade 사용 방법 및 옵션

by Maccrey Coding 2024. 8. 6.
반응형

 

 

AnimatedCrossFade 위젯은 플러터에서 두 위젯 간의 전환을 애니메이션으로 부드럽게 표현할 때 사용되는 위젯입니다.

주로 두 개의 위젯이 서로 다른 상태를 나타내거나, 특정 조건에 따라 하나의 위젯을 다른 위젯으로 대체할 때 사용됩니다.

이 포스트에서는 AnimatedCrossFade 위젯의 기본 사용법과 다양한 옵션을 설명하겠습니다.

 

AnimatedCrossFade는 플러터에서 두 위젯 간의 전환을 매끄럽게 처리하는 데 사용됩니다.

이 위젯은 현재 표시되는 위젯과 전환할 위젯을 정의하고, 이 두 위젯 간의 전환 애니메이션을 제공합니다.

1. AnimatedCrossFade 기본 사용법

AnimatedCrossFade는 firstChild와 secondChild 두 개의 자식 위젯을 가지고 있으며, 이 두 위젯 사이의 전환을 처리합니다. 기본 사용법은 다음과 같습니다.

class CrossFadeExample extends StatefulWidget {
  @override
  _CrossFadeExampleState createState() => _CrossFadeExampleState();
}

class _CrossFadeExampleState extends State<CrossFadeExample> {
  bool _showFirst = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('AnimatedCrossFade 예제'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            AnimatedCrossFade(
              duration: Duration(seconds: 1),
              firstChild: Container(
                width: 200.0,
                height: 200.0,
                color: Colors.blue,
                child: Center(
                  child: Text(
                    '첫 번째 위젯',
                    style: TextStyle(color: Colors.white, fontSize: 20),
                  ),
                ),
              ),
              secondChild: Container(
                width: 200.0,
                height: 200.0,
                color: Colors.red,
                child: Center(
                  child: Text(
                    '두 번째 위젯',
                    style: TextStyle(color: Colors.white, fontSize: 20),
                  ),
                ),
              ),
              crossFadeState: _showFirst
                  ? CrossFadeState.showFirst
                  : CrossFadeState.showSecond,
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                setState(() {
                  _showFirst = !_showFirst;
                });
              },
              child: Text('전환'),
            ),
          ],
        ),
      ),
    );
  }
}

위 코드에서 AnimatedCrossFade는 firstChild와 secondChild 두 개의 자식 위젯을 정의하고, 버튼을 눌렀을 때 두 위젯 간의 전환을 애니메이션으로 보여줍니다.

2. AnimatedCrossFade의 주요 옵션

2.1 duration

애니메이션의 지속 시간을 설정합니다. Duration 객체를 사용하여 초, 밀리초 등을 지정할 수 있습니다.

duration: Duration(seconds: 1),

2.2 firstChild와 secondChild

전환할 두 위젯을 설정합니다. firstChild는 처음에 표시될 위젯이고, secondChild는 전환될 위젯입니다.

2.3 crossFadeState

현재 어떤 위젯을 표시할지 결정하는 상태입니다. CrossFadeState.showFirst와 CrossFadeState.showSecond 중 하나를 선택합니다.

crossFadeState: _showFirst ? CrossFadeState.showFirst : CrossFadeState.showSecond,

2.4 sizeCurve

애니메이션의 크기 변화를 정의하는 곡선(Curve)입니다. 기본값은 Curves.linear입니다.

sizeCurve: Curves.easeInOut,

2.4.1. Curves.linear: 선형 애니메이션으로, 일정한 속도로 애니메이션이 진행됩니다.

2.4.2. Curves.easeIn: 애니메이션이 천천히 시작하여 점점 빨라집니다.

2.4.3. Curves.easeOut: 애니메이션이 빠르게 시작하여 점점 느려집니다.

2.4.4. Curves.easeInOut: 애니메이션이 천천히 시작해서 중간에 빨라졌다가, 다시 천천히 끝납니다.

2.4.5. Curves.bounceIn: 애니메이션이 튕기듯이 시작합니다.

2.4.6. Curves.bounceOut: 애니메이션이 튕기듯이 종료됩니다.

2.4.7. Curves.elasticIn: 애니메이션이 고무줄처럼 시작할 때 작은 진동을 일으킵니다.

2.4.8. Curves.elasticOut: 애니메이션이 고무줄처럼 끝날 때 작은 진동을 일으킵니다.

2.5 reverseDuration

전환이 역방향으로 일어날 때의 지속 시간을 설정합니다. 기본값은 duration과 동일합니다.

reverseDuration: Duration(seconds: 1),

3. 사용 예시

다음은 AnimatedCrossFade 위젯의 다양한 옵션을 활용한 예제입니다.

AnimatedCrossFade(
  duration: Duration(milliseconds: 500),
  firstChild: Image.asset('assets/images/picture1.png'),
  secondChild: Image.asset('assets/images/picture2.png'),
  crossFadeState: _isFirstImage ? CrossFadeState.showFirst : CrossFadeState.showSecond,
  sizeCurve: Curves.easeInOut,
  reverseDuration: Duration(milliseconds: 700),
)

이 예제에서는 AnimatedCrossFade를 사용하여 두 이미지를 전환합니다.

애니메이션의 지속 시간과 크기 변화를 위한 곡선 등을 커스터마이징했습니다.

결론

AnimatedCrossFade는 플러터에서 두 위젯 간의 전환을 부드럽게 처리할 수 있는 유용한 위젯입니다.

이를 사용하여 애니메이션을 추가하면 사용자 경험을 개선할 수 있습니다.

이 포스트가 AnimatedCrossFade 위젯의 사용 방법을 이해하는 데 도움이 되었기를 바랍니다.

다양한 옵션을 활용하여 여러분의 앱에 맞는 애니메이션을 구현해보세요!

 

Starting Google Play App Distribution! "Tester Share" for Recruiting 20 Testers for a Closed Test.

 

Tester Share [테스터쉐어] - Google Play 앱

Tester Share로 Google Play 앱 등록을 단순화하세요.

play.google.com

 

 

 

반응형