use SizedBox instead of Container for building collapsed selection (#37048)
diff --git a/packages/flutter/lib/src/cupertino/text_selection.dart b/packages/flutter/lib/src/cupertino/text_selection.dart
index 6f4f681..6e32318 100644
--- a/packages/flutter/lib/src/cupertino/text_selection.dart
+++ b/packages/flutter/lib/src/cupertino/text_selection.dart
@@ -402,7 +402,7 @@
);
// iOS doesn't draw anything for collapsed selections.
case TextSelectionHandleType.collapsed:
- return Container();
+ return const SizedBox();
}
assert(type != null);
return null;
diff --git a/packages/flutter/test/widgets/text_selection_test.dart b/packages/flutter/test/widgets/text_selection_test.dart
index 41ebfe6..ec0e992 100644
--- a/packages/flutter/test/widgets/text_selection_test.dart
+++ b/packages/flutter/test/widgets/text_selection_test.dart
@@ -7,6 +7,7 @@
import 'package:flutter/widgets.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/material.dart';
+import 'package:flutter/foundation.dart' show debugDefaultTargetPlatformOverride;
void main() {
int tapCount;
@@ -516,6 +517,44 @@
expect(state.showToolbarCalled, isFalse);
expect(renderEditable.selectWordsInRangeCalled, isFalse);
});
+
+ // Regression test for https://github.com/flutter/flutter/issues/37032.
+ testWidgets("selection handle's GestureDetector should not cover the entire screen",
+ (WidgetTester tester) async {
+ debugDefaultTargetPlatformOverride = TargetPlatform.iOS;
+ final TextEditingController controller = TextEditingController(text: 'a');
+
+ await tester.pumpWidget(
+ MaterialApp(
+ home: Scaffold(
+ body: TextField(
+ autofocus: true,
+ controller: controller,
+ ),
+ ),
+ ),
+ );
+
+ await tester.pumpAndSettle();
+
+ final Finder gestureDetector = find.descendant(
+ of: find.byType(Visibility),
+ matching: find.descendant(
+ of: find.byType(FadeTransition),
+ matching: find.byType(GestureDetector),
+ ),
+ );
+
+ expect(gestureDetector, findsOneWidget);
+ // The GestureDetector's size should not exceed that of the TextField.
+ final Rect hitRect = tester.getRect(gestureDetector);
+ final Rect textFieldRect = tester.getRect(find.byType(TextField));
+
+ expect(hitRect.size.width, lessThan(textFieldRect.size.width));
+ expect(hitRect.size.height, lessThan(textFieldRect.size.height));
+
+ debugDefaultTargetPlatformOverride = null;
+ });
}
class FakeTextSelectionGestureDetectorBuilderDelegate implements TextSelectionGestureDetectorBuilderDelegate {