SmartSelect<T>.multiple constructor

SmartSelect<T>.multiple({
  1. Key key,
  2. String title,
  3. String placeholder = 'Select one or more',
  4. List<T> selectedValue,
  5. List<S2Choice<T>> selectedChoice,
  6. S2MultiSelectedResolver<T> selectedResolver,
  7. ValueChanged<S2MultiSelected<T>> onChange,
  8. S2ChoiceSelect<S2MultiState<T>, S2Choice<T>> onSelect,
  9. S2ModalOpen<S2MultiState<T>> onModalOpen,
  10. S2ModalClose<S2MultiState<T>> onModalClose,
  11. S2ModalWillOpen<S2MultiState<T>> onModalWillOpen,
  12. S2ModalWillClose<S2MultiState<T>> onModalWillClose,
  13. S2Validation<S2MultiChosen<T>> validation,
  14. S2Validation<S2MultiChosen<T>> modalValidation,
  15. List<S2Choice<T>> choiceItems,
  16. S2ChoiceLoader<T> choiceLoader,
  17. S2MultiBuilder<T> builder,
  18. S2WidgetBuilder<S2MultiState<T>> tileBuilder,
  19. S2WidgetBuilder<S2MultiState<T>> modalBuilder,
  20. S2WidgetBuilder<S2MultiState<T>> modalHeaderBuilder,
  21. S2ListWidgetBuilder<S2MultiState<T>> modalActionsBuilder,
  22. S2WidgetBuilder<S2MultiState<T>> modalConfirmBuilder,
  23. S2WidgetBuilder<S2MultiState<T>> modalDividerBuilder,
  24. S2WidgetBuilder<S2MultiState<T>> modalFooterBuilder,
  25. S2WidgetBuilder<S2MultiState<T>> modalFilterBuilder,
  26. S2WidgetBuilder<S2MultiState<T>> modalFilterToggleBuilder,
  27. S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceBuilder,
  28. S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceTitleBuilder,
  29. S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceSubtitleBuilder,
  30. S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceSecondaryBuilder,
  31. IndexedWidgetBuilder choiceDividerBuilder,
  32. S2WidgetBuilder<S2MultiState<T>> choiceEmptyBuilder,
  33. S2ComplexWidgetBuilder<S2MultiState<T>, S2Group<T>> groupBuilder,
  34. S2ComplexWidgetBuilder<S2MultiState<T>, S2Group<T>> groupHeaderBuilder,
  35. S2ChoiceConfig choiceConfig,
  36. S2ChoiceStyle choiceStyle,
  37. S2ChoiceStyle choiceActiveStyle,
  38. S2ChoiceType choiceType,
  39. S2ChoiceLayout choiceLayout,
  40. Axis choiceDirection,
  41. bool choiceGrouped,
  42. bool choiceDivider,
  43. SliverGridDelegate choiceGrid,
  44. int choiceGridCount,
  45. double choiceGridSpacing,
  46. int choicePageLimit,
  47. Duration choiceDelay,
  48. S2GroupConfig groupConfig,
  49. bool groupEnabled,
  50. bool groupSelector,
  51. bool groupCounter,
  52. S2GroupSort groupSortBy,
  53. S2GroupHeaderStyle groupHeaderStyle,
  54. S2ModalConfig modalConfig,
  55. S2ModalStyle modalStyle,
  56. S2ModalHeaderStyle modalHeaderStyle,
  57. S2ModalType modalType,
  58. String modalTitle,
  59. bool modalConfirm,
  60. bool modalHeader,
  61. bool modalFilter,
  62. bool modalFilterAuto,
  63. String modalFilterHint,
})

Constructor for multiple choice

The title argument is text to display in trigger widget and modal header.

The placeholder argument is text to display when there is no selected choice.

The selectedValue argument is current selected value.

The selectedChoice argument is current selected choice.

The selectedResolver is function to resolve selectedChoice from selectedValue

The onChange called when value changed.

The onSelect called when selection has been made.

The onModalOpen called when modal opened.

