[flutter] 플러터(expandable)와 관련된 개발 팁 및 트릭

플러터는 Google에서 제작한 크로스 플랫폼 개발 프레임워크로, 사용자 인터페이스를 빠르고 간편하게 구축할 수 있습니다. 플러터의 중요한 기능 중 하나는 확장 가능한 위젯인 Expandable입니다. Expandable 위젯을 사용하여 사용자에게 추가 정보를 보여줄 수 있는 확장 가능한 섹션을 생성할 수 있습니다. 이번 글에서는 플러터에서 Expandable을 사용할 때 유용한 팁과 트릭을 소개하겠습니다.

1. Expandable 위젯 사용법

Expandable 위젯은 확장 가능한 섹션을 만들기 위해 사용됩니다. 기본적으로 위젯을 누르면 확장/축소가 토글됩니다.

Expandable(
  collapsed: Text('더 보기'),
  expanded: Column(
    children: [
      Text('추가 정보 1'),
      Text('추가 정보 2'),
    ],
  ),
),

위의 코드에서 collapsed 속성은 위젯이 축소된 상태에서 보여질 내용을 정의하고, expanded 속성은 위젯이 확장된 상태에서 보여질 내용을 정의합니다.

2. 커스텀 애니메이션 추가하기

Expandable 위젯에 커스텀 애니메이션을 추가하면 더욱 흥미로워질 수 있습니다. 플러터에서는 AnimationControllerAnimation 클래스를 사용하여 애니메이션 효과를 쉽게 구현할 수 있습니다.

class CustomExpandable extends StatefulWidget {
  @override
  _CustomExpandableState createState() => _CustomExpandableState();
}

class _CustomExpandableState extends State<CustomExpandable>
    with SingleTickerProviderStateMixin {
  AnimationController _animationController;
  Animation<double> _animation;
  bool _expanded = false;

  @override
  void initState() {
    super.initState();
    _animationController = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 300),
    );

    _animation = CurvedAnimation(
      parent: _animationController,
      curve: Curves.easeInOut,
    );
  }

  @override
  Widget build(BuildContext context) {
    return GestureDetector(
      onTap: _toggleExpand,
      child: AnimatedBuilder(
        animation: _animation,
        builder: (context, child) {
          return SizeTransition(
            sizeFactor: _animation,
            axisAlignment: -1.0,
            child: Column(
              children: [
                Text('더 보기'),
                if (_expanded)
                  Text('추가 정보 1'),
                if (_expanded)
                  Text('추가 정보 2'),
              ],
            ),
          );
        },
      ),
    );
  }

  void _toggleExpand() {
    setState(() {
      _expanded = !_expanded;
      if (_expanded) {
        _animationController.forward();
      } else {
        _animationController.reverse();
      }
    });
  }

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

위의 코드에서 CustomExpandable 위젯은 _expanded 변수를 사용하여 확장/축소 상태를 유지합니다. SizeTransition 위젯을 사용하여 애니메이션 효과를 적용하고, AnimatedBuilder를 사용하여 애니메이션을 지속적으로 업데이트합니다.

3. 확장 가능한 섹션의 스타일 변경하기

Expandable 위젯의 스타일을 변경하여 개인적인 취향에 맞게 꾸밀 수 있습니다. 다음은 일반적인 스타일 변경 방법의 예입니다.

Expandable(
  collapsed: Text('더 보기'),
  expanded: Column(
    children: [
      Text('추가 정보 1'),
      Text('추가 정보 2'),
    ],
  ),
  iconColorCollapsed: Colors.grey,
  iconColorExpanded: Colors.blue,
  collapsedTextColor: Colors.black,
  expandedTextColor: Colors.red,
  animationDuration: Duration(milliseconds: 500),
),

위의 코드에서 iconColorCollapsed, iconColorExpanded는 확장/축소 아이콘의 색상을 변경합니다. collapsedTextColor, expandedTextColor는 텍스트의 색상을 변경합니다. animationDuration은 애니메이션의 지속 시간을 설정합니다.

플러터에서는 다양한 스타일 변경 옵션을 제공하므로, 원하는 스타일로 확장 가능한 섹션을 디자인할 수 있습니다.

결론

이번 글에서는 플러터의 Expandable 위젯을 사용하는 방법과 유용한 팁을 살펴보았습니다. Expandable을 통해 사용자에게 추가 정보를 제공하거나 세부 사항을 표시하는 확장 가능한 섹션을 쉽게 구현할 수 있습니다. 또한, 커스텀 애니메이션을 추가하여 동적인 UI를 만들어내거나, 스타일을 변경하여 더욱 다채로운 사용자 경험을 제공할 수 있습니다. 플러터를 활용하여 다양한 앱 개발에 활용해 보세요.