flutter_tags 0.3.0

  • README.md
  • CHANGELOG.md
  • Example
  • Installing
  • Versions
  • 95

⭐ Star the repo to support the project or Follow Me

flutter_tags #

pub package Donate

Flutter tags let you create clickable tags or create new ones using textField, adapting perfectly to the width of the screen.

Installing #

Add this to your package's pubspec.yaml file:

dependencies:
  flutter_tags: "^0.3.0"

DEMO #

Example

Demo 1 Demo 2

Selectable Tags #

The Tag class has some optional parameters. If you want to insert an icon, the title is not displayed but you can always use it.

Tag(
    id: 1,// optional
    icon: Icon.home, // optional
    title: 'First Tag', // required
    active: true, // optional
    color: Colors.white, // optional
    activeColor: Colors.blue // optional
)

Simple usage #

import 'package:flutter_tags/selectable_tags.dart';
.
.
.

List<Tag> _tags=[];

@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.forEach((item) =>
            _tags.add(
                Tag(
                    id: item.id,
                    title: item.title, 
                    active: bool.fromEnvironment(item.active) == "true",
                )
            )
        );  
    });
    
}


//Widget
SelectableTags(
    tags: _tags,
    columns: 3, // default 4
    symmetry: true, // default false
    popupMenuBuilder: _popupMenuBuilder,
    popupMenuOnSelected: (int id,Tag tag){
      switch(id){
          case 1:
              Clipboard.setData( ClipboardData(text: tag.title));
              break;
          case 2:
              setState(() {
                  _tags.remove(tag);
              });
      }
    },
    onPressed: (tag) => print(tag),
)

List<PopupMenuEntry> _popupMenuBuilder (Tag tag)
{
    return <PopupMenuEntry>[
      PopupMenuItem(
          child: Text(tag.title, style: TextStyle( color: Colors.blueGrey ) ),
          enabled: false,
      ),
      PopupMenuDivider(),
      PopupMenuItem(
          value: 1,
          child: Row(
              children: <Widget>[
                  Icon(Icons.content_copy),
                  Text("Copy text"),
              ],
          ),
      ),      
    ];
}

void _getActiveTags()
{
    _tags.where((tag) => tag.active).forEach((tag) => print(tag.title));
}

void _getDisableTags()
{
    _tags.where((tag) => !tag.active).forEach((tag) => print(tag.title));
}

All parameters #

  • tags - List 'Tag'
  • columns - max columns (default 4)
  • height - custom height of Tag (default auto-resize)
  • borderRadius - custom border radius (default BorderRadius.circular(_initBorderRadius))
  • borderSide - style border Side
  • boxShadow - List<BoxShadow> of tag
  • symmetry - bool
  • singleItem - default false - same Radiobutton group HTML
  • margin - margin between the tags (default 3)
  • margin - padding of the tags (default 8)
  • alignment - default MainAxisAlignment.center
  • offset - Different characters may have different widths(e.g.: chinese character); (default 28)
  • fontSize - default 14
  • textStyle - if use textStyle, you need to set fontSize in it (the external fontSize will be ignored); if you set color in it will be ignored, you must use textColor/textActiveColor
  • textOverflow - ellipsis, clip...(default fade)
  • textColor - default black
  • textActiveColor - default white
  • color - background color of tag (default white)
  • activeColor - background color of active tag (default green)
  • backgroundContainer - default white
  • popupMenuBuilder - Popup Menu Items
  • popupMenuOnSelected - On Selected Item
  • onPressed - Callback

Input Tags #

Note (Flutter version < 1)

In the console you will receive some errors. InputTags not work properly because textField has some bugs. Bug 1

Simple usage #

import 'package:flutter_tags/input_tags.dart';
.
.
.

List<String> _tags=[];

@override
void initState()
{
    super.initState();
    _tags.addAll(
         [
             'first tag',
             'android world',
             'substring',
             'last tag',
             'enable'
         ]
    );
    
}