The onModalClose called when modal closed.

The onModalWillOpen called when modal will open.

The onModalWillClose called when modal will close.

The validation is function to validate the selected.

The modalValidation is function to validate the choice selection in the modal.

The choiceItems is List of S2Choice item to generate the choices.

The choiceLoader is function to load the choice items.

The builder is collection of builder for single choice widget.

The tileBuilder is shortcut to builder.tile, a widget builder to customize tile widget.

The modalBuilder is shortcut to builder.modal, a widget builder to customize modal widget.

The modalHeaderBuilder is shortcut to builder.modalHeader, a widget builder to customize modal header widget.

The modalActionsBuilder is shortcut to builder.modalActions, a widget builder to customize modal actions widget.

The modalConfirmBuilder is shortcut to builder.modalConfirm, a widget builder to customize modal confirm action widget.

The modalDividerBuilder is shortcut to builder.modalDivider, a widget builder to customize divider widget between header, body, and footer modal.

The modalFooterBuilder is shortcut to builder.modalFooter, a widget builder to customize footer widget.

The modalFilterBuilder is shortcut to builder.modalFilter, a widget builder to customize filter widget.

The modalFilterToggleBuilder is shortcut to builder.modalFilterToggle, a widget builder to customize filter toggle widget.

The choiceBuilder is shortcut to builder.choice, a widget builder to customize each choice item widget.

The choiceTitleBuilder is shortcut to builder.choiceTitle, a widget builder to customize each choice item title widget.

The choiceSubtitleBuilder is shortcut to builder.choiceSubtitle, a widget builder to customize choice item subtitle widget.

The choiceSecondaryBuilder is shortcut to builder.choiceSecondary, a widget builder to customize choice item secondary widget.

The choiceDividerBuilder is shortcut to builder.choiceDivider, a widget builder to customize divider widget between choices item.

The choiceEmptyBuilder is shortcut to builder.choiceEmpty, a widget builder to customize empty display widget.

The choiceGroupBuilder is shortcut to builder.choiceGroup, a widget builder to customize choices group widget.

The choiceHeaderBuilder is shortcut to builder.choiceHeader, a widget builder to customize header widget on grouped choices.

The choiceConfig is a configuration to customize choice widget.

The choiceStyle is shortcut to choiceConfig.style, a configuration for styling unselected choice widget.

The choiceActiveStyle is shortcut to choiceConfig.activeStyle, a configuration for styling selected choice widget.

The choiceHeaderStyle is shortcut to choiceConfig.headerStyle, a configuration for styling header widget of grouped choices.

The choiceType is shortcut to choiceConfig.type, widget type to display the choice items.

The choiceLayout is shortcut to choiceConfig.layout, layout to display the choice items.

The choiceDirection is shortcut to choiceConfig.direction, scroll direction of the choice items, currently only support when choiceLayout or choiceConfig.layout is S2ChoiceLayout.wrap.

The choiceGrouped is shortcut to groupConfig.enabled, whether the choice items is grouped or not, based on S2Choice.group value.

The choiceDivider is shortcut to choiceConfig.useDivider, whether the choice items use divider or not.

The choiceGrid is shortcut to choiceConfig.gridDelegate, if choiceLayout is S2ChoiceLayout.grid, a delegate that controls the layout of the children within the GridView.

The choiceGridCount is shortcut to choiceConfig.gridCount, if choiceLayout is S2ChoiceLayout.grid, the number of children in the cross axis, and ignored if choiceGrid is defined,

The choiceGridSpacing is shortcut to choiceConfig.gridSpacing, if choiceLayout is S2ChoiceLayout.grid, fill the crossAxisSpacing and crossAxisSpacing with single configuration, and ignored if choiceGrid is defined.

The choicePageLimit is shortcut to choiceConfig.pageLimit, limit per page to display the choices, defaults to null, it means disabled the paging.

The choiceDelay is shortcut to choiceConfig.delay, time delay before display the choices.

The groupConfig is a configuration to customize grouped widget.

