[flutter] superellipse 모양을 활용한 플러터 애니메이션 구현하기

플러터(Flutter) 앱을 개발하다보면 애니메이션을 구현해야 할 때가 있습니다. 이번 포스트에서는 Superellipse 모양을 활용한 애니메이션을 구현하는 방법을 알아보겠습니다.

Superellipse란 무엇인가요?

Superellipse는 사각형을 부드럽게 둥글거나 뾰족한 형태로 바꾸는 곡선을 의미합니다. 이를 활용하면 더 다양하고 흥미로운 모양의 애니메이션을 구현할 수 있습니다.

애니메이션 구현하기

먼저, flutter_custom_clippers 패키지를 사용하여 Superellipse 모양의 CustomClipper를 생성합니다. 이 CustomClipper를 사용하여 컨테이너의 모양을 변경하고, 애니메이션을 적용할 수 있습니다.

import 'package:flutter/material.dart';
import 'package:flutter_custom_clippers/flutter_custom_clippers.dart';

class SuperellipseAnimation extends StatefulWidget {
  @override
  _SuperellipseAnimationState createState() => _SuperellipseAnimationState();
}

class _SuperellipseAnimationState extends State<SuperellipseAnimation>
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  late Animation<double> _animation;

  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: Duration(seconds: 2),
    );
    _animation = Tween<double>(begin: 0, end: 4).animate(
      CurvedAnimation(
        parent: _controller,
        curve: Curves.easeInOut,
      ),
    )..addStatusListener((status) {
        if (status == AnimationStatus.completed) {
          _controller.reverse();
        } else if (status == AnimationStatus.dismissed) {
          _controller.forward();
        }
      });

    _controller.forward();
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('Superellipse Animation')),
      body: Center(
        child: AnimatedBuilder(
          animation: _animation,
          builder: (context, child) => ClipPath(
            clipper: SuperellipseClipper(
              // specify the superellipse values based on the animation value
              cornerX: 25 * _animation.value,
              cornerY: 25 * _animation.value,
            ),
            child: Container(
              width: 200,
              height: 200,
              color: Colors.blue,
            ),
          ),
        ),
      ),
    );
  }
}

위 코드에서는 AnimationController를 사용하여 Superellipse 애니메이션을 제어하고, AnimatedBuilder를 통해 애니메이션 값을 받아 컨테이너의 모양을 변경합니다.

Superellipse 모양을 적용한 컨테이너의 애니메이션을 볼 수 있습니다. 이때, flutter_custom_clippers 패키지의 SuperellipseClipper를 사용하여 Superellipse 모양을 적용합니다.

이제, Superellipse 모양을 활용하여 플러터(Flutter) 앱에서 멋진 애니메이션을 구현하는 방법을 알아보았습니다!