//Widget
InputTags(
    tags: _tags,
    suggestionsList: 
    [
        "One",
        "two",
        "android",
        "Dart",
        "flutter",
        "test",
        "tests",
        "androids",
        "Test",
        "suggest",
        "suggestions",
        "last",
        "lest"
    ],
    popupMenuBuilder: _popupMenuBuilder,
    popupMenuOnSelected: (int id,String tag){
      switch(id){
          case 1:
              Clipboard.setData( ClipboardData(text: tag));
              break;
          case 2:
              setState(() {
                  _tags.remove(tag);
              });
      }
    },
    onDelete: (tag) => print(tag),
    onInsert: (tag) => print(tag),
)

List<PopupMenuEntry> _popupMenuBuilder ( String tag)
{
    return <PopupMenuEntry>[
      PopupMenuItem(
          child: Text(tag, style: TextStyle( color: Colors.blueGrey ) ),
          enabled: false,
      ),
      PopupMenuDivider(),
      PopupMenuItem(
          value: 1,
          child: Row(
              children: <Widget>[
                  Icon(Icons.content_copy),
                  Text("Copy text"),
              ],
          ),
      ),      
    ];
}

void _getTags()
{
    _tags.forEach((tag) => print(tag));
}

All parameters #

  • tags - List 'String'
  • columns - max columns (default 4)
  • autofocus - default true
  • inputDecoration - textInput style
  • maxLength - max length of textField (int)
  • keyboardType - TextInputType
  • height - custom height of Tag (default auto-resize)
  • borderRadius - custom border radius (default BorderRadius.circular(_initBorderRadius))
  • boxShadow - List<BoxShadow> of tag
  • symmetry - default false
  • textFieldHidden - default false
  • margin - margin between the tags (default 3)
  • padding - padding of the tags (default left: 10)
  • alignment - default MainAxisAlignment.center
  • offset - default 3
  • duplicate - allows you to insert duplicates (default false)
  • fontSize - default 14
  • textColor - Removed. now it can be set with textStyle
  • lowerCase - default false
  • textStyle - if use textStyle, you need to set fontSize in it (the external fontSize will be ignored)
  • textOverflow - ellipsis, clip...(default fade)
  • iconSize - default auto-resize
  • iconPadding - padding of Icon close (default 3)
  • iconMargin - margin of Icon close (default right: 8)
  • iconColor - default White
  • iconBackground - default transparent
  • color - background color of tag (default green)
  • backgroundContainer - default white
  • highlightColor - default green'700'
  • popupMenuBuilder - Popup Menu Items
  • popupMenuOnSelected - On Selected Item
  • onDelete - return the tag deleted
  • onInsert - return the tag entered
  • suggestionsList - a List of string that force the insertion of specific items

Issues #

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

[0.3.0] - 2019-04-09.

  • New features
  • Possibility to create a customizable popupMenu.
  • SelectableTags. Possibility to set a color and an activeColor for each tag.
  • InputTags. Possibility to hide textField.

[0.2.4] - 2019-04-08.

  • fixed some problem.

[0.2.3] - 2019-04-05.

  • General improvement of the code.
  • OnInsert, onDelete and onPressed are now optional.

[0.2.2] - 2019-03-02.

  • Added property textStyle in InputTags. NOTE: textColor has been removed. now it can be set with textStyle.
  • added property textStyle in SelectableTags. NOTE: if you set color in it will be ignored, you must use textColor textActiveColor.
  • Created InputSuggestions. Return suggestions in the TextField. Is not complete, soon the list of suggestions will be implemented.
  • General improvement of the code.

[0.2.1] - 2019-03-01.

  • The code has been largely rewritten.
  • Now the Tag width calculation is very accurate.

[0.2.0] - 2019-02-24.

  • Improved tag width calculation;
  • Possibility to change the margin and padding of the close icon ( InputTags ).

[0.1.9] - 2019-02-23.

  • Width calculated based on the byte length of the title;
  • When the orientation changes, a recalculation of the screen width is performed.

