m3eGradientBackgroundBuilder function

ButtonLayerBuilder? m3eGradientBackgroundBuilder({
  1. required BorderRadius clipRadius,
  2. WidgetStateProperty<Gradient?>? gradient,
  3. ButtonLayerBuilder? explicitBuilder,
})

Builds a ButtonLayerBuilder that paints gradient behind the child.

When explicitBuilder is set, it wins. The result is always clipped to clipRadius unless explicitBuilder is used (caller clips that path).

Implementation

ButtonLayerBuilder? m3eGradientBackgroundBuilder({
  required BorderRadius clipRadius,
  WidgetStateProperty<Gradient?>? gradient,
  ButtonLayerBuilder? explicitBuilder,
}) {
  if (explicitBuilder != null) {
    return (BuildContext context, Set<WidgetState> states, Widget? child) {
      return ClipRRect(
        borderRadius: clipRadius,
        child: explicitBuilder(context, states, child),
      );
    };
  }
  if (gradient == null) {
    return null;
  }
  return (BuildContext context, Set<WidgetState> states, Widget? child) {
    final Gradient? resolved = gradient.resolve(states);
    if (resolved == null) {
      return child ?? const SizedBox.shrink();
    }
    return m3eGradientFillLayer(
      clipRadius: clipRadius,
      gradient: resolved,
      child: child,
      disabled: states.contains(WidgetState.disabled),
    );
  };
}