The groupEnabled is shortcut to groupConfig.enabled, alterative to choiceGrouped, whether the choices list is grouped or not, based on S2Choice.group.

The groupSelector is shortcut to groupConfig.useSelector, if groupEnabled is true, whether the group header displays the choices selector toggle or not.

The groupCounter is shortcut to groupConfig.useCounter, if groupEnabled is true, whether the group header displays the choices counter or not.

The groupSortBy is shortcut to groupConfig.sortBy, if groupEnabled is true, comparator function to sort the group keys, and defaults to null to disabled the sorting.

The groupHeaderStyle is shortcut to groupConfig.headerStyle, if groupEnabled is true, configure choices group header theme.

Then modalConfig is configuration to customize behavior of the choices modal.

The modalStyle is shortcut to modalConfig.style, a configuration for styling modal widget.

The modalHeaderStyle is shortcut to modalConfig.headerStyle, a configuration for styling header of the modal widget.

The modalType is shortcut to modalConfig.type, modal type to display the choice items.

The modalTitle is shortcut to modalConfig.title, used to override title in the modal widget.

The modalConfirm is shortcut to modalConfig.useConfirm, Whether the modal need to confirm before returning the changed value.

The modalHeader is shortcut to modalConfig.useHeader, Whether the modal use header or not.

The modalFilter is shortcut to modalConfig.useFilter, Whether the choice items in the modal is filterable or not.

The modalFilterAuto shortcut to modalConfig.filterAuto, Whether the filter is autocomplete or need to confirm with filter button.

The modalFilterHint is shortcut to modalConfig.filterHint, String to display as hint in searchbar.

Implementation

