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

パッケージ詳細v1.1.0

flutter_tags_x

選択可能で入力可能なタグ(TextField)を作成するのは、これまでになく簡単です。

AndroidiOSWebmacOSWindowsLinux
30日間ダウンロード
2010
いいね数
30
Pub ポイント
140

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

flutter pub add flutter_tags_x

パッケージ概要

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

flutter_tags_x は、選択可能で入力ベースのタグの作成を簡素化するFlutterパッケージであり、事前に定義されたタグとユーザー入力によるタグの両方の機能を統合しています。テキストフィールド、選択状態、および動的なタグ管理を内蔵した直感的なインターフェースを提供します。フォームやフィルター、タグシステムに最適で、複数のプラットフォームでクリーンでカスタマイズ可能なチップコンポーネントにより、ユーザー体験を向上させます。

用途

  • タグの推奨事項付きフォーム入力
  • ユーザー生成コンテンツのタグ付け
  • 選択可能なチップを備えたフィルタインターフェース
  • タグベースの検索機能
  • フォーム内の動的タグ管理
  • 選択可能な項目のインタラクティブリスト

主な機能

  • 事前定義されたタグと入力タグの両方をサポートしています
  • 新しいタグを追加するための組み込みテキストフィールド
  • 選択可能で削除可能なタグチップ
  • カスタマイズ可能なスタイルとテーマ
  • クロスプラットフォーム互換性
  • 既存のフォームロジックとの簡単な統合

適している対象

  • インタラクティブなフォームを構築する開発者
  • タグベースのフィルタリングを必要とするアプリ
  • ユーザー生成コンテンツを含むプロジェクト
  • クリーンなタグUIを望むデザイナー
  • 複数のプラットフォームをターゲットにするチーム

注意事項

  • タグの重複処理に注意が必要です
  • 入力制約用のカスタム検証が必要になる場合があります
  • スタイリングのカスタマイズにはFlutterウィジェットの理解が必要です
  • 大規模なタグリストを使用すると、パフォーマンスの最適化が必要になる場合があります
  • 基本的な入力チェックを超える限定的な組み込み検証

元の README

関連するソースリポジトリの README 原文のスナップショットです。最新の内容はリポジトリをご覧ください。

flutter_tags_x

Create beautiful tags quickly and easily.

Forked from Dn-a/flutter_tags (Not supported)

Installing

Add this to your package's pubspec.yaml file: Null-safety version MORE INFO

dependencies:
  flutter_tags_x: ... # last version

DEMO

Simple usage


import 'package:flutter_tags/flutter_tags.dart';
.
.
.
List _items;
double _fontSize = 14;

@override
void initState(){
    super.initState();
    // if you store data on a local database (sqflite), then you could do something like this
    Model().getItems().then((items){
            _items = items;
        });
}

@override
Widget build(BuildContext context) {
    return Tags(
      key:_tagStateKey,
      textField: TagsTextField(
        textStyle: TextStyle(fontSize: _fontSize),
        constraintSuggestion: true, suggestions: [],
        //width: double.infinity, padding: EdgeInsets.symmetric(horizontal: 10),
        onSubmitted: (String str) {
          // Add item to the data source.
          setState(() {             
             // required             
            _items.add(Item(
                title: str,
                active: true,
                index: 1,                
              ));
          });
        },
      ),
      itemCount: _items.length, // required
      itemBuilder: (int index){          
            final item = _items[index];
    
            return ItemTags(
                  // Each ItemTags must contain a Key. Keys allow Flutter to
                  // uniquely identify widgets.
                  key: Key(index.toString()),
                  index: index, // required
                  title: item.title,
                  active: item.active,
                  customData: item.customData,
                  textStyle: TextStyle( fontSize: _fontSize, ),
                  combine: ItemTagsCombine.withTextBefore,
                  image: ItemTagsImage(
                    image: AssetImage("img.jpg") // OR NetworkImage("https://...image.png")
                  ), // OR null,
                  icon: ItemTagsIcon(
                    icon: Icons.add,
                  ), // OR null,
                  removeButton: ItemTagsRemoveButton(
                    onRemoved: (){
                        // Remove the item from the data source.
                        setState(() {
                            // required
                            _items.removeAt(index);
                        });
                        //required
                        return true;
                    },
                  ), // OR null,
                  onPressed: (item) => print(item),
                  onLongPressed: (item) => print(item),
            );
    
      },
    );    
}

final GlobalKey<TagsState> _tagStateKey = GlobalKey<TagsState>();
// Allows you to get a list of all the ItemTags
_getAllItem(){
    List<Item> lst = _tagStateKey.currentState?.getAllItem;
    if(lst!=null)
        lst.where((a) => a.active==true).forEach( ( a) => print(a.title));        
}

Wrapped widget example

You are free to wrap ItemTags () inside another widget

Tags(  
      itemCount: items.length, 
      itemBuilder: (int index){ 
          return Tooltip(
          message: item.title,
          child:ItemTags(
            title:item.title,
          )
          );
      },
    );    
Tags() parameters
PropName Description default value
columns Possibility to set number of columns when necessary null
itemCount Tag number to display required
symmetry Ability to view and scroll tags horizontally false
horizontalScroll Offset drawer width 0.4
heightHorizontalScroll height for HorizontalScroll to set to display tags correctly 60
spacing Horizontal space between the tags 6
runSpacing Vertical space between the tags 14
alignment Horizontal WrapAlignment WrapAlignment.center
runAlignment Vertical WrapAlignment WrapAlignment.center
direction Direction of the ItemTags Axis.horizontal
verticalDirection Iterate Item from the lower to the upper direction or vice versa VerticalDirection.down
textDirection Text direction of the ItemTags TextDirection.ltr
itemBuilder tag generator
textField add textField TagsTextFiled()
ItemTags() parameters
  • index - required
  • title - required
  • textScaleFactor - custom textScaleFactor
  • active - bool value (default true)
  • pressEnabled - active onPress tag ( default true)
  • customData - Possibility to add any custom value in customData field, you can retrieve this later. A good example: store an id from Firestore document.
  • textStyle - textStyle()
  • alignment - MainAxisAlignment ( default MainAxisAlignment.center)
  • combine - * ability to combine text, icons, images in different ways ( default ItemTagsCombine.imageOrIconOrText)*
  • icon - ItemTagsIcon()
  • image - ItemTagsImage()
  • removeButton - ItemTagsRemoveButton()
  • borderRadius - BorderRadius
  • border - custom border-side
  • padding - default EdgeInsets.symmetric(horizontal: 7, vertical: 5)
  • elevation - default 5
  • singleItem - default false
  • textOverflow - default TextOverflow.fade
  • textColor - default Colors.black
  • textActiveColor - default Colors.white
  • color - default Colors.white
  • activeColor - default Colors.blueGrey
  • highlightColor -
  • splashColor -
  • colorShowDuplicate - default Colors.red
  • onPressed - callback
  • onLongPressed - callback
  • onRemoved - callback

Issues

If you encounter problems, open an issue. Pull request are also welcome.

カテゴリー

ソースリポジトリ

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

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