[0.1.8] - 2019-02-16.

  • Improvement of library documentation.

[0.1.7] - 2019-02-07.

  • Added new feature SingleItem on SelectableTags;
  • Possibility to change color/background-color icon on InputTags; - General improvement of the code.

[0.1.6] - 2019-01-07.

  • Fixed error "Infinity or NaN toInt" on InputTags; - general improvement of the code.

[0.1.5] - 2018-12-24.

  • General improvement of the code.

[0.1.4] - 2018-12-18.

  • Added new features.

[0.1.3] - 2018-12-16.

  • Added new highlight feature (InputTags) - general improvement of the code.

[0.1.2] - 2018-12-15.

  • Add InputTags Widget - Improved documentation.

[0.1.1] - 2018-12-08.

  • Improved documentation.

[0.1.0] - 2018-12-08.

  • Did some changing readme.

[0.0.1] - 2018-12-08.

  • Created Selectable Tags.

example/README.md

Example Flutter Tags #

An example of how you could implement it.

Getting Started - Selectable Tags #

import 'dart:math';

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import 'package:flutter_tags/input_tags.dart';
import 'package:flutter_tags/selectable_tags.dart';

void main() => runApp(MyApp());


class MyApp extends StatelessWidget
{
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(

        primarySwatch: Colors.blueGrey,
      ),
      home: MyHomePage(title: 'flutter_tags - Test'),
    );
  }
}


class MyHomePage extends StatefulWidget
{
  MyHomePage({Key key, this.title}) : super(key: key);
  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}


class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin
{
  TabController _tabController;
  ScrollController _scrollViewController;

  final List<String> _list = [
    '0','SDk','plugin updates','Facebook','哔了狗了QP又不够了',
    'Kirchhoff','Italy','France','Spain','美','Dart','Foo','Select','lorem ip','9',
    'Star','Flutter Selectable Tags','1','Hubble','2','Input flutter tags','A B C','8','Android Studio developer','welcome to the jungle','Gauss',
      '美术',
      '互联网',
      '炫舞时代',
      '篝火营地',
  ];

  bool _symmetry = false;
  bool _singleItem = false;
  bool _withSuggesttions = false;
  int _count = 0;
  int _column = 8;
  double _fontSize = 14;

  String _selectableOnPressed = '';
  String _inputOnPressed = '';

  List<Tag> _selectableTags = [];
  List<String> _inputTags = [];

  List _icon=[
    Icons.home,
    Icons.language,
    Icons.headset
  ];


  @override
  void initState()
  {
    super.initState();
    _tabController = TabController(length: 2, vsync: this);
    _scrollViewController = ScrollController();

    int cnt = 0;
    _list.forEach((item)
    {
        _selectableTags.add (
            Tag (id: cnt,
                title: item,
                active: (_singleItem) ? ( cnt==3 ? true:false ) : true,
                icon: (item == '0' || item == '1' || item == '2') ?
                _icon[ int.parse (item
                ) ] : null
            )
        );
        cnt++;
    }
    );

    _inputTags.addAll(
        [
            'first tag',
            'android world',
            'pic',
            '美术',
            'substring',
            'last tag',
            '术',
            'enable',
            'act',
            '1',
            '上上下下左右左右',
            'first',
            'return',
            'lollipop',
            'loop',
        ]
    );

  }