factory SmartSelect.multiple({
  Key key,
  String title,
  String placeholder = 'Select one or more',
  List<T> selectedValue,
  List<S2Choice<T>> selectedChoice,
  S2MultiSelectedResolver<T> selectedResolver,
  ValueChanged<S2MultiSelected<T>> onChange,
  S2ChoiceSelect<S2MultiState<T>, S2Choice<T>> onSelect,
  S2ModalOpen<S2MultiState<T>> onModalOpen,
  S2ModalClose<S2MultiState<T>> onModalClose,
  S2ModalWillOpen<S2MultiState<T>> onModalWillOpen,
  S2ModalWillClose<S2MultiState<T>> onModalWillClose,
  S2Validation<S2MultiChosen<T>> validation,
  S2Validation<S2MultiChosen<T>> modalValidation,
  List<S2Choice<T>> choiceItems,
  S2ChoiceLoader<T> choiceLoader,
  S2MultiBuilder<T> builder,
  S2WidgetBuilder<S2MultiState<T>> tileBuilder,
  S2WidgetBuilder<S2MultiState<T>> modalBuilder,
  S2WidgetBuilder<S2MultiState<T>> modalHeaderBuilder,
  S2ListWidgetBuilder<S2MultiState<T>> modalActionsBuilder,
  S2WidgetBuilder<S2MultiState<T>> modalConfirmBuilder,
  S2WidgetBuilder<S2MultiState<T>> modalDividerBuilder,
  S2WidgetBuilder<S2MultiState<T>> modalFooterBuilder,
  S2WidgetBuilder<S2MultiState<T>> modalFilterBuilder,
  S2WidgetBuilder<S2MultiState<T>> modalFilterToggleBuilder,
  S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceBuilder,
  S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceTitleBuilder,
  S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceSubtitleBuilder,
  S2ComplexWidgetBuilder<S2MultiState<T>, S2Choice<T>> choiceSecondaryBuilder,
  IndexedWidgetBuilder choiceDividerBuilder,
  S2WidgetBuilder<S2MultiState<T>> choiceEmptyBuilder,
  S2ComplexWidgetBuilder<S2MultiState<T>, S2Group<T>> groupBuilder,
  S2ComplexWidgetBuilder<S2MultiState<T>, S2Group<T>> groupHeaderBuilder,
  S2ChoiceConfig choiceConfig,
  S2ChoiceStyle choiceStyle,
  S2ChoiceStyle choiceActiveStyle,
  S2ChoiceType choiceType,
  S2ChoiceLayout choiceLayout,
  Axis choiceDirection,
  bool choiceGrouped,
  bool choiceDivider,
  SliverGridDelegate choiceGrid,
  int choiceGridCount,
  double choiceGridSpacing,
  int choicePageLimit,
  Duration choiceDelay,
  S2GroupConfig groupConfig,
  bool groupEnabled,
  bool groupSelector,
  bool groupCounter,
  S2GroupSort groupSortBy,
  S2GroupHeaderStyle groupHeaderStyle,
  S2ModalConfig modalConfig,
  S2ModalStyle modalStyle,
  S2ModalHeaderStyle modalHeaderStyle,
  S2ModalType modalType,
  String modalTitle,
  bool modalConfirm,
  bool modalHeader,
  bool modalFilter,
  bool modalFilterAuto,
  String modalFilterHint,
}) {
  S2ChoiceConfig defaultChoiceConfig = const S2ChoiceConfig(
    type: S2ChoiceType.checkboxes,
  );
  S2ModalConfig defaultModalConfig = const S2ModalConfig();
  S2GroupConfig defaultGroupConfig = const S2GroupConfig();
  return SmartSelect<T>(
    key: key,
    title: title,
    placeholder: placeholder,
    choiceItems: choiceItems,
    choiceLoader: choiceLoader,
    isMultiChoice: true,
    multiSelected: S2MultiSelected<T>(
      value: selectedValue,
      choice: selectedChoice,
      resolver: selectedResolver,
      validation: validation,
      placeholder: placeholder,
    ),
    multiOnChange: onChange,
    multiOnSelect: onSelect,
    multiOnModalOpen: onModalOpen,
    multiOnModalClose: onModalClose,
    multiOnModalWillOpen: onModalWillOpen,
    multiOnModalWillClose: onModalWillClose,
    multiValidation: validation,
    multiModalValidation: modalValidation,
    multiBuilder: S2MultiBuilder<T>().merge(builder).copyWith(
          tile: tileBuilder,
          modal: modalBuilder,
          modalHeader: modalHeaderBuilder,
          modalActions: modalActionsBuilder,
          modalConfirm: modalConfirmBuilder,
          modalDivider: modalDividerBuilder,
          modalFooter: modalFooterBuilder,
          modalFilter: modalFilterBuilder,
          modalFilterToggle: modalFilterToggleBuilder,
          choice: choiceBuilder,
          choiceTitle: choiceTitleBuilder,
          choiceSubtitle: choiceSubtitleBuilder,
          choiceSecondary: choiceSecondaryBuilder,
          choiceDivider: choiceDividerBuilder,
          choiceEmpty: choiceEmptyBuilder,
          group: groupBuilder,
          groupHeader: groupHeaderBuilder,
        ),
    choiceConfig: defaultChoiceConfig.merge(choiceConfig).copyWith(
          type: choiceType,
          layout: choiceLayout,
          direction: choiceDirection,
          gridDelegate: choiceGrid,
          gridCount: choiceGridCount,
          gridSpacing: choiceGridSpacing,
          useDivider: choiceDivider,
          style: choiceStyle,
          activeStyle: choiceActiveStyle,
          pageLimit: choicePageLimit,
          delay: choiceDelay,
        ),
    groupConfig: defaultGroupConfig.merge(groupConfig).copyWith(
          enabled: groupEnabled ?? choiceGrouped,
          useSelector: groupSelector,
          useCounter: groupCounter,
          sortBy: groupSortBy,
          headerStyle: groupHeaderStyle,
        ),
    modalConfig: defaultModalConfig.merge(modalConfig).copyWith(
          type: modalType,
          title: modalTitle,
          filterHint: modalFilterHint,
          filterAuto: modalFilterAuto,
          useFilter: modalFilter,
          useHeader: modalHeader,
          useConfirm: modalConfirm,
          style: modalStyle,
          headerStyle: modalHeaderStyle,
        ),
  );
}