Implement preferPaintInterior correctly for _CompoundBorder (#129851)

This commit is contained in:
Ian Hickson
2023-07-10 23:44:33 -07:00
committed by GitHub
parent 81d7297d91
commit d71bbfb490
2 changed files with 68 additions and 1 deletions

View File

@@ -840,7 +840,7 @@ class _CompoundBorder extends ShapeBorder {
}
@override
bool get preferPaintInterior => true;
bool get preferPaintInterior => borders.every((ShapeBorder border) => border.preferPaintInterior);
@override
void paint(Canvas canvas, Rect rect, { TextDirection? textDirection }) {

View File

@@ -402,4 +402,71 @@ void main() {
await tester.pumpWidget(buildWidget(border: allowedBorderDirectionalVariations, boxShape: BoxShape.circle));
expect(tester.takeException(), isNull);
});
test('Compound borders with differing preferPaintInteriors', () {
expect(ShapeWithInterior().preferPaintInterior, isTrue);
expect(ShapeWithoutInterior().preferPaintInterior, isFalse);
expect((ShapeWithInterior() + ShapeWithInterior()).preferPaintInterior, isTrue);
expect((ShapeWithInterior() + ShapeWithoutInterior()).preferPaintInterior, isFalse);
expect((ShapeWithoutInterior() + ShapeWithInterior()).preferPaintInterior, isFalse);
expect((ShapeWithoutInterior() + ShapeWithoutInterior()).preferPaintInterior, isFalse);
});
}
class ShapeWithInterior extends ShapeBorder {
@override
bool get preferPaintInterior => true;
@override
ShapeBorder scale(double t) {
return this;
}
@override
EdgeInsetsGeometry get dimensions => EdgeInsets.zero;
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
return Path();
}
@override
Path getOuterPath(Rect rect, { TextDirection? textDirection }) {
return Path();
}
@override
void paintInterior(Canvas canvas, Rect rect, Paint paint, { TextDirection? textDirection }) { }
@override
void paint(Canvas canvas, Rect rect, { TextDirection? textDirection }) { }
}
class ShapeWithoutInterior extends ShapeBorder {
@override
bool get preferPaintInterior => false;
@override
ShapeBorder scale(double t) {
return this;
}
@override
EdgeInsetsGeometry get dimensions => EdgeInsets.zero;
@override
Path getInnerPath(Rect rect, { TextDirection? textDirection }) {
return Path();
}
@override
Path getOuterPath(Rect rect, { TextDirection? textDirection }) {
return Path();
}
@override
void paintInterior(Canvas canvas, Rect rect, Paint paint, { TextDirection? textDirection }) { }
@override
void paint(Canvas canvas, Rect rect, { TextDirection? textDirection }) { }
}