  @override
  Widget build(BuildContext context)
  {
        return Scaffold(
          body: NestedScrollView(
              controller: _scrollViewController,
              headerSliverBuilder: (BuildContext context,bool boxIsScrolled){
                return <Widget>[
                  SliverAppBar(
                    title: Text("flutter_tags - Test"),
                    centerTitle: true,
                    pinned: true,
                    expandedHeight: 110.0,
                    floating: true,
                    forceElevated: boxIsScrolled,
                    bottom: TabBar(
                      isScrollable: true,
                      indicatorSize: TabBarIndicatorSize.label,
                      labelStyle: TextStyle(fontSize: 18.0),
                      tabs: [
                        Tab(text: "Selectable"),
                        Tab(text: "Input"),
                      ],
                      controller: _tabController,
                    ),
                  )
                ];
              },
              body: TabBarView(
                controller: _tabController,
                children:  [
                  ListView(
                    children: <Widget>[
                      Column(
                        children: <Widget>[
                          Row(
                            mainAxisAlignment: MainAxisAlignment.center,
                            children: <Widget>[
                              GestureDetector(
                                child: Row(
                                  children: <Widget>[
                                    Checkbox(
                                        value: _symmetry,
                                        onChanged: (a){
                                          setState(() {
                                            _symmetry = !_symmetry;
                                          });
                                        }
                                    ),
                                    Text('Symmetry')
                                  ],
                                ),
                                onTap: (){
                                  setState(() {
                                    _symmetry = !_symmetry;
                                  });
                                },
                              ),
                              GestureDetector(
                                  child: Row(
                                      children: <Widget>[
                                          Checkbox(
                                              value: _singleItem,
                                              onChanged: (a){
                                                  setState(() {
                                                      _singleItem = !_singleItem;
                                                  });
                                              }
                                          ),
                                          Text('Single Item')
                                      ],
                                  ),
                                  onTap: (){
                                      setState(() {
                                          _singleItem = !_singleItem;
                                      });
                                  },
                              ),
                              Padding(
                                padding: EdgeInsets.all(20),
                              ),
                              DropdownButton(
                                hint: Text(_column.toString()),
                                items: _buildItems(),
                                onChanged: (a) {
                                  setState(() {
                                    _column = a;
                                  });
                                },
                              ),
                              Text("Columns")
                            ],
                          ),
                          Column(
                            children: <Widget>[
                              Text('Font Size'),
                              Row(
                                mainAxisAlignment: MainAxisAlignment.center,
                                children: <Widget>[
                                  Slider(
                                    value: _fontSize,
                                    min: 6,
                                    max: 30,
                                    onChanged: (a){
                                      setState(() {
                                        _fontSize = (a.round()).toDouble();
                                      });
                                    },
                                  ),
                                  Text(_fontSize.toString()),
                                  Padding(
                                      padding: EdgeInsets.symmetric(horizontal: 20),
                                  ),
                                  Container(
                                      height:   30,
                                      width: 30,
                                      color: Colors.blueGrey,
                                      child: IconButton(
                                          padding: EdgeInsets.all(0),
                                          color: Colors.white,
                                          icon: Icon(Icons.add),
                                          onPressed: (){
                                              setState(() {
                                                  _count++;
                                                  _selectableTags.add(
                                                      Tag(
                                                          title:_count.toString(),
                                                          active: _count%2==0
                                                      )
                                                  );
                                              });
                                          },
                                      ),
                                  ),
                                ],
                              ),
                            ],
                          ),
                          Padding(
                            padding: EdgeInsets.all(10),
                          ),
                          Container(
                            child:
                            SelectableTags(
                                tags: _selectableTags,
                                columns: _column,
                                fontSize: _fontSize,
                                symmetry: _symmetry,
                                singleItem: _singleItem,
                                //offset: -2,
                                //activeColor: Colors.deepPurple,
                                //boxShadow: [],
                                //borderRadius:5,
                                //margin: EdgeInsets.symmetric(horizontal: 6, vertical: 6),
                                //padding: EdgeInsets.symmetric(horizontal: 10),
                                //height: 26,
                                //borderRadius: BorderRadius.all(Radius.elliptical(20, 5)),
                                //height: 28,
                                popupMenuBuilder: (Tag tag){
                                    return <PopupMenuEntry>[
                                        PopupMenuItem(
                                            child: Text(tag.title,
                                                style: TextStyle(
                                                    color: Colors.black87,fontWeight: FontWeight.w800
                                                ),
                                            ),
                                            enabled: false,
                                        ),
                                        PopupMenuDivider(),
                                        PopupMenuItem(
                                            value: 1,
                                            child: Row(
                                                children: <Widget>[
                                                    Icon(Icons.content_copy,size: 18,),
                                                    Text(" Copy text"),
                                                ],
                                            ),
                                        ),
                                        PopupMenuItem(
                                            value: 2,
                                            child: Row(
                                                children: <Widget>[
                                                    Icon(Icons.delete,size: 18,),
                                                    Text(" Remove"),
                                                ],
                                            ),
                                        ),
                                        PopupMenuDivider(),
                                        PopupMenuItem(
                                            value: 3,
                                            child: Row(
                                                children: <Widget>[
                                                    Icon(Icons.format_color_fill,color:_color,size: 18,),
                                                    Text("  Randomize"),
                                                ],
                                            ),
                                        ),
                                        PopupMenuItem(
                                            value: 4,
                                            child: Row(
                                                children: <Widget>[
                                                    Icon(Icons.format_color_reset,color: Colors.grey,size: 18,),
                                                    Text(" Reset"),
                                                ],
                                            ),
                                            enabled: tag.activeColor!=null,
                                        ),
                                    ];
                                },
                                popupMenuOnSelected: (int id,Tag tag){
                                    switch(id){
                                        case 1:
                                            Clipboard.setData( ClipboardData(text: tag.title));
                                            break;
                                        case 2:
                                            setState(() {
                                                _selectableTags.remove(tag);
                                            });
                                            break;
                                        case 3:
                                            _randomColors();
                                            setState(() {
                                                tag.activeColor = _color;
                                            });
                                            break;
                                        case 4:
                                            setState(() {
                                                tag.activeColor = null;
                                            });
                                    }
                                },
                                onPressed: (tag){
                                    setState(() {
                                        _selectableOnPressed = tag.toString();
                                    });
                                },
                            ),
                          ),
                          Container(
                              padding: EdgeInsets.all(10),
                              child: Divider(color: Colors.blueGrey,)
                          ),
                          Container(
                              padding: EdgeInsets.only(left: 10),
                              alignment: Alignment.topLeft,
                              child: Text("OnPressed",style: TextStyle(fontSize: 18),)),
                          Container(
                              padding: EdgeInsets.symmetric(horizontal: 20, vertical: 10),
                              alignment: Alignment.topLeft,
                              child: Text(_selectableOnPressed)
                          )
                        ],
                      ),
                    ],
                  ),
                  ListView(
                      children: <Widget>[
                          Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: <Widget>[
                                  GestureDetector(
                                      child: Row(
                                          children: <Widget>[
                                              Checkbox(
                                                  value: _symmetry,
                                                  onChanged: (a){
                                                      setState(() {
                                                          _symmetry = !_symmetry;
                                                      });
                                                  }
                                              ),
                                              Text('Symmetry')
                                          ],
                                      ),
                                      onTap: (){
                                          setState(() {
                                              _symmetry = !_symmetry;
                                          });
                                      },
                                  ),
                                  Padding(
                                      padding: EdgeInsets.all(20),
                                  ),
                                  DropdownButton(
                                      hint: Text(_column.toString()),
                                      items: _buildItems(),
                                      onChanged: (a) {
                                          setState(() {
                                              _column = a;
                                          });
                                      },
                                  ),
                                  Text("Columns")
                              ],
                          ),
                          Row(
                              mainAxisAlignment: MainAxisAlignment.center,
                              children: <Widget>[
                                  GestureDetector(
                                      child: Row(
                                          children: <Widget>[
                                              Checkbox(
                                                  value: _withSuggesttions,
                                                  onChanged: (a){
                                                      setState(() {
                                                          _withSuggesttions = !_withSuggesttions;
                                                      });
                                                  }
                                              ),
                                              Text('With suggestions')
                                          ],
                                      ),
                                      onTap: (){
                                          setState(() {
                                              _withSuggesttions = !_withSuggesttions;
                                          });
                                      },
                                  ),
                              ],
                          ),
                          Column(
                              children: <Widget>[
                                  Text('Font Size'),
                                  Row(
                                      mainAxisAlignment: MainAxisAlignment.center,
                                      children: <Widget>[
                                          Slider(
                                              value: _fontSize,
                                              min: 6,
                                              max: 30,
                                              onChanged: (a){
                                                  setState(() {
                                                      _fontSize = (a.round()).toDouble();
                                                  });
                                              },
                                          ),
                                          Text(_fontSize.toString()),
                                      ],
                                  ),
                              ],
                          ),
                          Padding(
                              padding: EdgeInsets.all(10),
                          ),
                          Container(
                              child:
                              InputTags(
                                  tags: _inputTags,
                                  columns: _column,
                                  fontSize: _fontSize,
                                  symmetry: _symmetry,
                                  iconBackground: Colors.green[800],
                                  lowerCase: true,
                                  autofocus: false,
                                  suggestionsList: !_withSuggesttions ? null :
                                  [
                                      "One",
                                      "two",
                                      "android",
                                      "Dart",
                                      "flutter",
                                      "test",
                                      "tests",
                                      "androids",
                                      "androidsaaa",
                                      "Test",
                                      "suggest",
                                      "suggestions",
                                      "last",
                                      "lest"
                                  ],
                                  popupMenuBuilder: (String tag){
                                      return <PopupMenuEntry>[
                                          PopupMenuItem(
                                              child: Text(tag,
                                                  style: TextStyle(
                                                      color: Colors.black87,fontWeight: FontWeight.w800
                                                  ),
                                              ),
                                              enabled: false,
                                          ),
                                          PopupMenuDivider(),
                                          PopupMenuItem(
                                              value: 1,
                                              child: Row(
                                                  children: <Widget>[
                                                      Icon(Icons.content_copy,size: 18,),
                                                      Text(" Copy text"),
                                                  ],
                                              ),
                                          ),
                                          PopupMenuItem(
                                              value: 2,
                                              child: Row(
                                                  children: <Widget>[
                                                      Icon(Icons.delete,size: 18),
                                                      Text(" Remove"),
                                                  ],
                                              ),
                                          )
                                      ];
                                  },
                                  popupMenuOnSelected: (int id,String tag){
                                      switch(id){
                                          case 1:
                                              Clipboard.setData( ClipboardData(text: tag));
                                              break;
                                          case 2:
                                              setState(() {
                                                  _inputTags.remove(tag);
                                              });
                                      }
                                  },
                                  //textFieldHidden: true,
                                  //boxShadow: [],
                                  //offset: -2,
                                  //padding: EdgeInsets.only(left: 11),
                                  //margin: EdgeInsets.symmetric(horizontal: 20, vertical: 6),
                                  //iconPadding: EdgeInsets.all(5),
                                  //iconMargin: EdgeInsets.only(right:5,left: 2),
                                  //borderRadius: BorderRadius.all(Radius.elliptical(50, 5)),
                                  //onDelete: (tag) => print(tag),
                                  //onInsert: (tag) => print(tag),

                              ),
                          ),
                          Padding(
                              padding: EdgeInsets.all(10),
                          ),
                          Padding(
                              padding: EdgeInsets.all(10),
                              child: RaisedButton(
                                  child: Text('Print all Tags'),
                                  onPressed: (){
                                      _inputOnPressed ='';
                                      _inputTags.forEach((tag) =>
                                          setState(() {
                                              _inputOnPressed+='${tag},\n';
                                          })
                                      );
                                  }
                              ),
                          ),
                          Padding(
                              padding: EdgeInsets.all(10),
                              child: Text(_inputOnPressed),
                          ),
                      ],
                  )
                ],
              )
          ),
        );
  }

  ///Random Colors
  Color _color = Color(0xFFFFFFFF);
  final Random _random = Random();

  void _randomColors()
  {
      setState(() {
          _color = Color.fromARGB(
              _random.nextInt(256),
              _random.nextInt(256),
              _random.nextInt(256),
              _random.nextInt(256),
          );
      });
  }

  List<DropdownMenuItem> _buildItems()
  {
    List<DropdownMenuItem> list = [];

    int count = 19;

    for(int i = 1; i < count; i++)
      list.add(
        DropdownMenuItem(
          child: Text(i.toString() ),
          value: i,
        ),
      );

    return list;
  }
}

