搜索插件、代码仓与 APP 分类

chip_list 封面
插件详情v3.1.0

chip_list

让创建 ChoiceChip 列表变得轻而易举。同时,它也非常可定制。

AndroidiOSWebmacOSWindowsLinux
近 30 天下载
758
喜欢数
54
Pub 分数
160

安装插件

flutter pub add chip_list

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

chip_list 包简化了在 Flutter 中创建可自定义的 ChoiceChip 小部件列表的过程。它提供了一个直观的 API,用于构建交互式、可选择的芯片组,且无需编写大量样板代码。开发者可以轻松地设置样式并管理芯片行为,使其非常适合用于过滤、标签或选择界面。该包支持所有主要平台,包括 Android、iOS、Web、macOS、Windows 和 Linux,确保跨平台体验的一致性。凭借其对灵活性和易用性的关注,chip_list 在不牺牲自定义选项的前提下增强了 UI 开发。

适合场景

  • 表单中的筛选选项
  • 标签系统
  • 用户偏好选择
  • 交互式类别导航
  • 动态选择输入
  • 多选界面

主要特点

  • 与 ChoiceChip 的轻松集成
  • 高度可定制的外观
  • 跨平台支持
  • 所需设置最少
  • 内置的选择管理
  • 响应式设计兼容性

适合对象

  • Flutter 开发人员构建表单界面
  • 需要动态芯片选择的应用程序
  • 寻求可重用芯片组件的设计师
  • 需要多选功能的项目
  • 注重快速UI开发的团队

使用建议

  • 需要了解 ChoiceChip 小部件
  • 复杂布局可能需要额外的样式
  • 仅限基于芯片的交互
  • 不适合非交互式内容
  • 最好在可滚动容器中用于长列表

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Features

Creates a list of ChoiceChips. Also allows for selecting multiple chips at once and allows use in sync with other widgets. This package is intended to solve all your woes with regards to Chips.

Well, maybe not all, but if you would like to request a feature, fire away !

See /example/main.dart for an example on how to use the state of the list for updating the state of other widgets, and other fancy properties.

 

Getting started

Depend on it! Add this to your pubspec.yaml

chip_list: ^3.0.0

Import it!

import 'package:chip_list/chip_list.dart';

Profit. 😉


 

Demo

In brief, the most useful features:

ChipList(
            listOfChipNames: name-of-the-chips-in-order-of-being-built,
            activeBgColorList: [],
            inactiveBgColorList: [],
            activeTextColorList: [],
            inactiveTextColorList: [],
            activeBorderColorList: [],
            inactiveBorderColorList: [],
            listOfChipIndicesCurrentlySelected: [],
          ),

 

Features

Wrapping the contents of ChipList

If you want to wrap the ChipList, then set shouldWrap to true. You can then use all the properties of a typical Wrap widget to further customize appearance.

Setting individual colors for active/inactive background and border color and text color

If you want to have full control of the parameters specified above over each and every single chip, you can do so by setting the color within the activeBgColorList, inactiveBgColorList, activeTextColorList and inactiveTextColorList respectively, wherever appropriate.

Use a single color if you want it to be used for all chips. Otherwise, the length of the list must be equal to the length of listOfChipNames.

Note that if you don't, then the package has defaults as specified in the documentation. (You can hover over the property in your IDE to see more 🙂).

Spacing in between each Chip

Whether you choose to let the axis to Axis.vertical or Axis.horizontal, you can set the spacing by tweaking widgetSpacing.

 

New attributes added to improve customisation if you set useMaterial3 = true

  • showCheckmark lets you enable or disable checkmarks in chips
  • checkmarkColor lets you set the color of the checkmark if it's enabled

 

⚠ Warning !!!!!!!!!

The flutter_lints package might suggest that you make listOfChipIndicesCurrentlySeclected a constant.

PLEASE DO NOT DO SO.

The widget will not respond to user interaction, seemingly without any reason.

The whole point of the API being designed like this is so that you have direct access to the currently selected indices, without the need for any state management and such.

That list will be updated as the user interacts with the widget. It is intended to be used in case you would like to incorporate the contents for any logic.

For an example, look at the section title "using extraOnToggle" in the provided example. The index is used to display the currently selected indice's label elsewhere in the UI.

 

Example Usage

/example/main.dart:

class HomePage extends StatefulWidget {
  HomePage({Key? key}) : super(key: key);

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  final List<String> _dogeNames = [
    'Beagle',
    'Labrador',
    'Retriever',
  ];

  int _currentIndex = 0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Chip List Demo'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          // Basic usage
          const Text('Basic usage'),
          const SizedBox(
            height: 10,
          ),
          ChipList(
            listOfChipNames: _dogeNames,
            activeBgColorList: [Theme.of(context).primaryColor],
            inactiveBgColorList: [Colors.white],
            activeTextColorList: [Colors.white],
            inactiveTextColorList: [Theme.of(context).primaryColor],
            listOfChipIndicesCurrentlySeclected: [0],
            borderColorList: [Theme.of(context).primaryColor],
          ),

          // Using [supportsMultiSelect]
          const SizedBox(
            height: 20,
          ),
          const Text('Using supportsMultiSelect'),
          const SizedBox(
            height: 10,
          ),
          ChipList(
            listOfChipNames: _dogeNames,
            supportsMultiSelect: true,
            activeBgColorList: [Colors.pink, Colors.yellow, Colors.green],
            inactiveBgColorList: [Colors.white],
            activeTextColorList: [Colors.white],
            inactiveTextColorList: [Theme.of(context).primaryColor],
            listOfChipIndicesCurrentlySeclected: [0],
            borderColorList: [Colors.pink, Colors.yellow, Colors.green],
          ),

          // Using [extraOnToggle]
          const SizedBox(
            height: 20,
          ),
          Text('Using extraOnToggle: ${_dogeNames[_currentIndex]}'),
          const SizedBox(
            height: 10,
          ),
          ChipList(
            listOfChipNames: _dogeNames,
            activeBgColorList: [Theme.of(context).primaryColor],
            inactiveBgColorList: [Colors.white],
            activeTextColorList: [Colors.white],
            inactiveTextColorList: [Theme.of(context).primaryColor],
            listOfChipIndicesCurrentlySeclected: [_currentIndex],
            extraOnToggle: (val) {
              _currentIndex = val;
              setState(() {});
            },
          ),

          // Using [shouldWrap]
          const SizedBox(
            height: 20,
          ),
          const Text('Using shouldWrap'),
          const SizedBox(
            height: 10,
          ),
          SizedBox(
            width: 150,
            child: ChipList(
              listOfChipNames: const [
                'a',
                'really',
                'long',
                'list',
                'of',
                'chips',
                'that',
                'can',
                'be',
                'wrapped',
              ],
              activeBgColorList: [Theme.of(context).primaryColor],
              inactiveBgColorList: const [
                Colors.white,
              ],
              activeTextColorList: [Colors.white],
              inactiveTextColorList: [Theme.of(context).primaryColor],
              listOfChipIndicesCurrentlySeclected: [0],
              shouldWrap: true,
              runSpacing: 10,
              spacing: 10,
            ),
          ),
        ],
      ),
    );
  }
}

 

Additional stuff

Found an issue ? Please let me know ! Feel like creating a PR? Yes please! All contributions are welcome :)

所属分类

源码仓库

使用此插件的项目

暂无相关数据。