buildDecoration method

Widget? buildDecoration(
  1. BuildTree tree,
  2. Widget child,
  3. {BoxBorder? border,
  4. BorderRadius? borderRadius,
  5. Color? color,
  6. DecorationImage? image}
)

Builds Decoration.

Implementation

Widget? buildDecoration(
  BuildTree tree,
  Widget child, {
  BoxBorder? border,
  BorderRadius? borderRadius,
  Color? color,
  DecorationImage? image,
}) {
  if (border == null &&
      borderRadius == null &&
      color == null &&
      image == null) {
    return child;
  }

  final container = child is Container ? child : null;
  final grandChild = container?.child;
  final prevDeco = container?.decoration;
  final baseDeco =
      prevDeco is BoxDecoration ? prevDeco : const BoxDecoration();
  var decoration = baseDeco.copyWith(
    border: border,
    color: color,
    image: image,
  );

  var clipBehavior = Clip.none;
  if (borderRadius != null) {
    final borderIsUniform = decoration.border?.isUniform ?? true;
    if (borderIsUniform) {
      // TODO: require uniform color & style when our minimum Flutter version >= 3.10
      // support for non-uniform border has been improved since this commit
      // https://github.com/flutter/flutter/commit/5054b6e514a7af91db9859b4eb55d71177d19cfa
      decoration = decoration.copyWith(borderRadius: borderRadius);
      clipBehavior = Clip.hardEdge;
    }
  }

  return Container(
    decoration: decoration,
    clipBehavior: clipBehavior,
    child: grandChild ?? child,
  );
}