パッケージ、リポジトリ、アプリカテゴリを検索

パッケージ詳細v1.2.0

combos

Flutter用のコンボウィジェット。Combo、AwaitCombo、ListCombo、SelectorCombo、TypeaheadCombo、MenuItemCombo を含む

30日間ダウンロード
58
いいね数
21
Pub ポイント
40

パッケージをインストール

flutter pub add combos

パッケージ概要

公開情報に基づく選定ガイドです。参考としてご利用ください。

Combos は、ドロップダウンや選択ベースのインタラクションに特に適した、一般的な UI パターンを簡素化するための専用コンビネーションウィジェットのコレクションを提供する Flutter パッケージです。Asyncデータロード、リストレンダリング、タイプアヘッド検索機能など、特定のユースケースに合わせてカスタマイズされた Combo、AwaitCombo、ListCombo、SelectorCombo、TypeaheadCombo、MenuItemCombo などのウィジェットが含まれます。これらのコンポーネントは、フォーム入力やナビゲーションメニューにおいて再利用可能で一貫性があり、カスタマイズ可能なソリューションを提供することで、Flutter アプリケーションにおける開発者の生産性を向上させます。

用途

  • 動的オプションを備えたフォーム入力
  • タイプアヘッド検索フィールド
  • ドロップダウンでの非同期データ読み込み
  • カスタマイズ可能なメニュー項目のレンダリング
  • リストベースの選択インターフェース
  • 動的フォームフィールドの依存関係

主な機能

  • 一般的なパターン向けの事前構築されたコンボウィジェット
  • AwaitCombo を通じた非同期データのサポート
  • フィルタリング付きのタイプヘッド入力
  • 柔軟なリストおよびセレクタの統合
  • 再利用可能で組み合わせ可能なデザイン
  • ウィジェット間で一貫したクリーンな API

適している対象

  • 複雑なドロップダウンを持つフォームを開発している開発者
  • 再利用可能な選択コンポーネントが必要なチーム
  • 検索可能または動的リストを必要とするアプリ
  • UXの一貫性に焦点を当てたFlutterプロジェクト
  • コンボのボイラープレートを減らしたい開発者

注意事項

  • 制限されたプラットフォーム固有のカスタマイズ
  • 組み込みのテーマサポートなし
  • 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);
  },
)

カテゴリー

ソースリポジトリ

このパッケージを使用しているプロジェクト

データはまだありません。