FormeChoiceChip<T extends Object> constructor
FormeChoiceChip<T extends Object> ({
- Key? key,
- String? name,
- T? initialValue,
- FormeAsyncValidator<
T?> ? asyncValidator, - Duration? asyncValidatorDebounce,
- AutovalidateMode? autovalidateMode,
- FormeFieldDecorator<
T?> ? decorator, - bool enabled = true,
- FocusNode? focusNode,
- FormeFieldInitialized<
T?> ? onInitialized, - FormeFieldSetter<
T?> ? onSaved, - FormeFieldStatusChanged<
T?> ? onStatusChanged, - int? order,
- bool quietlyValidate = false,
- bool readOnly = false,
- bool requestFocusOnUserInteraction = true,
- FormeFieldValidationFilter<
T?> ? validationFilter, - FormeValidator<
T?> ? validator, - InputDecoration? decoration,
- EdgeInsets? padding,
- ChipThemeData? chipThemeData,
- Axis direction = Axis.horizontal,
- WrapAlignment alignment = WrapAlignment.start,
- WrapAlignment runAlignment = WrapAlignment.start,
- double runSpacing = 0.0,
- double spacing = 0.0,
- WrapCrossAlignment crossAxisAlignment = WrapCrossAlignment.start,
- TextDirection? textDirection,
- VerticalDirection verticalDirection = VerticalDirection.down,
- required List<
FormeChipItem< items,T> >
Implementation
FormeChoiceChip({
super.key,
super.name,
super.initialValue,
super.asyncValidator,
super.asyncValidatorDebounce,
super.autovalidateMode,
FormeFieldDecorator<T?>? decorator,
super.enabled = true,
super.focusNode,
super.onInitialized,
super.onSaved,
super.onStatusChanged,
super.order,
super.quietlyValidate = false,
super.readOnly = false,
super.requestFocusOnUserInteraction = true,
super.validationFilter,
super.validator,
this.decoration,
this.padding,
this.chipThemeData,
this.direction = Axis.horizontal,
this.alignment = WrapAlignment.start,
this.runAlignment = WrapAlignment.start,
this.runSpacing = 0.0,
this.spacing = 0.0,
this.crossAxisAlignment = WrapCrossAlignment.start,
this.textDirection,
this.verticalDirection = VerticalDirection.down,
required this.items,
}) : super.allFields(
decorator: decorator ??
(decoration == null
? null
: FormeInputDecorationDecorator(
decorationBuilder: (context) => decoration,
childBuilder: (context, child) => Padding(
padding: padding ??
const EdgeInsets.symmetric(
vertical: 5, horizontal: 8),
child: child,
),
)),
builder: (state) {
final bool readOnly = state.readOnly;
final List<Widget> chips = [];
for (final FormeChipItem<T> item in items) {
final bool isReadOnly = readOnly || item.readOnly;
final ChoiceChip chip = ChoiceChip(
selected: state.value == item.data,
label: item.label,
avatar: item.avatar,
padding: item.padding,
pressElevation: item.pressElevation,
tooltip: item.tooltip ?? item.tooltip,
materialTapTargetSize: item.materialTapTargetSize,
avatarBorder: item.avatarBorder,
backgroundColor: item.backgroundColor,
shadowColor: item.shadowColor,
disabledColor: item.disabledColor,
selectedColor: item.selectedColor,
selectedShadowColor: item.selectedShadowColor,
visualDensity: item.visualDensity,
elevation: item.elevation,
labelPadding: item.labelPadding,
labelStyle: item.labelStyle,
shape: item.shape,
side: item.side,
clipBehavior: item.clipBehavior,
surfaceTintColor: item.surfaceTintColor,
iconTheme: item.iconTheme,
onSelected: isReadOnly
? null
: (bool selected) {
if (state.value == item.data) {
state.didChange(null);
} else {
state.didChange(item.data);
}
state.requestFocusOnUserInteraction();
},
);
chips.add(Visibility(
visible: item.visible,
child: Padding(
padding: item.padding,
child: chip,
)));
}
final Widget chipWidget = Wrap(
spacing: spacing,
runSpacing: runSpacing,
textDirection: textDirection,
crossAxisAlignment: crossAxisAlignment,
verticalDirection: verticalDirection,
alignment: alignment,
direction: direction,
runAlignment: runAlignment,
children: chips,
);
return Focus(
focusNode: state.focusNode,
child: ChipTheme(
data: chipThemeData ?? ChipTheme.of(state.context),
child: chipWidget,
),
);
},
);