Unverified Commit 4465f688 authored by creativecreatorormaybenot's avatar creativecreatorormaybenot Committed by GitHub

Make buildHandle onTap optional (#84806)

parent 6cb43572
...@@ -67,7 +67,7 @@ class _CupertinoDesktopTextSelectionControls extends TextSelectionControls { ...@@ -67,7 +67,7 @@ class _CupertinoDesktopTextSelectionControls extends TextSelectionControls {
/// Builds the text selection handles, but desktop has none. /// Builds the text selection handles, but desktop has none.
@override @override
Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, VoidCallback? onTap) { Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, [VoidCallback? onTap]) {
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
......
...@@ -247,7 +247,7 @@ class CupertinoTextSelectionControls extends TextSelectionControls { ...@@ -247,7 +247,7 @@ class CupertinoTextSelectionControls extends TextSelectionControls {
/// Builder for iOS text selection edges. /// Builder for iOS text selection edges.
@override @override
Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, VoidCallback? onTap) { Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, [VoidCallback? onTap]) {
// iOS selection handles do not respond to taps. // iOS selection handles do not respond to taps.
// We want a size that's a vertical line the height of the text plus a 18.0 // We want a size that's a vertical line the height of the text plus a 18.0
......
...@@ -53,7 +53,7 @@ class _DesktopTextSelectionControls extends TextSelectionControls { ...@@ -53,7 +53,7 @@ class _DesktopTextSelectionControls extends TextSelectionControls {
/// Builds the text selection handles, but desktop has none. /// Builds the text selection handles, but desktop has none.
@override @override
Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, VoidCallback? onTap) { Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, [VoidCallback? onTap]) {
return const SizedBox.shrink(); return const SizedBox.shrink();
} }
......
...@@ -54,7 +54,7 @@ class MaterialTextSelectionControls extends TextSelectionControls { ...@@ -54,7 +54,7 @@ class MaterialTextSelectionControls extends TextSelectionControls {
/// Builder for material-style text selection handles. /// Builder for material-style text selection handles.
@override @override
Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textHeight, VoidCallback? onTap) { Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textHeight, [VoidCallback? onTap]) {
final ThemeData theme = Theme.of(context); final ThemeData theme = Theme.of(context);
final Color handleColor = TextSelectionTheme.of(context).selectionHandleColor ?? theme.colorScheme.primary; final Color handleColor = TextSelectionTheme.of(context).selectionHandleColor ?? theme.colorScheme.primary;
final Widget handle = SizedBox( final Widget handle = SizedBox(
......
...@@ -119,7 +119,7 @@ abstract class TextSelectionControls { ...@@ -119,7 +119,7 @@ abstract class TextSelectionControls {
/// interaction is allowed. As a counterexample, the default selection handle /// interaction is allowed. As a counterexample, the default selection handle
/// on iOS [cupertinoTextSelectionControls] does not call [onTap] at all, /// on iOS [cupertinoTextSelectionControls] does not call [onTap] at all,
/// since its handles are not meant to be tapped. /// since its handles are not meant to be tapped.
Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, VoidCallback? onTap); Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, [VoidCallback? onTap]);
/// Get the anchor point of the handle relative to itself. The anchor point is /// Get the anchor point of the handle relative to itself. The anchor point is
/// the point that is aligned with a specific point in the text. A handle /// the point that is aligned with a specific point in the text. A handle
......
...@@ -35,7 +35,7 @@ class MockClipboard { ...@@ -35,7 +35,7 @@ class MockClipboard {
class MockTextSelectionControls extends TextSelectionControls { class MockTextSelectionControls extends TextSelectionControls {
@override @override
Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, VoidCallback? onTap) { Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, [VoidCallback? onTap]) {
throw UnimplementedError(); throw UnimplementedError();
} }
......
...@@ -581,6 +581,38 @@ void main() { ...@@ -581,6 +581,38 @@ void main() {
matchesGoldenFile('transparent_handle.png'), matchesGoldenFile('transparent_handle.png'),
); );
}); });
testWidgets('works with 3 positional parameters', (WidgetTester tester) async {
await tester.pumpWidget(Theme(
data: ThemeData(
textSelectionTheme: const TextSelectionThemeData(
selectionHandleColor: Color(0x550000AA),
),
),
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,
),
),
),
);
},
),
));
// No expect here as this should simply compile / not throw any
// exceptions while building. The test will fail if this either does
// not compile or if the tester catches an exception, which we do
// not take here.
});
}); });
testWidgets('Paste only appears when clipboard has contents', (WidgetTester tester) async { testWidgets('Paste only appears when clipboard has contents', (WidgetTester tester) async {
......
...@@ -7569,7 +7569,7 @@ class MockTextSelectionControls extends Fake implements TextSelectionControls { ...@@ -7569,7 +7569,7 @@ class MockTextSelectionControls extends Fake implements TextSelectionControls {
} }
@override @override
Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, VoidCallback? onTap) { Widget buildHandle(BuildContext context, TextSelectionHandleType type, double textLineHeight, [VoidCallback? onTap]) {
return Container(); return Container();
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment