Flutter选择组件插件awesome_select的使用

发布于 1周前 作者 phonegap100 来自 Flutter

Flutter选择组件插件awesome_select的使用

关于 awesome_select
<img src="https://img.shields.io/pub/v/awesome_select" alt="Pub Version"> <img src="https://img.shields.io/github/license/akbarpulatov/flutter_smart_select" alt="GitHub">

awesome_select允许你轻松地将普通的表单选择或下拉列表转换为动态页面、弹出对话框或滑动底栏,并支持多种选择输入方式,如单选按钮、复选框、开关、芯片或自定义输入。它支持单选和多选。灵感来源于Framework7的Smart Select组件。

特性
  • 可以通过样式配置或小部件构建器自定义模态窗口的所有部分(头部、底部、搜索栏、确认按钮、搜索栏切换)。
  • 验证后确认。
  • 自动搜索。
  • 搜索时处理重音符号。
  • 高亮搜索结果。
  • 芯片瓦片小部件。
  • 网格选择布局。
  • 水平或垂直选择列表滚动方向。
  • 简化类名和枚举。
  • 配置支持copyWithmerge
  • 使用StatefulWidget作为状态管理。
  • 提供简单快捷的方式来定义配置。
  • 软依赖其他包。
待办事项
  • 支持从右到左参数,目前可以通过小部件构建器实现。
  • 内部处理异步选择项目加载。
  • 自定义搜索处理程序。
  • 选择项目分页(拉动刷新和拉动加载更多)。
  • 添加更多测试。
从4.0.0到4.2.0的迁移
  • modalValidation函数现在应该返回String来指示更改的值无效,返回null或空字符串来指示更改的值有效。
  • 显示带有芯片的小部件时,请使用参数S2Tile.bodyS2TileChips,而不是S2ChipsTile
从3.0.x到4.0.0的迁移
  • 参数options已被移除,改用choiceItems
  • 类名和枚举简化:
    • SmartSelectTile改为S2Tile
    • SmartSelectOption改为S2Choice
    • SmartSelectChoiceConfig改为S2ChoiceConfig
    • SmartSelectChoiceStyle改为S2ChoiceStyle
    • SmartSelectChoiceType改为S2ChoiceType
    • SmartSelectModalConfig改为S2ModalConfig
    • SmartSelectModalStyle改为S2ModalStyle
    • SmartSelectModalHeaderStyle改为S2ModalHeaderStyle
    • SmartSelectModalType改为S2ModalType
  • 参数builder现在是一组构建器(S2SingleBuilderS2MultiBuilder),改用tileBuilder创建触发小部件。
  • 参数denseenabledisLoadingisTwoLineleadingloadingTextpaddingselectedtrailing已从SmartSelect类中移除,改用builder.tiletileBuilder并返回S2Tile小部件,它具有所有这些参数。
  • 参数onChange现在返回S2SingleState stateS2MultiState state,而不是T valueList<T> value
  • 参数choiceConfig.useWrap已移除,改用choiceConfig.layout = S2ChoiceLayout.wrap
  • 参数choiceConfig.builder移到builder.choicechoiceBuilder
  • 参数choiceConfig.titleBuilder移到builder.choiceTitlechoiceTitleBuilder
  • 参数choiceConfig.subtitleBuilder移到builder.choiceSubtitlechoiceSubtitleBuilder
  • 参数choiceConfig.secondaryBuilder移到builder.choiceSecondarychoiceSecondaryBuilder
  • 参数choiceConfig.dividerBuilder移到builder.choiceDividerchoiceDividerBuilder
  • 参数choiceConfig.emptyBuilder移到builder.choiceEmptychoiceEmptyBuilder
  • 参数choiceConfig.glowingOverscrollIndicatorColor已移除,改用choiceConfig.overscrollColor
  • 参数choiceConfig.spacingchoiceConfig.runSpacing移到choiceConfig.style.spacingchoiceConfig.style.runSpacing
  • 参数choiceConfig.useCheckmark移到choiceConfig.style.showCheckmark
  • 参数choiceConfig.padding移到choiceConfig.style.wrapperPadding
  • 默认情况下,不使用粘性标题的分组选择现在,改用groupBuilder,例如:
dependencies:
  sticky_headers: "^0.1.8"

import 'package:sticky_headers/sticky_headers.dart';

SmartSelect<T>.single/multiple(
  ...,
  ...,
  choiceGroupBuilder: (context, header, choices) {
    return StickyHeader(
      header: header,
      content: choices,
    );
  },
);
预览
单选 多选
模态类型 Single Choice Modal Multiple Choice Modal
芯片小部件 Single Choice Chips Multiple Choice Chips
开关小部件 None Multiple Choice Switch
自定义瓦片 Customize Tile
模态筛选 Modal Filter
模态确认 Modal Confirm
模态验证 Modal Validation
模态选择器 Modal Selector
模态形状 Modal Shape
选择项 Choice Items
分组选择 Choice Grouped
选择构建器 Choice Builder
下载APK Demo App
功能
  • 选择单个或多个选项。
  • 打开选择模态在全屏、底部滑动或弹出对话框。
  • 各种选择输入方式(单选按钮、复选框、开关、芯片或自定义小部件)。
  • 各种选择布局(列表、包裹或网格)。
  • 支持分组选择并轻松支持粘性头部。
  • 可搜索的选择项,并突出显示结果。
  • 可禁用或隐藏选项。
  • 可自定义触发/瓦片小部件。
  • 可自定义模态样式。
  • 可自定义模态头部样式。
  • 可自定义模态底部。
  • 可自定义选择样式。
  • 可从任何List构建选择项。
  • 轻松加载异步选择项。
  • 更多功能…
使用

对于完整的使用方法,请参见示例

要了解更多关于smart_select使用的类和其他引用,请参阅API文档

单选
// 可用的单选配置
SmartSelect<T>.single({

  // 小部件的主要内容。
  // 用于触发小部件和头部选项
  String title,

  // 值为空时显示的文本
  String placeholder = 'Select one',

  // 单选小部件的当前值。
  required T value,

  // 当单选值更改时调用
  required ValueChanged<S2SingleState<T>> onChange,

  // 选项列表
  List<S2Choice<T>> choiceItems,

  // 其他可用配置
  ...,
  ...,

})
// 简单使用

String value = 'flutter';
List<S2Choice<String>> options = [
  S2Choice<String>(value: 'ion', title: 'Ionic'),
  S2Choice<String>(value: 'flu', title: 'Flutter'),
  S2Choice<String>(value: 'rea', title: 'React Native'),
];

@override
Widget build(BuildContext context) {
  return SmartSelect<String>.single(
    title: 'Frameworks',
    value: value,
    choiceItems: options,
    onChange: (state) => setState(() => value = state.value)
  );
}
多选
// 可用的多选配置
SmartSelect<T>.multiple({

  // 小部件的主要内容。
  // 用于触发小部件和头部选项
  String title,

  // 值为空时显示的文本
  String placeholder = 'Select one',

  // 单选小部件的当前值。
  required List<T> value,

  // 当单选值更改时调用
  required ValueChanged<S2MultiState<T>> onChange,

  // 选项列表
  List<S2Choice<T>> choiceItems,

  // 其他可用配置
  ...,
  ...,

})
// 简单使用

List<int> value = [2];
List<S2Choice<int>> frameworks = [
  S2Choice<int>(value: 1, title: 'Ionic'),
  S2Choice<int>(value: 2, title: 'Flutter'),
  S2Choice<int>(value: 3, title: 'React Native'),
];

@override
Widget build(BuildContext context) {
  return SmartSelect<int>.multiple(
    title: 'Frameworks',
    value: value,
    choiceItems: options,
    onChange: (state) => setState(() => value = state.value),
  );
}
选择项
// 配置
SmartSelect<T>.[single|multiple]({

  // 其他配置
  ...,
  ...,

  // 选择项列表
  List<S2Choice<T>> choiceItems,

  // 其他配置
  ...,
  ...,

});

