패키지, 저장소 및 앱 카테고리 검색

패키지 상세v1.2.0

combos

Flutter용 콤보 위젯. Combo, AwaitCombo, ListCombo, SelectorCombo, TypeaheadCombo, MenuItemCombo 포함

30일 다운로드
58
좋아요
21
Pub 점수
40

패키지 설치

flutter pub add combos

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

Combos는 드롭다운 및 선택 기반 상호작용에 특히 적합한 일반적인 UI 패턴을 단순화하기 위해 설계된 전문적인 조합 위젯의 컬렉션을 제공하는 Flutter 패키지입니다. 비동기 데이터 로딩, 리스트 렌더링, 타이핑 힌트 검색 기능 등 특정 사용 사례에 맞게 최적화된 Combo, AwaitCombo, ListCombo, SelectorCombo, TypeaheadCombo, MenuItemCombo 등의 위젯을 포함합니다. 이러한 구성 요소는 폼 입력 및 네비게이션 메뉴에서 재사용 가능하고 일관되며 사용자 정의 가능한 솔루션을 제공함으로써 Flutter 애플리케이션에서 개발자의 생산성을 향상시킵니다.

사용 사례

  • 동적 옵션을 가진 폼 입력
  • 타이핑 힌트 검색 필드
  • 드롭다운에서 비동기 데이터 로딩
  • 사용자 지정 메뉴 항목 렌더링
  • 리스트 기반 선택 인터페이스
  • 동적 폼 필드 종속성

주요 기능

  • 일반적인 패턴을 위한 사전 빌드된 커뮤니티 위젯
  • AwaitCombo를 통한 비동기 데이터 지원
  • 필터링이 있는 타입헤드 입력
  • 유연한 목록 및 선택기 통합
  • 재사용 가능하고 조합 가능한 디자인
  • 위젯 간에 일관된 깨끗한 API

적합한 대상

  • 복잡한 드롭다운을 사용하는 폼을 개발하는 개발자
  • 재사용 가능한 선택 컴포넌트가 필요한 팀
  • 검색 가능 또는 동적 목록이 필요한 앱
  • UX 일관성에 중점을 둔 플러터 프로젝트
  • 콤보에 대한 반복 코드를 줄이고 싶은 개발자

고려 사항

  • 제한된 플랫폼별 사용자 지정
  • 내장된 테마 지원 없음
  • Flutter 위젯 조합에 대한 이해 필요
  • 패키지 크기가 약간 증가할 수 있습니다
  • 페이지네이션 없이 대규모 데이터 세트에 최적화되지 않음

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

Combos

About

Combo widgets for Flutter.

Install instructions

Docs

Online Samples

alt text

Includes:

  • Combo - Simple combo widget for custom child and popup content.
  • AwaitCombo - Combo widget with delayed popup content builder for loading data with the progress indication
  • ListCombo - Combo widget for displaying items list
  • SelectorCombo - Combo widget for displaying items list with selected value
  • TypeaheadCombo - Typeahead widget with the text input and custom 'search' method
  • MenuItemCombo - Menu item widget for displaying popup menus
Examples
  • Combo
Combo(
  child: const Padding(
    padding: EdgeInsets.all(16),
    child: Text('Combo child'),
  ),
  popupBuilder: (context, mirrored) => const Material(
    elevation: 4,
    child: Padding(
      padding:
          EdgeInsets.symmetric(vertical: 48, horizontal: 16),
      child: Center(child: Text('Combo popup')),
    ),
  ),
)
  • AwaitCombo
AwaitCombo(
  child: const Padding(
    padding: EdgeInsets.all(16),
    child: Text('Combo child'),
  ),
  popupBuilder: (context) async {
    await Future.delayed(const Duration(milliseconds: 500));
    return const Material(
      elevation: 4,
      child: Padding(
        padding:
            EdgeInsets.symmetric(vertical: 48, horizontal: 16),
        child: Center(child: Text('Combo popup')),
      ),
    );
  },
)
  • ListCombo
ListCombo<String>(
  child: const Padding(
    padding: EdgeInsets.all(16),
    child: Text('Combo child'),
  ),
  getList: () async {
    await Future.delayed(const Duration(milliseconds: 500));
    return ['Item1', 'Item2', 'Item3'];
  },
  itemBuilder: (context, parameters, item) => ListTile(title: Text(item)),
  onItemTapped: (item) {},
)
  • SelectorCombo
String _item;

...

SizedBox(
  width: 200,
  child: SelectorCombo<String>(
    selected: _item,
    getList: () async {
      await Future.delayed(const Duration(milliseconds: 500));
      return ['Item1', 'Item2', 'Item3'];
    },
    itemBuilder: (context, parameters, item) =>
        ListTile(title: Text(item ?? '<Empty>')),
    onItemTapped: (item) => setState(() => _item = item),
  ),
)
  • TypeaheadCombo
String _item;

...

SizedBox(
  width: 200,
  child: TypeaheadCombo<String>(
    selected: _item,
    getList: (text) async {
      await Future.delayed(const Duration(milliseconds: 500));
      return ['Item1', 'Item2', 'Item3'];
    },
    itemBuilder: (context, parameters, item) =>
        ListTile(title: Text(item ?? '<Empty>')),
    onItemTapped: (item) => setState(() => _item = item),
    getItemText: (item) => item,
    decoration: const InputDecoration(labelText: 'Typeahead'),
  ),
)
  • MenuItemCombo
MenuItemCombo<String>(
  item: MenuItem(
      'File',
      () => [
            MenuItem('New'),
            MenuItem.separator,
            MenuItem('Open'),
            MenuItem('Save'),
            MenuItem('Save As...'),
            MenuItem.separator,
            MenuItem(
                'Recent',
                () => [
                      MenuItem('Folders', () async {
                        await Future.delayed(
                            Duration(milliseconds: 500));
                        return [
                          MenuItem('Folder 1'),
                          MenuItem('Folder 2'),
                          MenuItem('Folder 3'),
                        ];
                      }),
                      MenuItem('Files', () async {
                        await Future.delayed(
                            Duration(milliseconds: 500));
                        return [
                          MenuItem('File 1'),
                          MenuItem('File 2'),
                          MenuItem('File 3'),
                        ];
                      }),
                    ]),
            MenuItem.separator,
            MenuItem('Exit'),
          ]),
  itemBuilder: (context, parameters, item) => Padding(
    padding: const EdgeInsets.all(16),
    child: Text(item.item),
  ),
  onItemTapped: (value) {
    final dialog =
        AlertDialog(content: Text('${value.item} tapped!'));
    showDialog(context: context, builder: (_) => dialog);
  },
)

카테고리

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.