搜尋套件、儲存庫與 APP 分類

套件詳情v1.2.0

combos

Flutter 的組合元件。包含 Combo、AwaitCombo、ListCombo、SelectorCombo、TypeaheadCombo、MenuItemCombo

近 30 天下載
58
喜歡數
21
Pub 分數
40

安裝套件

flutter pub add combos

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

Combos 是一個 Flutter 套件,提供一系列專門的組合元件,旨在簡化常見的 UI 設計模式,特別是下拉與選擇互動。它包含 Combo、AwaitCombo、ListCombo、SelectorCombo、TypeaheadCombo 和 MenuItemCombo 等元件,每個皆針對特定用途量身打造,例如異步資料載入、清單呈現與自動補完搜尋功能。這些元件透過提供可重複使用、一致且可自訂的解決方案,提升開發者在 Flutter 應用中表單輸入與導覽選單的開發效率。

適用情境

  • 具有動態選項的表單輸入
  • 自動完成搜尋欄位
  • 下拉框中的異步數據加載
  • 可自定義的菜單項渲染
  • 基於列表的選擇介面
  • 動態表單欄位依賴

主要特色

  • 預建構的組合小部件,用於常見模式
  • 透過 AwaitCombo 支援非同步資料
  • 帶過濾功能的自動補全輸入
  • 靈活的清單和選擇器整合
  • 可重複使用且可組合的設計
  • 跨小部件的乾淨、一致的 API

適合對象

  • 開發具有複雜下拉選單的表單的開發者
  • 需要可重用選擇組件的團隊
  • 需要可搜尋或動態列表的應用程式
  • 專注於使用者體驗一致性的Flutter專案
  • 希望減少組合樣板代碼的開發者

使用建議

  • 有限的平台特定自訂
  • 無內建主題支援
  • 需要理解 Flutter widget 組合
  • 可能會稍微增加封裝大小
  • 未針對無分頁的大資料集進行優化

原始 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);
  },
)

所屬分類

原始碼儲存庫

使用此套件的專案

暫無相關資料。