choiceItems可以直接输入,如以下示例所示,更多关于S2Choice的信息可以在API文档中找到:

SmartSelect<T>.[single|multiple](
  ...,
  ...,
  choiceItems: <S2Choice<T>>[
    S2Choice<T>(value: 1, title: 'Ionic'),
    S2Choice<T>(value: 2, title: 'Flutter'),
    S2Choice<T>(value: 3, title: 'React Native'),
  ],
);

choiceItems也可以从任何列表创建,使用此包提供的帮助程序,例如以下示例:

List<Map<String, String>> days = [
  { 'value': 'mon', 'title': 'Monday' },
  { 'value': 'tue', 'title': 'Tuesday' },
  { 'value': 'wed', 'title': 'Wednesday' },
  { 'value': 'thu', 'title': 'Thursday' },
  { 'value': 'fri', 'title': 'Friday' },
  { 'value': 'sat', 'title': 'Saturday' },
  { 'value': 'sun', 'title': 'Sunday' },
];

SmartSelect<String>.[single|multiple](
  ...,
  ...,
  choiceItems: S2Choice.listFrom<String, Map<String, String>>(
    source: days,
    value: (index, item) => item['value'],
    title: (index, item) => item['title'],
  ),
);
异步加载选择项

请参阅以下示例

模态配置

更多关于S2ModalConfig的信息可以在API文档中找到。

// 可用的配置
SmartSelect<T>.[single|multiple]({

  // 其他配置
  ...,
  ...,

  // 单选模态验证
  ValidationCallback<T> modalValidation,

  // 模态配置
  S2ModalConfig modalConfig,

  // 配置模态样式
  // 快捷方式 [modalConfig.style]
  S2ModalStyle modalStyle,

  // 配置模态头部样式
  // 快捷方式 [modalConfig.headerStyle]
  S2ModalHeaderStyle modalHeaderStyle,

  // 模态类型以显示选项
  // 快捷方式 [modalConfig.type]
  S2ModalType modalType,

  // 是否使用与触发小部件标题不同的标题
  // 快捷方式 [modalConfig.title]
  String modalTitle,

  // 选项列表是否需要确认
  // 以返回更改后的值
  // 快捷方式 [modalConfig.useConfirm]
  bool modalConfirm,

  // 选项列表模态是否使用头部
  // 快捷方式 [modalConfig.useHeader]
  bool modalHeader,

  // 选项列表是否可过滤
  // 快捷方式 [modalConfig.useFilter]
  bool modalFilter,

  // 过滤是否自动完成或需要确认
  // 快捷方式 [modalConfig.filterAuto]
  bool modalFilterAuto,

  // 自定义搜索栏提示
  // 快捷方式 [modalConfig.filterHint]
  String modalFilterHint,

  // 其他配置
  ...,
  ...,

});
模态类型

默认情况下,SmartSelect将在全屏打开选项模态。可以通过更改以下值来改变它:

// 可用选项
enum S2ModalType {

  // 全屏打开
  fullPage,

  // 弹出对话框打开
  popupDialog,

  // 底部滑动打开
  bottomSheet,

}
模态样式
// 可用选项配置模态样式
S2ModalStyle({

  // 模态边框形状
  // 用于弹出对话框和底部滑动
  ShapeBorder shape,

  // 模态提升
  // 用于弹出对话框和底部滑动
  double elevation,

  // 模态背景颜色
  Color backgroundColor,

  // 模态剪裁行为
  Clip clipBehavior,

})
模态头部样式
// 可用选项配置模态头部样式
S2ModalHeaderStyle({

  // 头部边框形状
  ShapeBorder shape,

  // 头部提升
  double elevation,

  // 头部背景颜色
  Color backgroundColor,

  // 头部亮度
  Brightness brightness,

  // 头部标题是否居中
  bool centerTitle,

  // 头部是否使用automaticallyImplyLeading
  bool useLeading,

  // 头部文本样式
  // 用于标题和搜索字段
  TextStyle textStyle,

  // 头部图标主题
  IconThemeData iconTheme,

  // 头部操作图标主题
  IconThemeData actionsIconTheme,

})
选择项配置

