Flutter 多选

Multi Select Flutter 是一个用于轻松创建多种多选小部件的包。

multi_select_flutterds

multi_select_flutterv

功能

  • 支持 FormField 的特性,例如验证器。
  • 中性默认设计,可以随意更改。
  • 选择对话框或底部工作表样式的小部件。
  • 轻松地将 `listType` 从 LIST 更改为 CHIP。
  • 使您的多选 `searchable` 以处理更长的列表。

安装

将此添加到您的 pubspec.yaml 文件中

dependencies:
  multi_select_flutter: ^2.1.0

用法

MultiSelectDialog

可以在 `showDialog()` 的 builder 中使用,并通过您自己的按钮触发。

void _showMultiSelectDialog(BuildContext context) async {
  await showDialog(
    context: context,
    builder: (ctx) {
      return  MultiSelectDialog(
        items: _animals.map((e) => MultiSelectItem(e, e)).toList(),
        initialValue: _selectedAnimals,
        onConfirm: (values) {...},
      );
    },
  );
}

MultiSelectBottomSheet

可以在 `showModalBottomSheet()` 的 builder 中使用,并通过您自己的按钮触发。

void _showMultiSelect(BuildContext context) async {
  await showModalBottomSheet(
    isScrollControlled: true, // required for min/max child size
    context: context,
    builder: (ctx) {
      return  MultiSelectBottomSheet(
        items: _animals.map((e) => MultiSelectItem(e, e)).toList(),
        initialValue: _selectedAnimals,
        onConfirm: (values) {...},
        maxChildSize: 0.8,
      );
    },
  );
}

MultiSelectChipDisplay

此小部件可以与您自己的按钮一起使用,也可以指定为 `MultiSelectDialogField` 等小部件的 `chipDisplay` 参数。

为了有效地使用此小部件,请确保在更改源列表的任何时候都设置状态。

您也可以在 onTap 函数中从源列表中删除项目。

MultiSelectChipDisplay(
  items: _selectedAnimals.map((e) => MultiSelectItem(e, e)).toList(),
  onTap: (value) {
    setState(() {
      _selectedAnimals.remove(value);
    });
  },
),

当使用 `chipDisplay` 参数作为 MultiSelectDialogField 的一部分时,MultiSelectChipDisplay 仍然在字段的 BoxDecoration 外部渲染,如这里所示

multi_select_flutterz

如果要封装 MultiSelectChipDisplay,请将 MultiSelectDialogField 包装在 Container 中,然后将装饰应用于该 Container

Container(
  decoration: BoxDecoration(...),
  child: MultiSelectDialogField(
    items: _items,
    chipDisplay: MultiSelectChipDisplay(...),
  ),
),

multi_select_flutter

MultiSelectDialogField / MultiSelectBottomSheetField

这些小部件提供了一个 InkWell 按钮,用于打开对话框或底部工作表。

MultiSelectBottomSheetField(
  items: _animals.map((e) => MultiSelectItem(e, e.name)).toList(),
  listType: MultiSelectListType.CHIP,
  searchable: true,
  decoration: BoxDecoration(...),
  onConfirm: (values) {
    setState(() {
      _selectedAnimals = values;
    });
  },
  chipDisplay: MultiSelectChipDisplay(),
),

MultiSelectDialogFormField / MultiSelectBottomSheetFormField

这些小部件是 `MultiSelectDialogField` 和 `MultiSelectBottomSheetField` 的 FormField 版本。您可以使用 `validator` 和 `onSaved` 等 FormField 参数。

它带有一个默认的下边框,可以通过 `decoration` 参数覆盖。

MultiSelectDialogFormField(
	items: _animals.map((e) => MultiSelectItem(e, e.name)).toList(),
	key: _multiSelectKey,
	validator: (value) {
	  if (value == null || value.isEmpty) {
	    return  "Required";
	  }
	  return  null;
	},
	onConfirm: (values) {
	  setState(() {
	    _selectedAnimals = values;
	  });
	  _multiSelectKey.currentState.validate();
	},
),

构造函数

MultiSelectDialog

