diff --git a/packages/flutter/lib/src/material/text_selection.dart b/packages/flutter/lib/src/material/text_selection.dart index 917df18ff0..f1893e1890 100644 --- a/packages/flutter/lib/src/material/text_selection.dart +++ b/packages/flutter/lib/src/material/text_selection.dart @@ -120,8 +120,10 @@ class _TextSelectionHandlePainter extends CustomPainter { void paint(Canvas canvas, Size size) { final Paint paint = Paint()..color = color; final double radius = size.width/2.0; - canvas.drawCircle(Offset(radius, radius), radius, paint); - canvas.drawRect(Rect.fromLTWH(0.0, 0.0, radius, radius), paint); + final Rect circle = Rect.fromCircle(center: Offset(radius, radius), radius: radius); + final Rect point = Rect.fromLTWH(0.0, 0.0, radius, radius); + final Path path = Path()..addOval(circle)..addRect(point); + canvas.drawPath(path, paint); } @override diff --git a/packages/flutter/test/material/text_selection_test.dart b/packages/flutter/test/material/text_selection_test.dart index 377ac4691d..4799badac6 100644 --- a/packages/flutter/test/material/text_selection_test.dart +++ b/packages/flutter/test/material/text_selection_test.dart @@ -62,4 +62,39 @@ void main() { expect(materialTextSelectionControls.canSelectAll(key.currentState), false); }); }); + + group('material handles', () { + testWidgets('draws transparent handle correctly', (WidgetTester tester) async { + await tester.pumpWidget(RepaintBoundary( + child: Theme( + data: ThemeData( + textSelectionHandleColor: const Color(0x550000AA), + ), + isMaterialAppTheme: true, + child: Builder( + builder: (BuildContext context) { + return Container( + color: Colors.white, + height: 800, + width: 800, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 250), + child: FittedBox( + child: materialTextSelectionControls.buildHandle( + context, TextSelectionHandleType.right, 10.0, + ), + ), + ), + ); + }, + ), + ), + )); + + await expectLater( + find.byType(RepaintBoundary), + matchesGoldenFile('transparent_handle.png'), + ); + }); + }); }