buildDecoration method
Widget?
buildDecoration(
- BuildTree tree,
- Widget child, {
- BoxBorder? border,
- BorderRadius? borderRadius,
- Color? color,
- DecorationImage? image,
inherited
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: add support for non-uniform border
// https://github.com/flutter/flutter/commit/5054b6e
// https://pub.dev/packages/non_uniform_border
decoration = decoration.copyWith(borderRadius: borderRadius);
clipBehavior = Clip.hardEdge;
}
}
return Container(
decoration: decoration,
clipBehavior: clipBehavior,
child: grandChild ?? child,
);
}