wrapInsetField method

Widget wrapInsetField({
  1. required Widget child,
  2. required bool focused,
  3. bool hasError = false,
})

Wraps a field with an inset neumorphic shell.

Implementation

Widget wrapInsetField({
  required Widget child,
  required bool focused,
  bool hasError = false,
}) {
  final radius = BorderRadius.circular(borderRadius);

  if (hasError) {
    return DecoratedBox(
      decoration: BoxDecoration(
        color: fillColor,
        borderRadius: radius,
        border: Border.all(
          color: errorOutlineColor,
          width: errorOutlineWidth,
        ),
      ),
      child: child,
    );
  }

  final frameWidth = focused ? focusedOutlineWidth : outlineWidth;
  final darkColor = focused ? focusedOutlineColor : insetShadowColor!;
  final lightColor = insetHighlightColor!;
  final innerRadius = BorderRadius.circular(
    (borderRadius - frameWidth).clamp(0, borderRadius),
  );

  return DecoratedBox(
    decoration: BoxDecoration(
      borderRadius: radius,
      gradient: LinearGradient(
        begin: Alignment.topLeft,
        end: Alignment.bottomRight,
        colors: [darkColor, lightColor],
      ),
    ),
    child: Padding(
      padding: EdgeInsets.all(frameWidth),
      child: DecoratedBox(
        decoration: BoxDecoration(
          color: fillColor,
          borderRadius: innerRadius,
        ),
        child: ClipRRect(borderRadius: innerRadius, child: child),
      ),
    ),
  );
}