From b1e1dd68aea2821c19c197bf455fbd4a08a6a4bf Mon Sep 17 00:00:00 2001 From: Payam Zahedi Date: Mon, 12 Jul 2021 22:01:02 +0430 Subject: [PATCH] borderRadius param updated in copyWith functions (#85822) --- .../painting/beveled_rectangle_border.dart | 2 +- .../painting/continuous_rectangle_border.dart | 2 +- .../painting/rounded_rectangle_border.dart | 4 +-- .../beveled_rectangle_border_test.dart | 32 +++++++++++++++++++ .../continuous_rectangle_border_test.dart | 32 +++++++++++++++++++ .../rounded_rectangle_border_test.dart | 7 ++++ 6 files changed, 75 insertions(+), 4 deletions(-) diff --git a/packages/flutter/lib/src/painting/beveled_rectangle_border.dart b/packages/flutter/lib/src/painting/beveled_rectangle_border.dart index edbfed1cc97..4707cbcc0d7 100644 --- a/packages/flutter/lib/src/painting/beveled_rectangle_border.dart +++ b/packages/flutter/lib/src/painting/beveled_rectangle_border.dart @@ -82,7 +82,7 @@ class BeveledRectangleBorder extends OutlinedBorder { /// Returns a copy of this RoundedRectangleBorder with the given fields /// replaced with the new values. @override - BeveledRectangleBorder copyWith({ BorderSide? side, BorderRadius? borderRadius }) { + BeveledRectangleBorder copyWith({ BorderSide? side, BorderRadiusGeometry? borderRadius }) { return BeveledRectangleBorder( side: side ?? this.side, borderRadius: borderRadius ?? this.borderRadius, diff --git a/packages/flutter/lib/src/painting/continuous_rectangle_border.dart b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart index 8661aafca0a..6410aeb95de 100644 --- a/packages/flutter/lib/src/painting/continuous_rectangle_border.dart +++ b/packages/flutter/lib/src/painting/continuous_rectangle_border.dart @@ -134,7 +134,7 @@ class ContinuousRectangleBorder extends OutlinedBorder { } @override - ContinuousRectangleBorder copyWith({ BorderSide? side, BorderRadius? borderRadius }) { + ContinuousRectangleBorder copyWith({ BorderSide? side, BorderRadiusGeometry? borderRadius }) { return ContinuousRectangleBorder( side: side ?? this.side, borderRadius: borderRadius ?? this.borderRadius, diff --git a/packages/flutter/lib/src/painting/rounded_rectangle_border.dart b/packages/flutter/lib/src/painting/rounded_rectangle_border.dart index 8f99267250d..b828bda8545 100644 --- a/packages/flutter/lib/src/painting/rounded_rectangle_border.dart +++ b/packages/flutter/lib/src/painting/rounded_rectangle_border.dart @@ -93,7 +93,7 @@ class RoundedRectangleBorder extends OutlinedBorder { /// Returns a copy of this RoundedRectangleBorder with the given fields /// replaced with the new values. @override - RoundedRectangleBorder copyWith({ BorderSide? side, BorderRadius? borderRadius }) { + RoundedRectangleBorder copyWith({ BorderSide? side, BorderRadiusGeometry? borderRadius }) { return RoundedRectangleBorder( side: side ?? this.side, borderRadius: borderRadius ?? this.borderRadius, @@ -272,7 +272,7 @@ class _RoundedRectangleToCircleBorder extends OutlinedBorder { } @override - _RoundedRectangleToCircleBorder copyWith({ BorderSide? side, BorderRadius? borderRadius, double? circleness }) { + _RoundedRectangleToCircleBorder copyWith({ BorderSide? side, BorderRadiusGeometry? borderRadius, double? circleness }) { return _RoundedRectangleToCircleBorder( side: side ?? this.side, borderRadius: borderRadius ?? this.borderRadius, diff --git a/packages/flutter/test/painting/beveled_rectangle_border_test.dart b/packages/flutter/test/painting/beveled_rectangle_border_test.dart index a8fdcb971d6..c5c02ae6aaf 100644 --- a/packages/flutter/test/painting/beveled_rectangle_border_test.dart +++ b/packages/flutter/test/painting/beveled_rectangle_border_test.dart @@ -19,10 +19,16 @@ void main() { expect(const BeveledRectangleBorder().hashCode, const BeveledRectangleBorder().copyWith().hashCode); const BorderSide side = BorderSide(width: 10.0, color: Color(0xff123456)); const BorderRadius radius = BorderRadius.all(Radius.circular(16.0)); + const BorderRadiusDirectional directionalRadius = BorderRadiusDirectional.all(Radius.circular(16.0)); expect( const BeveledRectangleBorder().copyWith(side: side, borderRadius: radius), const BeveledRectangleBorder(side: side, borderRadius: radius), ); + + expect( + const BeveledRectangleBorder().copyWith(side: side, borderRadius: directionalRadius), + const BeveledRectangleBorder(side: side, borderRadius: directionalRadius), + ); }); test('BeveledRectangleBorder scale and lerp', () { @@ -74,4 +80,30 @@ void main() { expect(border.getInnerPath(rect), looksLikeRect); }); + test('BeveledRectangleBorder non-zero BorderRadiusDirectional', () { + const Rect rect = Rect.fromLTRB(10.0, 20.0, 30.0, 40.0); + final Matcher looksLikeRectLtr = isPathThat( + includes: const [Offset(15.0, 25.0), Offset(20.0, 30.0)], + excludes: const [Offset(10.0, 20.0), Offset(10.0, 40.0)], + ); + const BeveledRectangleBorder border = BeveledRectangleBorder( + borderRadius: BorderRadiusDirectional.only( + topStart: Radius.circular(5.0), + bottomStart: Radius.circular(5.0), + ), + ); + + // Test ltr situation + expect(border.getOuterPath(rect,textDirection: TextDirection.ltr), looksLikeRectLtr); + expect(border.getInnerPath(rect,textDirection: TextDirection.ltr), looksLikeRectLtr); + + final Matcher looksLikeRectRtl = isPathThat( + includes: const [Offset(25.0, 35.0), Offset(25.0, 25.0)], + excludes: const [Offset(30.0, 20.0), Offset(30.0, 40.0)], + ); + + // Test Rtl situation + expect(border.getOuterPath(rect,textDirection: TextDirection.rtl), looksLikeRectRtl); + expect(border.getInnerPath(rect,textDirection: TextDirection.rtl), looksLikeRectRtl); + }); } diff --git a/packages/flutter/test/painting/continuous_rectangle_border_test.dart b/packages/flutter/test/painting/continuous_rectangle_border_test.dart index 37be39a7da0..7fda5b39360 100644 --- a/packages/flutter/test/painting/continuous_rectangle_border_test.dart +++ b/packages/flutter/test/painting/continuous_rectangle_border_test.dart @@ -19,10 +19,17 @@ void main() { expect(const ContinuousRectangleBorder().hashCode, const ContinuousRectangleBorder().copyWith().hashCode); const BorderSide side = BorderSide(width: 10.0, color: Color(0xff123456)); const BorderRadius radius = BorderRadius.all(Radius.circular(16.0)); + const BorderRadiusDirectional directionalRadius = BorderRadiusDirectional.all(Radius.circular(16.0)); + expect( const ContinuousRectangleBorder().copyWith(side: side, borderRadius: radius), const ContinuousRectangleBorder(side: side, borderRadius: radius), ); + + expect( + const ContinuousRectangleBorder().copyWith(side: side, borderRadius: directionalRadius), + const ContinuousRectangleBorder(side: side, borderRadius: directionalRadius), + ); }); test('ContinuousRectangleBorder scale and lerp', () { @@ -73,6 +80,31 @@ void main() { expect(border.getInnerPath(rect), looksLikeRect); }); + test('ContinuousRectangleBorder non-zero BorderRadiusDirectional', () { + const Rect rect = Rect.fromLTRB(10.0, 20.0, 30.0, 40.0); + final Matcher looksLikeRectLtr = isPathThat( + includes: const [Offset(15.0, 25.0), Offset(20.0, 30.0)], + excludes: const [Offset(10.0, 20.0), Offset(10.0, 40.0)], + ); + const ContinuousRectangleBorder border = ContinuousRectangleBorder( + borderRadius: BorderRadiusDirectional.only( + topStart: Radius.circular(5.0), + bottomStart: Radius.circular(5.0), + ), + ); + + expect(border.getOuterPath(rect,textDirection: TextDirection.ltr), looksLikeRectLtr); + expect(border.getInnerPath(rect,textDirection: TextDirection.ltr), looksLikeRectLtr); + + final Matcher looksLikeRectRtl = isPathThat( + includes: const [Offset(25.0, 35.0), Offset(25.0, 25.0)], + excludes: const [Offset(30.0, 20.0), Offset(30.0, 40.0)], + ); + + expect(border.getOuterPath(rect,textDirection: TextDirection.rtl), looksLikeRectRtl); + expect(border.getInnerPath(rect,textDirection: TextDirection.rtl), looksLikeRectRtl); + }); + testWidgets('Golden test even radii', (WidgetTester tester) async { await tester.pumpWidget(RepaintBoundary( child: Material( diff --git a/packages/flutter/test/painting/rounded_rectangle_border_test.dart b/packages/flutter/test/painting/rounded_rectangle_border_test.dart index 37f95c40f9c..f0d62e9d6ac 100644 --- a/packages/flutter/test/painting/rounded_rectangle_border_test.dart +++ b/packages/flutter/test/painting/rounded_rectangle_border_test.dart @@ -20,10 +20,17 @@ void main() { expect(const RoundedRectangleBorder().hashCode, const RoundedRectangleBorder().copyWith().hashCode); const BorderSide side = BorderSide(width: 10.0, color: Color(0xff123456)); const BorderRadius radius = BorderRadius.all(Radius.circular(16.0)); + const BorderRadiusDirectional directionalRadius = BorderRadiusDirectional.all(Radius.circular(16.0)); + expect( const RoundedRectangleBorder().copyWith(side: side, borderRadius: radius), const RoundedRectangleBorder(side: side, borderRadius: radius), ); + + expect( + const RoundedRectangleBorder().copyWith(side: side, borderRadius: directionalRadius), + const RoundedRectangleBorder(side: side, borderRadius: directionalRadius), + ); }); test('RoundedRectangleBorder', () {