更多关于S2ChoiceConfig的信息可以在API文档中找到。

// 可用选项配置选择项
SmartSelect<T>.[single|multiple]({

  // 其他配置
  ...,
  ...,

  // 选择项配置
  S2ChoiceConfig choiceConfig,

  // 配置选择项样式
  // 快捷方式 [choiceConfig.style]
  S2ChoiceStyle choiceStyle,

  // 配置选择项组头样式
  // 快捷方式 [choiceConfig.headerStyle]
  S2ChoiceHeaderStyle choiceHeaderStyle,

  // 选择项小部件类型
  // 快捷方式 [choiceConfig.type]
  S2ChoiceType choiceType,

  // 选择项布局以显示项目
  // 快捷方式 [choiceConfig.layout]
  S2ChoiceLayout choiceLayout,

  // 选择项列表滚动方向
  // 目前仅当
  // [layout] 是 [S2ChoiceLayout.wrap]
  // 快捷方式 [choiceConfig.direction]
  Axis choiceDirection,

  // 选择项列表是否分组
  // 快捷方式 [choiceConfig.isGrouped]
  bool choiceGrouped,

  // 选择项项目是否使用分割线
  // 快捷方式 [choiceConfig.useDivider]
  bool choiceDivider,

  // 对于网格选择布局
  // 快捷方式 [choiceConfig.gridDelegate]
  SliverGridDelegate choiceGrid,

  // 其他配置
  ...,
  ...,

});
选择项类型

默认情况下,SmartSelect将使用radios进行单选,使用checkboxes进行多选,但可以通过更改以下值来改变:

// 选择项输入类型
enum S2ChoiceType {

  // 使用单选小部件
  // 用于单选
  radios,

  // 使用复选框小部件
  // 用于多选
  checkboxes,

  // 使用开关小部件
  // 用于多选
  switches,

  // 使用芯片小部件
  // 用于单选和多选
  chips,

}
选择项布局

默认情况下,SmartSelect将使用list,但可以通过更改以下值来改变:

// 选择项布局
enum S2ChoiceLayout {

  // 使用列表视图小部件
  list,

  // 使用包裹视图小部件
  wrap,