DEMO #

Demo 1 Demo 2

Other #

This project is a starting point for a Flutter application.

A few resources to get you started if this is your first Flutter project:

For help getting started with Flutter, view our online documentation, which offers tutorials, samples, guidance on mobile development, and a full API reference.

Use this package as a library

1. Depend on it

Add this to your package's pubspec.yaml file:


dependencies:
  flutter_tags: ^0.3.0

2. Install it

You can install packages from the command line:

with Flutter:


$ flutter packages get

Alternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.

3. Import it

Now in your Dart code, you can use:


import 'package:flutter_tags/input_tags.dart';
import 'package:flutter_tags/selectable_tags.dart';
  
Version Uploaded Documentation Archive
0.3.0 Apr 9, 2019 Go to the documentation of flutter_tags 0.3.0 Download flutter_tags 0.3.0 archive
0.2.4 Apr 8, 2019 Go to the documentation of flutter_tags 0.2.4 Download flutter_tags 0.2.4 archive
0.2.3 Apr 5, 2019 Go to the documentation of flutter_tags 0.2.3 Download flutter_tags 0.2.3 archive
0.2.2 Mar 2, 2019 Go to the documentation of flutter_tags 0.2.2 Download flutter_tags 0.2.2 archive
0.2.1 Mar 1, 2019 Go to the documentation of flutter_tags 0.2.1 Download flutter_tags 0.2.1 archive
0.2.0 Feb 24, 2019 Go to the documentation of flutter_tags 0.2.0 Download flutter_tags 0.2.0 archive
0.1.9 Feb 23, 2019 Go to the documentation of flutter_tags 0.1.9 Download flutter_tags 0.1.9 archive
0.1.8 Feb 16, 2019 Go to the documentation of flutter_tags 0.1.8 Download flutter_tags 0.1.8 archive
0.1.7 Feb 7, 2019 Go to the documentation of flutter_tags 0.1.7 Download flutter_tags 0.1.7 archive
0.1.6 Jan 7, 2019 Go to the documentation of flutter_tags 0.1.6 Download flutter_tags 0.1.6 archive

