2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Flutter에서 ExpansionTile을 사용하는 방법은 무엇인가요?

_____
Q1: ExpansionTile이란 무엇인가요?
ExpansionTile은 Flutter에서 리스트 항목 내에 숨겨진 내용을 확장하거나 축소하여 보여주는 위젯입니다. 기본적으로 제목과 아이콘을 가지며, 사용자가 탭하면 추가적인 자식 위젯들을 펼쳐서 보여줍니다.

Q2: ExpansionTile을 어떻게 사용하나요?
```dart
ExpansionTile(
title: Text('타이틀'),
children: [
ListTile(title: Text('확장된 내용 1')),
ListTile(title: Text('확장된 내용 2')),
],
)
```
위처럼 `title`에 기본 제목을 넣고, `children`에 확장 시 나타날 위젯 리스트를 추가하면 됩니다.

Q3: ExpansionTile의 주요 속성은 무엇인가요?
- `title`: 기본적으로 보이는 타이틀 위젯
- `leading`: 타이틀 왼쪽에 표시할 위젯(아이콘 등)
- `trailing`: 타이틀 오른쪽에 표시할 위젯(기본 열기/닫기 화살표를 대신할 수 있음)
- `children`: 확장 시 보이는 자식 위젯 목록
- `initiallyExpanded`: 처음부터 확장할지 여부 (`bool`, 기본값 `false`)
- `onExpansionChanged`: 확장/축소 여부가 바뀔 때 호출되는 콜백 함수(`bool` 인자로 확장됐는지 알려줌)
- `backgroundColor`: 확장된 영역 배경색

Q4: ExpansionTile 사용 시 주의할 점은?
- 리스트 내 여러 ExpansionTile을 사용할 경우 각 확장 상태를 별도로 관리해야 하며 상태 관리가 필요할 수 있습니다.
- ExpansionTile은 기본적으로 확장/축소 애니메이션이 내장되어 있으나 커스터마이징이 제한적입니다.
- 중첩된 ExpansionTile을 너무 많이 사용하면 UI가 복잡해질 수 있습니다.

Q5: ExpansionTile의 확장 상태를 프로그래밍적으로 제어할 수 있나요?
ExpansionTile 자체는 상태를 외부에서 직접 조작할 수 있는 컨트롤러를 제공하지 않습니다. `initiallyExpanded` 속성은 초기값만 설정합니다. 따라서 상태 제어가 필요하면 상태를 StatefulWidget에서 관리하고, `key`를 사용하거나 별도의 커스텀 위젯을 만들어야 합니다.

Q6: ExpansionTile 내에서 커스터마이징 가능한 항목은 무엇이 있나요?
- 아이콘을 바꾸려면 `leading` 혹은 `trailing` 속성으로 원하는 위젯을 넣으면 됩니다.
- 배경색을 변경하려면 `backgroundColor`와 `collapsedBackgroundColor` 속성을 활용합니다.
- 텍스트 스타일은 `title`에 사용하는 `Text` 위젯의 스타일을 설정하면 됩니다.

Q7: ExpansionTile을 리스트 형태로 많이 사용할 때 좋은 방법은?
`ListView.builder`와 함께 ExpansionTile을 사용하면 다수의 확장 항목을 효과적으로 렌더링할 수 있습니다. 확장 상태는 각 아이템 별로 별도의 변수를 두고 관리하는 것이 좋습니다.

---

이상으로 Flutter ExpansionTile의 기본 개념, 사용법, 주요 속성 및 활용 팁에 대해 FAQ 형식으로 정리했습니다.
Flutter에서 `ExpansionTile`은 사용자가 클릭할 수 있는 타일 형태의 위젯으로, 타일을 클릭하면 추가적인 정보를 보여주는 방식으로 사용됩니다.

이 위젯은 주로 리스트 형태의 데이터나 카테고리화된 정보를 표시할 때 유용합니다.

아래에서는 `ExpansionTile`의 기본 사용법과 함께 몇 가지 예제를 통해 자세히 설명하겠습니다.

기본 사용법 `ExpansionTile`은 다음과 같은 주요 속성을 가집니다: - `title`: 타일의 제목을 설정합니다.

- `children`: 타일이 확장될 때 보여줄 위젯의 리스트입니다.

- `leading`: 타일의 왼쪽에 표시할 위젯입니다.

- `trailing`: 타일의 오른쪽에 표시할 위젯입니다.

- `initiallyExpanded`: 타일이 처음에 확장된 상태로 시작할지 여부를 설정합니다.

기본 예제 아래는 `ExpansionTile`을 사용하는 간단한 예제입니다.

```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('ExpansionTile 예제'), ), body: ListView( children: [ ExpansionTile( title: Text('타일 1'), children: [ ListTile(title: Text('내용 1')), ListTile(title: Text('내용 2')), ], ), ExpansionTile( title: Text('타일 2'), children: [ ListTile(title: Text('내용 A')), ListTile(title: Text('내용 B')), ], ), ], ), ), ); } } ``` 설명 1. 타일 생성 : `ExpansionTile`을 사용하여 각 타일을 생성합니다.

`title` 속성에 타일의 제목을 설정하고, `children` 속성에 확장될 때 보여줄 위젯을 리스트 형태로 추가합니다.



2. ListView : 여러 개의 `ExpansionTile`을 포함하기 위해 `ListView`로 감싸줍니다.

이렇게 하면 스크롤이 가능해집니다.

고급 사용법 `ExpansionTile`은 다양한 커스터마이징이 가능합니다.

예를 들어, 아이콘을 추가하거나, 타일의 색상을 변경하는 등의 작업이 가능합니다.

```dart ExpansionTile( title: Text('타일 3'), leading: Icon(Icons.expand_more), trailing: Icon(Icons.arrow_forward), initiallyExpanded: false, children: [ ListTile(title: Text('내용 X')), ListTile(title: Text('내용 Y')), ], ) ``` 상태 관리 `ExpansionTile`의 확장 상태를 관리하고 싶다면, `StatefulWidget`을 사용하여 상태를 저장할 수 있습니다.

아래는 상태를 관리하는 예제입니다.

```dart class MyExpansionTile extends StatefulWidget { @override _MyExpansionTileState createState() => _MyExpansionTileState(); } class _MyExpansionTileState extends State { bool _isExpanded = false; @override Widget build(BuildContext context) { return ExpansionTile( title: Text('타일 4'), initiallyExpanded: _isExpanded, onExpansionChanged: (bool expanding) => setState(() => _isExpanded = expanding), children: [ ListTile(title: Text('내용 1')), ListTile(title: Text('내용 2')), ], ); } } ``` 결론 `ExpansionTile`은 Flutter에서 정보를 계층적으로 표시할 수 있는 매우 유용한 위젯입니다.

기본적인 사용법부터 고급 커스터마이징, 상태 관리까지 다양한 방법으로 활용할 수 있습니다.

이를 통해 사용자에게 더 나은 경험을 제공할 수 있습니다.

Flutter의 다양한 위젯과 함께 `ExpansionTile`을 적절히 활용하여 앱의 UI를 더욱 풍부하게 만들어 보세요.

작성자: 정수민 [비회원] | 작성일자: 1년 전 2024-09-19 01:51:27
조회수: 184 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.