参数 类型 默认值 描述
confirmText 文本 Text("OK") 指定确认按钮的文本。
cancelText 文本 Text("取消") 指定取消按钮的文本。
高度 双精度 为对话框设置固定高度。
initialValue List<dynamic> 选定的值列表。重新打开对话框时保留值是必需的。
items List<MultiSelectItem<V>> 选项的源列表。
listType MultiSelectListType MultiSelectListType.LIST 更改 listType。可以是 `MultiSelectListType.LIST` 或 `MultiSelectListType.CHIP`。
onSelectionChanged Function(List<dynamic>) 当项目被选中或取消选中时触发。
onConfirm Function(List<dynamic>) 按下确认按钮时触发。
searchable 布尔值 在对话框中启用搜索功能。
title 字符串 "选择" 显示在对话框顶部的标题。
searchPlaceholder 字符串 "搜索" 设置搜索字段的占位符文本。
selectedColor 颜色 设置选中复选框或标签项目的颜色。
colorator Color Function(V) 根据其值设置单个项目(标签和复选框)的选中颜色。

MultiSelectDialogField

MultiSelectDialogField 具有 MultiSelectDialog 的所有参数,以及这些额外的参数

参数 类型 默认值 描述
barrierColor 颜色 设置对话框外部区域的颜色。
buttonText 文本 "选择" 设置按钮上显示的文本。
buttonIcon Icon Icons.arrow_downward 指定按钮图标。
chipDisplay MultiSelectChipDisplay 将 MultiSelectChipDisplay 附加到此字段。
装饰 BoxDecoration 设置构成字段的 Container 的样式。

MultiSelectBottomSheet

参数 类型 默认值 描述
confirmText 文本 Text("OK") 指定确认按钮的文本。
cancelText 文本 Text("取消") 指定取消按钮的文本。
initialChildSize 双精度 0.3 底部工作表的初始高度。
initialValue List<dynamic> 选定的值列表。重新打开对话框时保留值是必需的。
items List<MultiSelectItem<V>> 选项的源列表。
listType MultiSelectListType MultiSelectListType.LIST 更改 listType。可以是 `MultiSelectListType.LIST` 或 `MultiSelectListType.CHIP`。
maxChildSize 双精度 0.6 设置底部工作表的最大高度阈值。
minChildSize 双精度 0.3 设置在关闭之前底部工作表的最小高度阈值。
onSelectionChanged Function(List<dynamic>) 当项目被选中或取消选中时触发。
onConfirm Function(List<dynamic>) 按下确认按钮时触发。
searchable 布尔值 在对话框中启用搜索功能。
title 字符串 "选择" 显示在对话框顶部的标题。
searchPlaceholder 字符串 "搜索" 设置搜索字段的占位符文本。
selectedColor 颜色 设置选中复选框或标签项目的颜色。
colorator Color Function(V) 根据其值设置单个项目(标签和复选框)的选中颜色。

MultiSelectBottomSheetField

MultiSelectBottomSheetField 具有 MultiSelectBottomSheet 的所有参数,以及这些额外的参数

参数 类型 默认值 用法
barrierColor 颜色 设置底部工作表外部区域的颜色。
buttonIcon Icon Icons.arrow_downward 指定按钮图标。
buttonText 文本 "选择" 设置按钮上显示的文本。
chipDisplay MultiSelectChipDisplay 将 MultiSelectChipDisplay 附加到此字段。
装饰 BoxDecoration 设置构成字段的 Container 的样式。
shape ShapeBorder RoundedRectangleBorder(borderRadius: BorderRadius.vertical(top: Radius.circular(15.0))) 应用 ShapeBorder 来改变底部工作表的边缘。

MultiSelectDialogFormField / MultiSelectBottomSheetFormField

这些小部件具有其非 FormField 对等项的所有参数,以及来自 FormField 类的这些额外参数

参数 类型 默认值 描述
autovalidate List<MultiSelectItem> 如果为 true,则表单字段将在每次更改后立即验证并更新其错误文本。默认为 false。
key GlobalKey<FormFieldState> 可用于调用 `_multiSelectKey.currentState.validate()` 等方法。
onSaved List<MultiSelectItem> 每次提交字段时(通常通过调用表单的 `save` 方法)调用的回调。
validator FormFieldValidator<List> 验证。请参阅 Flutter 的文档

MultiSelectChipDisplay

参数 类型 默认值 描述
alignment Alignment Alignment.centerLeft 更改标签的对齐方式。
chipColor 颜色 primaryColor 设置标签的颜色。
装饰 BoxDecoration 设置构成标签显示区域的 Container 的样式。
items List<MultiSelectItem> 选定项目的源列表。
onTap Function(dynamic) 点击标签时触发。
文本样式 TextStyle 设置标签上的文本样式。
opacity 双精度 设置标签的透明度。
colorator Color Function(V) 根据其值设置单个项目的标签颜色。

GitHub

https://github.com/CHB61/multi_select_flutter