  // 使用网格视图小部件
  grid,

}
选择项样式
// 可用选项配置选择项样式
S2ChoiceStyle({

  // 在主轴上放置子项之间的空间量。
  // 当使用 [SmartSelectChoiceType.chips] 或 [useWrap] 为 [true] 时
  double spacing,

  // 在交叉轴上放置运行之间的空间量。
  // 当使用 [SmartSelectChoiceType.chips] 或 [useWrap] 为 [true] 时
  double runSpacing,

  // 选择项包装器填充
  EdgeInsetsGeometry wrapperPadding,

  // 选择项填充
  EdgeInsetsGeometry padding,

  // 选择项标题样式
  TextStyle titleStyle,

  // 选择项副标题样式
  TextStyle subtitleStyle,

  // 是否使用芯片检查标记
  bool showCheckmark,

  // 在使用 [ListTile] 定位控件旁边的标签时,控制放置的位置。
  S2ChoiceControl control,

  // 高亮颜色
  Color highlightColor,

  // 选中选择项的主色
  Color activeColor,

  // 未选中选择项的主色
  Color color,

  // 选中选择项的次色
  Color activeAccentColor,

  // 未选中选择项的次色
  Color accentColor,

  // 选中芯片的亮度
  Brightness activeBrightness,

  // 未选中芯片的亮度
  Brightness brightness,

  // 仅在 [activeBrightness] 为 [Brightness.light] 时影响选中芯片边框的不透明度
  double activeBorderOpacity,

  // 仅在 [brightness] 为 [Brightness.light] 时影响未选中芯片边框的不透明度
  double borderOpacity,

  // 形状剪辑行为
  Clip clipBehavior,

})
选择项组头样式
// 可用选项配置选择项组头样式
S2ChoiceHeaderStyle({

  // 组头背景颜色
  Color backgroundColor,

  // 高亮颜色
  Color highlightColor,

  // 组头文本样式
  TextStyle textStyle,

  // 组头填充
  EdgeInsetsGeometry padding,

  // 组头高度
  double height,

})
构建器小部件
单选构建器
// 可用的构建器配置
// 用于单选
SmartSelect<T>.single({

  // 其他配置
  ...,
  ...,

  // 单选构建器集合
  S2SingleBuilder<T> builder,

  // 自定义瓦片小部件构建器
  // 快捷方式 [builder.tile]
  S2WidgetBuilder<S2SingleState<T>> tileBuilder,

  // 自定义模态小部件构建器
  // 快捷方式 [builder.modal]
  S2WidgetBuilder<S2SingleState<T>> modalBuilder,

  // 自定义模态头部小部件构建器
  // 快捷方式 [builder.modalHeader]
  S2WidgetBuilder<S2SingleState<T>> modalHeaderBuilder,

  // 自定义模态操作小部件构建器
  // 快捷方式 [builder.modalActions]
  S2ListWidgetBuilder<S2SingleState<T>> modalActionsBuilder,

  // 自定义模态确认动作小部件构建器
  // 快捷方式 [builder.modalConfirm]
  S2WidgetBuilder<S2SingleState<T>> modalConfirmBuilder,

  // 自定义分隔符小部件构建器
  // 快捷方式 [builder.modalDivider]
  S2WidgetBuilder<S2SingleState<T>> modalDividerBuilder,

  // 自定义底部小部件构建器
  // 快捷方式 [builder.modalFooter]
  S2WidgetBuilder<S2SingleState<T>> modalFooterBuilder,

  // 其他配置
  ...,
  ...,

});
多选构建器
// 可用的构建器配置
// 用于多选
SmartSelect<T>.multiple({

  // 其他配置
  ...,
  ...,

  // 多选构建器集合
  S2MultiBuilder<T> builder,

  // 自定义瓦片小部件构建器
  // 快捷方式 [builder.tile]
  S2WidgetBuilder<S2MultiState<T>> tileBuilder,

  // 自定义模态小部件构建器
  // 快捷方式 [builder.modal]
  S2WidgetBuilder<S2MultiState<T>> modalBuilder,

  // 自定义模态头部小部件构建器
  // 快捷方式 [builder.modalHeader]
  S2WidgetBuilder<S2MultiState<T>> modalHeaderBuilder,

  // 自定义模态操作小部件构建器
  // 快捷方式 [builder.modalActions]
  S2ListWidgetBuilder<S2MultiState<T>> modalActionsBuilder,

  // 自定义模态确认动作小部件构建器
  // 快捷方式 [builder.modalConfirm]
  S2WidgetBuilder<S2MultiState<T>> modalConfirmBuilder,

  // 自定义分隔符小部件构建器
  // 快捷方式 [builder.modalDivider]
  S2WidgetBuilder<S2MultiState<T>> modalDividerBuilder,

  // 自定义底部小部件构建器
  // 快捷方式 [builder.modalFooter]
  S2WidgetBuilder<S2MultiState<T>> modalFooterBuilder,

  // 其他配置
  ...,
  ...,

});
其他构建器
// 其他构建器配置
SmartSelect<T>.[single|multiple]({

  // 其他配置
  ...,
  ...,

  // 模态筛选小部件构建器
  // 快捷方式 [builder.modalFilter]
  S2WidgetBuilder<S2Filter> modalFilterBuilder,

  // 模态筛选切换小部件构建器
  // 快捷方式 [builder.modalFilterToggle]
  S2WidgetBuilder<S2Filter> modalFilterToggleBuilder,

  // 每个自定义选择项小部件构建器
  // 快捷方式 [builder.choice]
  S2ChoiceBuilder<T> choiceBuilder,

  // 每个自定义选择项标题小部件构建器
  // 快捷方式 [builder.choiceTitle]
  S2ChoiceBuilder<T> choiceTitleBuilder,

  // 每个自定义选择项副标题小部件构建器
  // 快捷方式 [builder.choiceSubtitle]
  S2ChoiceBuilder<T> choiceSubtitleBuilder,

  // 每个自定义选择项次级小部件构建器
  // 快捷方式 [builder.choiceSecondary]
  S2ChoiceBuilder<T> choiceSecondaryBuilder,

  /// 自定义选择项分隔符小部件构建器
  // 快捷方式 [builder.choiceDivider]
  IndexedWidgetBuilder choiceDividerBuilder,

  // 自定义空显示构建器
  // 快捷方式 [builder.choiceEmpty]
  S2WidgetBuilder<String> choiceEmptyBuilder,

  // 自定义选择项组构建器
  // 快捷方式 [builder.choiceGroup]
  S2ChoiceGroupBuilder choiceGroupBuilder,

  // 自定义选择项头部构建器
  // 快捷方式 [builder.choiceHeader]
  S2ChoiceHeaderBuilder choiceHeaderBuilder,

  // 其他配置
  ...,
  ...,

});
瓦片小部件
默认瓦片
// 默认瓦片/触发小部件
S2Tile<T>({
  
  // 选中的选项值。
  String value,

  // 列表瓦片的主要内容。
  Widget title,

  // 在标题之前显示的小部件。
  // 通常是一个 [Icon] 或 [CircleAvatar] 小部件。
  Widget leading,

  // 在标题之后显示的小部件。
  // 通常是一个 [Icon] 小部件。
  Widget trailing,

  // 此列表瓦片是否用于显示加载状态。
  bool isLoading,

  // 用于显示加载文本的字符串
  String loadingText,

  // 此列表瓦片是否用于显示两行文本。
  bool isTwoLine,

  // 此列表瓦片是否可交互。
  bool enabled,

  // 如果此瓦片也是 [enabled] 的,则图标和文本将以相同的颜色渲染。
  bool selected,

  // 是否为垂直密集列表的一部分。
  bool dense,

  // 是否显示 [value]
  bool hideValue,

  // 瓦片的内部填充。
  EdgeInsetsGeometry padding,

  // 当用户点击此列表瓦片时调用。
  GestureTapCallback onTap,

  // 显示在瓦片下方的小部件
  // 通常用于显示带有 S2TileChips 的芯片
  Widget body,

})
// 使用示例
SmartSelect<T>.single(
  ...,
  ...,
  tileBuilder: (context, state) {
    return S2Tile<dynamic>(
      title: state.titleWidget,
      value: state.valueDisplay,
      onTap: state.showModal,
      isLoading: true,
    );
  },
);

