Flutter 애니메이션 & 전환 효과 완전 정복 — 감성을 더한 부드러운 움직임 만들기

2025. 5. 16. 14:33·Flutter
728x90
반응형

처음으로 Flutter에서 애니메이션을 구현해봤을 때, 마치 정적인 화면에 생명을 불어넣는 기분이었다.
그저 버튼 하나 눌렀을 뿐인데 화면이 부드럽게 전환되고, 크기와 색상이 변화하는 걸 보며 "와... 이래서 Flutter 하는구나" 싶었다.


🎬 Flutter 애니메이션이란?

Flutter에서는 애니메이션을 굉장히 다양한 방식으로 구현할 수 있어요. 대표적으로 다음과 같은 두 가지 방식이 있다.

  • Implicit Animation (암시적 애니메이션) - AnimatedContainer, AnimatedOpacity 등
  • Explicit Animation (명시적 애니메이션) - AnimationController, Tween, AnimatedBuilder 등

🌱 AnimatedContainer 사용 예제 (Implicit)


import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  bool _selected = false;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('AnimatedContainer 예제')),
        body: Center(
          child: GestureDetector(
            onTap: () {
              setState(() {
                _selected = !_selected;
              });
            },
            child: AnimatedContainer(
              width: _selected ? 200 : 100,
              height: _selected ? 100 : 200,
              color: _selected ? Colors.blue : Colors.red,
              alignment:
                  _selected ? Alignment.center : AlignmentDirectional.topCenter,
              duration: Duration(seconds: 1),
              curve: Curves.fastOutSlowIn,
              child: Text(
                "Tap Me!",
                style: TextStyle(color: Colors.white, fontSize: 16),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

이 예제는 AnimatedContainer로 크기와 색상, 위치를 동시에 부드럽게 변화시킨다.
이게 바로 Flutter 애니메이션의 매력!

🔧 AnimationController를 활용한 명시적 애니메이션 (Explicit)

좀 더 세밀한 제어가 필요한 경우, AnimationController를 직접 사용한다.


class FadeInWidget extends StatefulWidget {
  @override
  _FadeInWidgetState createState() => _FadeInWidgetState();
}

class _FadeInWidgetState extends State<FadeInWidget> with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: 2),
    );
    _animation = Tween(begin: 0.0, end: 1.0).animate(_controller);

    _controller.forward(); // 애니메이션 시작
  }

  @override
  void dispose() {
    _controller.dispose(); // 리소스 해제
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return FadeTransition(
      opacity: _animation,
      child: Center(
        child: Text("Fade In 효과!", style: TextStyle(fontSize: 24)),
      ),
    );
  }
}

이 코드는 텍스트가 서서히 나타나는 FadeTransition 예제이다.
다양한 Tween을 활용하면 회전, 이동, 크기 등도 모두 제어할 수 있다.

🧭 PageRouteBuilder로 페이지 전환 애니메이션 만들기


Navigator.of(context).push(
  PageRouteBuilder(
    transitionDuration: Duration(milliseconds: 500),
    pageBuilder: (_, __, ___) => SecondPage(),
    transitionsBuilder: (_, animation, __, child) {
      return SlideTransition(
        position: Tween<Offset>(
          begin: Offset(1.0, 0.0),
          end: Offset.zero,
        ).animate(animation),
        child: child,
      );
    },
  ),
);

SlideTransition을 이용해 페이지가 오른쪽에서 왼쪽으로 슬라이드되며 전환된다. 이외에도 FadeTransition, ScaleTransition 등 다양한 방식이 존재한다.

✨ 마치며

Flutter의 애니메이션은 생각보다 더 간단하고, 상상 이상으로 부드럽다.
화면에 '움직임'을 줄 수 있다는 건, 단지 보기 좋게 만드는 걸 넘어 사용자 경험 자체를 바꾼다.
지금까지 만든 화면이 정적이라면, 오늘부터는 작은 움직임 하나 넣어보는 건 어떨까?

✍️ 이 글은 터미널 밖으로 나온 개발자의 Flutter 여정입니다.

728x90
반응형

'Flutter' 카테고리의 다른 글

CustomPainter 완전 정복 — Flutter에서 나만의 캔버스를 그려보자  (0) 2025.05.22
Flutter에서 HTTP로 서버 데이터 불러오기 — 작은 연결이 만들어내는 큰 변화  (0) 2025.05.19
Flutter에서 화면 전환은 이렇게! – Navigator 완전 정복 🌈  (0) 2025.05.15
Flutter ListView로 다이나믹 UI 만들기 — 반복되는 위젯을 더 똑똑하게 그리는 법  (0) 2025.05.15
Flutter Provider 완전 정복 — 상태 관리의 정석을 담다  (0) 2025.05.14
'Flutter' 카테고리의 다른 글
  • CustomPainter 완전 정복 — Flutter에서 나만의 캔버스를 그려보자
  • Flutter에서 HTTP로 서버 데이터 불러오기 — 작은 연결이 만들어내는 큰 변화
  • Flutter에서 화면 전환은 이렇게! – Navigator 완전 정복 🌈
  • Flutter ListView로 다이나믹 UI 만들기 — 반복되는 위젯을 더 똑똑하게 그리는 법
코드를 걷는 사람
코드를 걷는 사람
devwanderer 님의 블로그 입니다.
  • 코드를 걷는 사람
    터미널 밖으로 나온 개발자
    코드를 걷는 사람
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • Flutter
        • Flutter 게시판 앱 만들기
        • Flutter 뉴스 앱 만들기
        • Flutter 메모 앱 만들기
        • Flutter 캘린더 앱 만들기
        • Flutter 날씨 앱 만들기
      • Next.js
      • Ruby On Rails N
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Firebase
    ActiveRecord
    모바일앱개발
    코드를걷는사람
    UIUX
    다크모드
    정적사이트
    UI디자인
    북마크기능
    flutter디자인
    flutter상태관리
    Flutter
    개발블로그
    openweather
    Nextjs
    flutter개발
    뉴스앱
    메모앱
    flutter앱개발
    캘린더앱
    RubyOnRails
    백엔드개발
    flutterui
    flutter게시판
    fluttertips
    flutter기초
    감성앱
    rails보안
    날씨앱
    table_calendar
  • 최근 댓글

  • 최근 글

  • 반응형
    250x250
  • hELLO· Designed By정상우.v4.10.3
코드를 걷는 사람
Flutter 애니메이션 & 전환 효과 완전 정복 — 감성을 더한 부드러운 움직임 만들기
상단으로

티스토리툴바