[flutter] 플러터 ExpansionPanel 소개

안녕하세요! 오늘은 플러터(Flutter)의 ExpansionPanel 위젯에 대해 소개하려고 합니다. ExpansionPanel은 플러터에서 제공하는 펼침 패널 위젯으로, UI에 펼쳐지고 접힐 수 있는 기능을 제공합니다.

ExpansionPanel 위젯 이해하기

ExpansionPanel 위젯은 펼쳐지고 접힐 수 있는 패널을 만들기 위해 사용됩니다. 각 패널은 ExpansionPanelHeader와 ExpansionPanelBody로 이루어져 있습니다. ExpansionPanelHeader는 패널의 상단에 표시되며 펼침/접힘 기능을 담당합니다. ExpansionPanelBody는 패널의 내용을 담고 있는 부분입니다.

ExpansionPanelList 위젯

ExpansionPanelList 위젯은 ExpansionPanel 위젯들의 리스트로 구성된 위젯입니다. 여러 개의 ExpansionPanel 위젯을 동적으로 생성하고 관리할 수 있습니다. ExpansionPanelList 위젯은 일반적으로 ListView나 SingleChildScrollView와 함께 사용됩니다.

ExpansionPanelList(
  expansionCallback: (int index, bool isExpanded) {
    setState(() {
      // 패널의 확장/축소 상태를 업데이트
    });
  },
  children: [
    ExpansionPanel(
      headerBuilder: (BuildContext context, bool isExpanded) {
        return ListTile(
          title: Text("패널 1"),
        );
      },
      body: ListTile(
        title: Text("패널 1의 내용"),
      ),
      isExpanded: true, // 패널 초기 확장 상태
    ),
    ExpansionPanel(
      headerBuilder: (BuildContext context, bool isExpanded) {
        return ListTile(
          title: Text("패널 2"),
        );
      },
      body: ListTile(
        title: Text("패널 2의 내용"),
      ),
      isExpanded: false, // 패널 초기 접힘 상태
    ),
  ],
)

ExpansionPanel의 상태 업데이트하기

ExpansionPanelList 위젯 안에서 패널의 확장/축소 상태를 업데이트하기 위해서는 expansionCallback 콜백 함수를 사용해야 합니다. 이 콜백 함수는 외부에서 패널을 확장/축소할 때 호출되며, 인덱스와 현재 확장 상태 값을 매개 변수로 받습니다. 이 콜백 함수에서는 패널의 확장/축소 상태를 업데이트하는 로직을 작성하면 됩니다.

ExpansionPanel 커스터마이징하기

ExpansionPanel은 확장 및 접힘 상태에 따라 서로 다른 위젯을 사용할 수 있습니다. headerBuilder 매개 변수를 통해 패널의 상단을 커스터마이즈할 수 있고, body 매개 변수를 통해 패널의 내용을 커스터마이즈할 수 있습니다. 이를 통해 각 패널을 고유한 디자인과 기능으로 구성할 수 있습니다.

ExpansionPanel 사용 시 주의사항

ExpansionPanel을 사용할 때 몇 가지 주의사항이 있습니다. 첫 번째로, ExpansionPanel의 리스트가 많아질 경우 위젯의 재생성 및 렌더링이 많이 발생할 수 있으므로 성능에 영향을 줄 수 있습니다. 이를 해결하기 위해 ExpansionPanel 위젯을 ListView.builder나 ListView.separated와 같이 사용할 수도 있습니다.

두 번째로, ExpansionPanelList 위젯의 상태를 관리할 때는 StatefulWidget을 사용해야 합니다. 패널의 확장/축소 상태를 변경하기 위해 setState 함수를 사용하는 방식이기 때문입니다.

마치며

위에서 설명한 것처럼, 플러터의 ExpansionPanel 위젯은 UI에 펼침/접힘 기능을 간단하게 구현할 수 있는 매우 유용한 도구입니다. ExpansionPanelList와 함께 사용하여 각 패널을 동적으로 관리하고, 확장/축소 상태를 업데이트할 수 있습니다. 많은 종류의 앱에서 유연하게 사용할 수 있는 위젯이니, 기억해두시기 바랍니다.

참고: Flutter ExpansionPanel 클래스 문서