FMultiSelect<T> constructor

FMultiSelect<T>({
  1. required Map<String, T> items,
  2. FMultiSelectController<T>? controller,
  3. FMultiSelectStyle style(
    1. FMultiSelectStyle
    )?,
  4. bool autofocus = false,
  5. FocusNode? focusNode,
  6. FFieldIconBuilder<FMultiSelectStyle>? prefixBuilder,
  7. FFieldIconBuilder<FMultiSelectStyle>? suffixBuilder = defaultIconBuilder,
  8. Widget? label,
  9. Widget? description,
  10. bool enabled = true,
  11. ValueChanged<Set<T>>? onChange,
  12. void onSaved(
    1. Set<T>
    )?,
  13. AutovalidateMode autovalidateMode = AutovalidateMode.onUnfocus,
  14. String? forceErrorText,
  15. String? validator(
    1. Set<T>
    ) = _defaultValidator,
  16. Widget errorBuilder(
    1. BuildContext,
    2. String
    ) = FFormFieldProperties.defaultErrorBuilder,
  17. Widget? hint,
  18. bool keepHint = true,
  19. int sort(
    1. T,
    2. T
    )?,
  20. Widget tagBuilder(
    1. BuildContext,
    2. FMultiSelectController<T>,
    3. FMultiSelectStyle,
    4. T,
    5. Widget,
    )?,
  21. TextAlign textAlign = TextAlign.start,
  22. TextDirection? textDirection,
  23. bool clearable = false,
  24. AlignmentGeometry anchor = AlignmentDirectional.topStart,
  25. AlignmentGeometry fieldAnchor = AlignmentDirectional.bottomStart,
  26. FPortalConstraints popoverConstraints = const FAutoWidthPortalConstraints(maxHeight: 300),
  27. FPortalSpacing spacing = const FPortalSpacing(4),
  28. Offset shift(
    1. Size,
    2. FPortalChildBox,
    3. FPortalBox
    ) = FPortalShift.flip,
  29. Offset offset = Offset.zero,
  30. FPopoverHideRegion hideRegion = FPopoverHideRegion.excludeChild,
  31. Widget contentEmptyBuilder(
    1. BuildContext,
    2. FMultiSelectStyle
    ) = FMultiSelect.defaultContentEmptyBuilder,
  32. ScrollController? contentScrollController,
  33. bool contentScrollHandles = false,
  34. ScrollPhysics contentPhysics = const ClampingScrollPhysics(),
  35. FItemDivider contentDivider = FItemDivider.none,
  36. int min = 0,
  37. int? max,
  38. Set<T>? initialValue,
  39. Key? key,
})

Creates a FMultiSelect from the given items.

For more control over the appearance of items, use FMultiSelect.rich.

Contract

Each key in items must map to a unique value. Having multiple keys map to the same value will result in undefined behavior.

Implementation

factory FMultiSelect({
  required Map<String, T> items,
  FMultiSelectController<T>? controller,
  FMultiSelectStyle Function(FMultiSelectStyle)? style,
  bool autofocus = false,
  FocusNode? focusNode,
  FFieldIconBuilder<FMultiSelectStyle>? prefixBuilder,
  FFieldIconBuilder<FMultiSelectStyle>? suffixBuilder = defaultIconBuilder,
  Widget? label,
  Widget? description,
  bool enabled = true,
  ValueChanged<Set<T>>? onChange,
  void Function(Set<T>)? onSaved,
  AutovalidateMode autovalidateMode = AutovalidateMode.onUnfocus,
  String? forceErrorText,
  String? Function(Set<T>) validator = _defaultValidator,
  Widget Function(BuildContext, String) errorBuilder = FFormFieldProperties.defaultErrorBuilder,
  Widget? hint,
  bool keepHint = true,
  int Function(T, T)? sort,
  Widget Function(BuildContext, FMultiSelectController<T>, FMultiSelectStyle, T, Widget)? tagBuilder,
  TextAlign textAlign = TextAlign.start,
  TextDirection? textDirection,
  bool clearable = false,
  AlignmentGeometry anchor = AlignmentDirectional.topStart,
  AlignmentGeometry fieldAnchor = AlignmentDirectional.bottomStart,
  FPortalConstraints popoverConstraints = const FAutoWidthPortalConstraints(maxHeight: 300),
  FPortalSpacing spacing = const FPortalSpacing(4),
  Offset Function(Size, FPortalChildBox, FPortalBox) shift = FPortalShift.flip,
  Offset offset = Offset.zero,
  FPopoverHideRegion hideRegion = FPopoverHideRegion.excludeChild,
  Widget Function(BuildContext, FMultiSelectStyle) contentEmptyBuilder = FMultiSelect.defaultContentEmptyBuilder,
  ScrollController? contentScrollController,
  bool contentScrollHandles = false,
  ScrollPhysics contentPhysics = const ClampingScrollPhysics(),
  FItemDivider contentDivider = FItemDivider.none,
  int min = 0,
  int? max,
  Set<T>? initialValue,
  Key? key,
}) {
  final inverse = {for (final MapEntry(:key, :value) in items.entries) value: key};
  return FMultiSelect<T>.rich(
    controller: controller,
    style: style,
    autofocus: autofocus,
    focusNode: focusNode,
    prefixBuilder: prefixBuilder,
    suffixBuilder: suffixBuilder,
    label: label,
    description: description,
    format: (value) => Text(inverse[value] ?? ''),
    sort: sort,
    tagBuilder: tagBuilder,
    enabled: enabled,
    onChange: onChange,
    onSaved: onSaved,
    autovalidateMode: autovalidateMode,
    forceErrorText: forceErrorText,
    validator: validator,
    errorBuilder: errorBuilder,
    hint: hint,
    keepHint: keepHint,
    textAlign: textAlign,
    textDirection: textDirection,
    clearable: clearable,
    anchor: anchor,
    fieldAnchor: fieldAnchor,
    popoverConstraints: popoverConstraints,
    spacing: spacing,
    shift: shift,
    offset: offset,
    hideRegion: hideRegion,
    contentEmptyBuilder: contentEmptyBuilder,
    contentScrollController: contentScrollController,
    contentScrollHandles: contentScrollHandles,
    contentPhysics: contentPhysics,
    contentDivider: contentDivider,
    min: min,
    max: max,
    initialValue: initialValue,
    key: key,
    children: [for (final MapEntry(:key, :value) in items.entries) FSelectItem(title: Text(key), value: value)],
  );
}