diff --git a/packages/flutter/lib/src/material/tooltip.dart b/packages/flutter/lib/src/material/tooltip.dart index fd0eda9251..94e558a4c1 100644 --- a/packages/flutter/lib/src/material/tooltip.dart +++ b/packages/flutter/lib/src/material/tooltip.dart @@ -850,30 +850,28 @@ class _TooltipOverlay extends StatelessWidget { @override Widget build(BuildContext context) { - Widget result = IgnorePointer( - child: FadeTransition( - opacity: animation, - child: ConstrainedBox( - constraints: BoxConstraints(minHeight: height), - child: DefaultTextStyle( - style: Theme.of(context).textTheme.bodyMedium!, - child: Container( - decoration: decoration, - padding: padding, - margin: margin, - child: Center( - widthFactor: 1.0, - heightFactor: 1.0, - child: Text.rich( - richMessage, - style: textStyle, - textAlign: textAlign, - ), + Widget result = FadeTransition( + opacity: animation, + child: ConstrainedBox( + constraints: BoxConstraints(minHeight: height), + child: DefaultTextStyle( + style: Theme.of(context).textTheme.bodyMedium!, + child: Container( + decoration: decoration, + padding: padding, + margin: margin, + child: Center( + widthFactor: 1.0, + heightFactor: 1.0, + child: Text.rich( + richMessage, + style: textStyle, + textAlign: textAlign, ), ), ), ), - ) + ), ); if (onEnter != null || onExit != null) { result = MouseRegion( diff --git a/packages/flutter/test/material/tooltip_test.dart b/packages/flutter/test/material/tooltip_test.dart index 1abcb4f50f..aacf1ccf02 100644 --- a/packages/flutter/test/material/tooltip_test.dart +++ b/packages/flutter/test/material/tooltip_test.dart @@ -1906,6 +1906,36 @@ void main() { expect(find.byType(SizedBox), findsOneWidget); } }); + + testWidgetsWithLeakTracking('Tooltip should not ignore users tap on richMessage', (WidgetTester tester) async { + bool isTapped = false; + + await tester.pumpWidget( + MaterialApp( + home: Tooltip( + richMessage: TextSpan( + text: tooltipText, + recognizer: TapGestureRecognizer()..onTap = () { + isTapped = true; + } + ), + showDuration: const Duration(seconds: 5), + triggerMode: TooltipTriggerMode.tap, + child: const Icon(Icons.refresh) + ), + ), + ); + + final Finder tooltip = find.byType(Tooltip); + expect(find.text(tooltipText), findsNothing); + + await _testGestureTap(tester, tooltip); + final Finder textSpan = find.text(tooltipText); + expect(textSpan, findsOneWidget); + + await _testGestureTap(tester, textSpan); + expect(isTapped, isTrue); + }); } Future setWidgetForTooltipMode(