buildInputDecoration method

InputDecoration buildInputDecoration(
  1. BuildContext context,
  2. Set<WidgetState> states, {
  3. bool expands = false,
  4. Widget? beforePostWidget,
  5. Widget? beforePreWidget,
  6. String? label,
  7. String? placeholder,
  8. String? tag,
  9. String? helperText,
  10. List<String>? errors,
  11. bool isRequired = false,
  12. VoidCallback? onClear,
  13. Widget? infoIcon,
})

Implementation

InputDecoration buildInputDecoration(
  BuildContext context,
  Set<WidgetState> states, {
  bool expands = false,
  Widget? beforePostWidget,
  Widget? beforePreWidget,
  String? label,
  String? placeholder,
  String? tag,
  String? helperText,
  List<String>? errors,
  bool isRequired = false,
  VoidCallback? onClear,
  Widget? infoIcon,
}) {
  final inputBorder = buildInputBorder(states);

  final hasPrefix = beforePreWidget != null || preWidget != null;
  final hasSuffix = onClear != null || beforePostWidget != null || infoIcon != null || postWidget != null;

  final isFilled = decorationType == TInputDecorationType.filled;

  final fillColor = backgroundColor != null ? backgroundColor!.resolve(states) : _defaultBackgroundColor(decorationType, states, context);

  return InputDecoration(
    border: inputBorder,
    enabledBorder: inputBorder,
    focusedErrorBorder: inputBorder,
    disabledBorder: inputBorder,
    focusedBorder: inputBorder,
    errorBorder: inputBorder,
    contentPadding: fieldPadding,
    label: labelPosition == TLabelPosition.aboveField ? null : labelBuilder.resolve(states)(label, tag, isRequired, null),
    labelStyle: labelStyle.resolve(states),
    floatingLabelStyle: labelStyle.resolve(states),
    floatingLabelBehavior: switch (labelPosition) {
      TLabelPosition.aboveField => FloatingLabelBehavior.never,
      TLabelPosition.floating || TLabelPosition.inlineFloating => FloatingLabelBehavior.auto,
    },
    isDense: true,
    visualDensity: VisualDensity.compact,
    hintText: placeholder,
    hintStyle: hintStyle.resolve(states),
    prefixIconConstraints: BoxConstraints(minHeight: fieldHeight - fieldPadding.vertical, minWidth: hasPrefix ? 40 : fieldPadding.left),
    prefixIcon: _buildPreWidget(beforePreWidget),
    suffixIconConstraints: BoxConstraints(minHeight: fieldHeight - fieldPadding.vertical, minWidth: hasSuffix ? 40 : fieldPadding.right),
    suffixIcon: _buildPostWidget(
      beforePostWidget: beforePostWidget,
      onClear: onClear,
      infoIcon: labelPosition == TLabelPosition.floating || labelPosition == TLabelPosition.inlineFloating ? infoIcon : null,
    ),
    filled: isFilled,
    fillColor: fillColor,
    focusColor: fillColor,
    hoverColor: fillColor,
  );
}