All 17 versions...

Popularity:
Describes how popular the package is relative to other packages. [more]
89
Health:
Code health derived from static analysis. [more]
100
Maintenance:
Reflects how tidy and up-to-date the package is. [more]
100
Overall:
Weighted score of the above. [more]
95
Learn more about scoring.

We analyzed this package on Apr 16, 2019, and provided a score, details, and suggestions below. Analysis was completed with status completed using:

  • Dart: 2.2.0
  • pana: 0.12.14
  • Flutter: 1.4.7

Platforms

Detected platforms: Flutter

References Flutter, and has no conflicting libraries.

Health suggestions

Format lib/input_tags.dart.

Run flutter format to format lib/input_tags.dart.

Format lib/selectable_tags.dart.

Run flutter format to format lib/selectable_tags.dart.

Format lib/src/suggestions.dart.

Run flutter format to format lib/src/suggestions.dart.

Format lib/src/text_util.dart.

Run flutter format to format lib/src/text_util.dart.

Dependencies

Package Constraint Resolved Available
Direct dependencies
Dart SDK >=2.0.0-dev.68.0 <3.0.0
flutter 0.0.0
Transitive dependencies
collection 1.14.11
meta 1.1.6 1.1.7
sky_engine 0.0.99
typed_data 1.1.6
vector_math 2.0.8
Dev dependencies
flutter_test