// 从状态中使用示例
SmartSelect<T>.multiple(
  ...,
  ...,
  tileBuilder: (context, state) {
    return S2Tile.fromState(
      state,
      isLoading: true,
    );
  },
);
带芯片的瓦片
// 芯片瓦片/触发小部件
S2TileChips({
  
  // 选中的选项值列表。
  int chipLength,

  // 芯片标签项的小部件构建器
  IndexedWidgetBuilder chipLabelBuilder,

  // 芯片头像项的小部件构建器
  IndexedWidgetBuilder chipAvatarBuilder,

  // 芯片项的小部件构建器
  IndexedWidgetBuilder chipBuilder,

  // 当用户删除芯片项时调用。
  ValueChanged<int> chipOnDelete,

  // 芯片颜色
  Color chipColor,

  // 芯片边框不透明度
  double chipBorderOpacity,

  // 芯片亮度
  Brightness chipBrightness,

  // 芯片删除按钮颜色
  Color chipDeleteColor,

  // 芯片删除按钮图标
  Icon chipDeleteIcon,

  // 芯片间距
  double chipSpacing,

  // 芯片运行间距
  double chipRunSpacing,

  // 芯片形状边框
  ShapeBorder chipShape,

  // [values] 为空时显示的 [Widget]
  Widget placeholder,

  // 芯片列表是否可滚动
  bool scrollable,

  // 芯片列表填充
  EdgeInsetsGeometry padding,

})
/// 使用示例
SmartSelect<String>.multiple(
  ...,
  ...,
  value: users,
  tileBuilder: (context, state) {
    return S2Tile.fromState(
      state,
      hideValue: true,
      body: S2TileChips(
        chipLength: state.valueObject.length,
        chipLabelBuilder: (context, i) {
          return Text(state.valueObject[i].title);
        },
        chipAvatarBuilder: (context, i) {
          return CircleAvatar(
            backgroundImage: NetworkImage(state.valueObject[i].meta['picture']['thumbnail'])
          );
        },
        chipOnDelete: (i) {
          setState(() => users.remove(state.valueObject[i].value));
        },
        chipColor: Colors.blue,
        chipBrightness: Brightness.dark,
        chipBorderOpacity: .5,
      ),
    );
  },
);

