IconDataExternalField constructor

IconDataExternalField({
  1. required String iconLabel(
    1. IconData value
    ),
  2. required Future<IconData?> selection(
    1. BuildContext context,
    2. IconData? data
    ),
  3. IconDataExternalFieldController? controller,
  4. FocusNode? focusNode,
  5. bool clearOnCancel = false,
  6. String? labelPrefix,
  7. String? label,
  8. Widget? labelWidget,
  9. FormFieldSetter<IconData>? onSaved,
  10. FormFieldValidator<IconData>? validator,
  11. IconData? initialValue,
  12. bool enabled = true,
  13. AutovalidateMode? autovalidateMode = AutovalidateMode.disabled,
  14. TextStyle? style,
  15. double? iconSize,
  16. InputDecoration? decoration,
  17. EdgeInsets padding = const EdgeInsets.all(8),
  18. Widget? suffixIcon = const Icon(FontAwesomeIcons.magnifyingGlass),
  19. EdgeInsets? contentPadding,
  20. int? sizeExtraSmall,
  21. int? sizeSmall,
  22. int? sizeMedium,
  23. int? sizeLarge,
  24. int? sizeExtraLarge,
  25. double? minHeight,
  26. Key? key,
})

Implementation

IconDataExternalField({
  required this.iconLabel,
  required this.selection,
  this.controller,
  this.focusNode,
  this.clearOnCancel = false,
  final String? labelPrefix,
  final String? label,
  final Widget? labelWidget,
  super.onSaved,
  final FormFieldValidator<IconData>? validator,
  final IconData? initialValue,
  super.enabled = true,
  super.autovalidateMode = AutovalidateMode.disabled,
  final TextStyle? style,
  final double? iconSize,
  final InputDecoration? decoration,
  final EdgeInsets padding = const EdgeInsets.all(8),
  final Widget? suffixIcon = const Icon(FontAwesomeIcons.magnifyingGlass),
  final EdgeInsets? contentPadding,
  super.sizeExtraSmall,
  super.sizeSmall,
  super.sizeMedium,
  super.sizeLarge,
  super.sizeExtraLarge,
  super.minHeight,
  super.key,
}) : assert(
       initialValue == null || controller == null,
       'initialValue or controller must be null.',
     ),
     assert(
       label == null || labelWidget == null,
       'label or labelWidget must be null.',
     ),
     super(
       initialValue: controller?.value ?? initialValue,
       validator: enabled ? validator : null,
       builder: (final FormFieldState<IconData> field) {
         _IconDataExternalFieldState state =
             field as _IconDataExternalFieldState;

         final ThemeData theme = Theme.of(state.context);

         final bool hasFocus = state._effectiveFocusNode.hasFocus;

         final Color? color = enabled
             ? hasFocus
                   ? theme.colorScheme.primary
                   : null
             : theme.disabledColor;

         final TextStyle? effectiveStyle =
             (style ??
                     theme.textTheme.titleMedium?.copyWith(
                       color: theme.colorScheme.onSurfaceVariant,
                     ))
                 ?.copyWith(color: color);

         final InputDecoration effectiveDecoration =
             (decoration ??
                     InputDecoration(
                       border: const OutlineInputBorder(),
                       label: labelWidget,
                       labelText: <String?>[
                         labelPrefix,
                         label,
                       ].nonNulls.join(' - '),
                       counterText: '',
                       contentPadding: contentPadding,
                       suffixIcon: suffixIcon,
                     ))
                 .applyDefaults(theme.inputDecorationTheme)
                 .copyWith(
                   prefixIcon: state.value != null
                       ? Icon(state.value, size: iconSize, color: color)
                       : null,
                   enabled: enabled,
                   errorText: state.errorText,
                 );

         return Padding(
           padding: padding,
           child: Focus(
             focusNode: state._effectiveFocusNode,
             canRequestFocus: enabled,
             skipTraversal: !enabled,
             child: MouseRegion(
               cursor: enabled
                   ? SystemMouseCursors.click
                   : SystemMouseCursors.basic,
               onEnter: (_) => state.hovering(enter: true),
               onExit: (_) => state.hovering(enter: false),
               child: GestureDetector(
                 onTap: enabled ? state._handleTap : null,
                 child: InputDecorator(
                   decoration: effectiveDecoration,
                   isEmpty: state.value == null,
                   isFocused: hasFocus,
                   isHovering: state._isHovering,
                   child: isNull(state.value)
                       ? null
                       : Text(iconLabel(state.value!), style: effectiveStyle),
                 ),
               ),
             ),
           ),
         );
       },
     );