ItemPicker | CoUI

ItemPicker

검색 가능한 단일 선택 아이템 리스트/그리드 피커

ItemPicker#

검색 입력과 함께 문자열 아이템을 리스트 또는 그리드로 나열하여 단일 선택하는 인라인 피커입니다. 검색어를 입력하면 아이템이 대소문자 무시 contains 로 필터링되고, 클릭하면 선택됩니다.

Live Preview#

Web
Fruits
Apple
Banana
Cherry
Mango
Orange
Flutter
Loading Flutter...
class ItemPickerDefaultExample extends StatefulComponent {
  const ItemPickerDefaultExample({super.key});

  @override
  State<ItemPickerDefaultExample> createState() =>
      _ItemPickerDefaultExampleState();
}

class _ItemPickerDefaultExampleState extends State<ItemPickerDefaultExample> {
  String _selected = 'Apple';

  @override
  Component build(BuildContext context) {
    return ItemPicker(
      items: const ['Apple', 'Banana', 'Cherry', 'Mango', 'Orange'],
      selectedValue: _selected,
      title: 'Fruits',
      onChanged: (value) => setState(() => _selected = value),
    );
  }
}
class ItemPickerDefaultExample extends StatefulWidget {
  const ItemPickerDefaultExample({super.key});

  @override
  State<ItemPickerDefaultExample> createState() =>
      _ItemPickerDefaultExampleState();
}

class _ItemPickerDefaultExampleState extends State<ItemPickerDefaultExample> {
  String _selected = 'Apple';

  @override
  Widget build(BuildContext context) {
    return ItemPicker(
      items: const ['Apple', 'Banana', 'Cherry', 'Mango', 'Orange'],
      selectedValue: _selected,
      title: 'Fruits',
      onChanged: (value) => setState(() => _selected = value),
    );
  }
}

사용 시기 (When to Use)#

이 컴포넌트를 사용하세요:

  • 미리 정의된 아이템 목록에서 검색하며 하나를 선택받는 경우
  • 색상·아이콘·템플릿처럼 그리드로 보여줘야 하는 선택지

대신 다른 컴포넌트를 사용하세요:

  • Select: 드롭다운으로 공간을 절약해야 하는 경우
  • Autocomplete: 자유 입력 + 제안이 필요한 경우

기본 사용법 (Basic Usage)#

// 검색 가능한 리스트 피커
ItemPicker(
  items: const ['Apple', 'Banana', 'Cherry'],
  selectedValue: selected,
  onChanged: (value) => setState(() => selected = value),
)

// 그리드 레이아웃
ItemPicker(
  items: items,
  layout: CoreItemPickerLayout.grid,
  gridColumns: 3,
  title: 'Templates',
  onChanged: (value) => pick(value),
)
// 검색 가능한 리스트 피커
ItemPicker(
  items: const ['Apple', 'Banana', 'Cherry'],
  selectedValue: selected,
  onChanged: (value) => setState(() => selected = value),
)

// 그리드 레이아웃
ItemPicker(
  items: items,
  layout: CoreItemPickerLayout.grid,
  gridColumns: 3,
  title: 'Templates',
  onChanged: (value) => pick(value),
)

Props / Parameters#

속성타입기본값설명
items List<String> [] 선택 가능한 아이템 목록
selectedValue String? null 현재 선택된 아이템
searchPlaceholder String? null 검색 입력 placeholder
showSearch bool true 검색 입력 표시 여부
enabledbooltrue상호작용 가능 여부
layout CoreItemPickerLayout list 레이아웃 (list / grid)
gridColumns int 4 그리드 레이아웃의 열 개수
title String? null 아이템 위에 표시할 제목
emptyText String? null 검색 결과 없을 때 표시 텍스트
onChanged ValueChanged<String>? null 아이템 선택 콜백
itemPickerStyle CoreItemPickerStyle? null 컨테이너 / 옵션 색상·테두리 오버라이드

동작 스펙 (Behavior)#

인터랙션#

  • 검색: 검색어 입력 시 대소문자 무시 contains 필터링
  • 클릭: 아이템 클릭 시 선택, 선택 아이템은 체크 아이콘 표시
  • 호버: 마우스 올린 아이템에 hover 색상 적용
  • enabledfalse이면 비활성

접근성 (Accessibility)#

  • 컨테이너: role="listbox", 비활성 시 aria-disabled="true"
  • 각 아이템: role="option" + aria-selected

크로스 플랫폼 차이점 (Platform Differences)#

항목FlutterWeb
클래스명ItemPickerItemPicker
검색 입력TextFieldInput(type: search)
체크 아이콘 Icon(LucideIcons.check) Icon(LucideIcons.check)