许可证

Copyright (c) 2021 Akbar Pulatov

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

更多关于Flutter选择组件插件awesome_select的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter选择组件插件awesome_select的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,awesome_select 是一个用于 Flutter 的强大选择组件插件,它提供了丰富的功能和灵活的配置选项。以下是一个简单的示例,展示了如何在 Flutter 应用中使用 awesome_select 插件。

首先,确保你已经在 pubspec.yaml 文件中添加了 awesome_select 依赖:

dependencies:
  flutter:
    sdk: flutter
  awesome_select: ^x.y.z  # 请替换为最新版本号

然后运行 flutter pub get 来获取依赖。

接下来,在你的 Dart 文件中导入 awesome_select 包,并创建一个示例页面来使用它。以下是一个完整的示例代码:

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Awesome Select Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  List<String> options = ['Option 1', 'Option 2', 'Option 3', 'Option 4'];
  List<String> selectedOptions = [];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Awesome Select Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            Text(
              'Selected Options:',
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 10),
            Wrap(
              children: selectedOptions.map((option) => Chip(
                label: Text(option),
                backgroundColor: Colors.blue.shade100,
                onDeleted: () {
                  setState(() {
                    selectedOptions.remove(option);
                  });
                },
              )).toList(),
            ),
            SizedBox(height: 20),
            AwesomeSelect<String>(
              initialSelection: selectedOptions,
              options: options.map((e) => AwesomeSelectOption<String>(value: e)).toList(),
              onChange: (newValue) {
                setState(() {
                  selectedOptions = newValue;
                });
              },
              multipleSelect: true,
              searchEnabled: true,
              itemBuilder: (context, option) {
                return ListTile(
                  title: Text(option.value),
                );
              },
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们定义了一个包含多个选项的列表 options 和一个用于存储已选项的列表 selectedOptions
  2. AwesomeSelect 组件用于显示选项列表并允许用户进行选择。
  3. initialSelection 参数设置为 selectedOptions,表示初始选中的项。
  4. options 参数将我们的字符串选项转换为 AwesomeSelectOption 对象列表。
  5. onChange 回调用于更新 selectedOptions 列表,当用户选择或取消选择选项时会触发。
  6. multipleSelect 设置为 true 以允许多选。
  7. searchEnabled 设置为 true 以启用搜索功能。
  8. itemBuilder 用于自定义每个选项的显示方式。

运行这个示例应用,你将看到一个包含多个选项的列表,可以选择一个或多个选项,并且选择的内容会实时显示在页面上。

回到顶部