ListView.builder는 Flutter에서 대량의 아이템을 효율적으로 표시할 때 사용하는 위젯입니다. 특히, 동적으로 생성되는 리스트를 처리할 때 유용합니다. 이 섹션에서는 ListView.builder의 사용법을 코드와 함께 상세히 설명하겠습니다.
ListView.builder는 화면에 표시되는 아이템만 생성하고, 스크롤할 때 필요한 아이템을 동적으로 생성합니다. 이를 통해 성능을 최적화할 수 있습니다.
대량의 데이터를 렌더링할 때 메모리와 성능을 효과적으로 관리할 수 있습니다.
HomeScreen에서 사용된 부분):ListView.builder(
itemCount: schedules.containsKey(selectedDay)
? schedules[selectedDay]!.length
: 0, // 아이템의 개수
itemBuilder: (BuildContext context, int index) {
// 선택된 날짜의 일정 리스트 가져오기
final selectedSchedules = schedules[selectedDay]!;
final scheduleModel = selectedSchedules[index];
// 각 일정 데이터를 ScheduleCard 위젯으로 변환
return ScheduleCard(
startTime: scheduleModel.startTime,
endTime: scheduleModel.endTime,
color: Color(
int.parse(
'FF${scheduleModel.color}', // 16진수 색상 문자열을 Color로 변환
radix: 16,
),
),
content: scheduleModel.content,
);
},
),
itemCountselectedDay에 해당하는 일정이 있는지 확인 후, 일정 개수를 반환.itemCount: schedules.containsKey(selectedDay)
? schedules[selectedDay]!.length
: 0,
schedules.containsKey(selectedDay)는 선택된 날짜에 일정이 있는지 확인.0을 반환해 빈 리스트를 표시.itemBuildercontext: 위젯 트리의 컨텍스트.index: 현재 생성되는 아이템의 인덱스.itemBuilder: (BuildContext context, int index) {
final selectedSchedules = schedules[selectedDay]!; // 해당 날짜의 일정 리스트
final scheduleModel = selectedSchedules[index]; // 해당 인덱스의 일정 데이터
return ScheduleCard( // 일정 데이터를 기반으로 UI 생성
startTime: scheduleModel.startTime,
endTime: scheduleModel.endTime,
color: Color(
int.parse(
'FF${scheduleModel.color}', // 16진수 색상 문자열을 Color로 변환
radix: 16,
),
),
content: scheduleModel.content,
);
},
itemBuilder는 index를 기반으로 리스트의 각 요소를 생성합니다.ScheduleCard라는 커스텀 위젯으로 일정 데이터를 표시.ListView.builder 기본 구조:ListView.builder(
itemCount: <아이템 총 개수>, // 표시할 아이템 개수
itemBuilder: (BuildContext context, int index) {
// index를 기반으로 UI 생성
return <각 아이템의 위젯>;
},
);
itemCount 결정selectedDay에 해당하는 일정 데이터를 확인해 총 아이템 개수를 반환.
schedules.containsKey(selectedDay)
? schedules[selectedDay]!.length
: 0,
itemBuilder로 아이템 생성itemBuilder는 각 인덱스에 해당하는 데이터를 기반으로 UI를 생성.
final selectedSchedules = schedules[selectedDay]!; // 선택된 날짜의 일정 리스트
final scheduleModel = selectedSchedules[index]; // 해당 인덱스의 일정 데이터
return ScheduleCard(
startTime: scheduleModel.startTime,
endTime: scheduleModel.endTime,
color: Color(
int.parse(
'FF${scheduleModel.color}',
radix: 16,
),
),
content: scheduleModel.content,
);
대량의 데이터 처리 최적화:
동적 UI 생성:
인덱스 기반 제어:
itemBuilder에서 제공되는 index를 사용해 각 데이터를 처리.위 코드를 사용하면 다음과 같은 UI를 얻을 수 있습니다:
ListView.builder(
itemCount: 5, // 총 5개의 아이템
itemBuilder: (BuildContext context, int index) {
return ListTile(
title: Text('Item $index'), // 각 아이템에 인덱스 표시
);
},
);
Item 0
Item 1
Item 2
Item 3
Item 4ListView.builder와 ListView의 차이점은?ListView는 모든 아이템을 한 번에 생성.ListView.builder는 스크롤할 때 필요한 아이템만 동적으로 생성.itemBuilder에서 UI 외에 데이터를 처리해도 되나요?ListView.builder는 Flutter에서 대량의 데이터를 효율적으로 렌더링하는 데 최적화된 도구입니다.
위 예제는 실제 프로젝트에서 자주 사용되는 일정 관리 UI를 보여주며, ListView.builder를 활용한 동적 UI 구성의 좋은 사례입니다.
ListView.builder를 활용하면 성능을 유지하면서도 유연하게 데이터를 처리할 수 있습니다. 필요한 경우, 추가적인 성능 최적화 옵션인 ListView.separated나 ListView.custom도 검토해보세요! 🚀