[flutter] ExpansionPanelList의 패널 내용 비동기로 로드하기
ExpansionPanelList는 사용자가 확장/축소할 수 있는 패널 목록을 제공하는 Flutter 위젯입니다. 이 위젯을 사용하여 다른 내용을 포함하는 패널을 만들 수 있습니다. 그러나 패널의 내용이 비동기로 로드되어야 하는 경우 어떻게 처리해야 할까요?
비동기로 패널 내용 로드하기
ExpansionPanelList 위젯은 패널 목록을 위해 ExpansionPanelWidget 리스트로 구성됩니다. 각 패널은 ExpansionPanelWidget의 속성을 사용하여 제목(Header)과 본문(Body) 위젯으로 구성됩니다. 따라서 비동기적으로 패널 내용을 로드하려면 ExpansionPanelWidget의 Body 위젯을 사용하여 비동기 데이터를 처리하는 것이 좋습니다.
다음은 ExpansionPanelWidget의 간단한 예시입니다.
ExpansionPanelWidget(
headerBuilder: (BuildContext context, bool isExpanded) {
return ListTile(
title: Text('패널 제목'),
);
},
body: FutureBuilder(
future: _loadPanelContent(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
if (snapshot.connectionState == ConnectionState.waiting) {
return CircularProgressIndicator();
} else if (snapshot.hasError) {
return Text('로드 중 오류가 발생했습니다.');
} else {
return Text(snapshot.data);
}
},
),
isExpanded: _isPanelExpanded,
);
위의 코드에서 headerBuilder
는 패널의 제목을 생성하는 데 사용되는 위젯을 반환하는 콜백 함수입니다. body
속성은 FutureBuilder를 사용하여 비동기 데이터를 처리하는 본문 위젯을 만듭니다. _loadPanelContent
는 비동기 로직이 들어가는 함수로, 데이터를 가져오는 비동기 작업을 수행합니다.
참고사항
- 비동기 데이터를 불러오는 방식은 주로 Future나 Stream을 이용합니다.
- FutureBuilder 위젯을 사용하여 비동기 작업의 상태에 따라 다른 위젯을 표시할 수 있습니다.
- FutureBuilder의
future
속성에는 비동기 작업을 호출하는 함수를 넣어주면 됩니다.
더 자세한 내용은 Flutter 공식 문서를 참조하세요.