@@ -1403,7 +1403,8 @@ void main() {
1403
1403
});
1404
1404
1405
1405
testWidgets ('Tooltip is dismissed after tap to dismiss immediately' , (WidgetTester tester) async {
1406
- await setWidgetForTooltipMode (tester, TooltipTriggerMode .tap);
1406
+ // This test relies on not ignoring pointer events.
1407
+ await setWidgetForTooltipMode (tester, TooltipTriggerMode .tap, ignorePointer: false );
1407
1408
1408
1409
final Finder tooltip = find.byType (Tooltip );
1409
1410
expect (find.text (tooltipText), findsNothing);
@@ -1421,7 +1422,13 @@ void main() {
1421
1422
testWidgets ('Tooltip is not dismissed after tap if enableTapToDismiss is false' , (
1422
1423
WidgetTester tester,
1423
1424
) async {
1424
- await setWidgetForTooltipMode (tester, TooltipTriggerMode .tap, enableTapToDismiss: false );
1425
+ // This test relies on not ignoring pointer events.
1426
+ await setWidgetForTooltipMode (
1427
+ tester,
1428
+ TooltipTriggerMode .tap,
1429
+ enableTapToDismiss: false ,
1430
+ ignorePointer: false ,
1431
+ );
1425
1432
1426
1433
final Finder tooltip = find.byType (Tooltip );
1427
1434
expect (find.text (tooltipText), findsNothing);
@@ -1727,6 +1734,8 @@ void main() {
1727
1734
const MaterialApp (
1728
1735
home: Center (
1729
1736
child: Tooltip (
1737
+ // This test relies on not ignoring pointer events.
1738
+ ignorePointer: false ,
1730
1739
message: tooltipText,
1731
1740
waitDuration: waitDuration,
1732
1741
child: Text ('I am tool tip' ),
@@ -3220,6 +3229,167 @@ void main() {
3220
3229
await tester.pump ();
3221
3230
expect (RendererBinding .instance.mouseTracker.debugDeviceActiveCursor (1 ), customCursor);
3222
3231
});
3232
+
3233
+ testWidgets ('Tooltip overlay ignores pointer by default when passing simple message' , (
3234
+ WidgetTester tester,
3235
+ ) async {
3236
+ const String tooltipMessage = 'Tooltip message' ;
3237
+
3238
+ await tester.pumpWidget (
3239
+ MaterialApp (
3240
+ home: Scaffold (
3241
+ body: Center (
3242
+ child: Tooltip (
3243
+ message: tooltipMessage,
3244
+ child: ElevatedButton (onPressed: () {}, child: const Text ('Hover me' )),
3245
+ ),
3246
+ ),
3247
+ ),
3248
+ ),
3249
+ );
3250
+
3251
+ final Finder buttonFinder = find.text ('Hover me' );
3252
+ expect (buttonFinder, findsOneWidget);
3253
+
3254
+ final TestGesture gesture = await tester.createGesture (kind: PointerDeviceKind .mouse);
3255
+ await gesture.addPointer ();
3256
+ await gesture.moveTo (tester.getCenter (buttonFinder));
3257
+ await tester.pumpAndSettle ();
3258
+
3259
+ final Finder tooltipFinder = find.text (tooltipMessage);
3260
+ expect (tooltipFinder, findsOneWidget);
3261
+
3262
+ final Finder ignorePointerFinder = find.byType (IgnorePointer );
3263
+
3264
+ final IgnorePointer ignorePointer = tester.widget <IgnorePointer >(ignorePointerFinder.last);
3265
+ expect (ignorePointer.ignoring, isTrue);
3266
+
3267
+ await gesture.removePointer ();
3268
+ });
3269
+
3270
+ testWidgets (
3271
+ "Tooltip overlay with simple message doesn't ignore pointer when passing ignorePointer: false" ,
3272
+ (WidgetTester tester) async {
3273
+ const String tooltipMessage = 'Tooltip message' ;
3274
+
3275
+ await tester.pumpWidget (
3276
+ MaterialApp (
3277
+ home: Scaffold (
3278
+ body: Center (
3279
+ child: Tooltip (
3280
+ ignorePointer: false ,
3281
+ message: tooltipMessage,
3282
+ child: ElevatedButton (onPressed: () {}, child: const Text ('Hover me' )),
3283
+ ),
3284
+ ),
3285
+ ),
3286
+ ),
3287
+ );
3288
+
3289
+ final Finder buttonFinder = find.text ('Hover me' );
3290
+ expect (buttonFinder, findsOneWidget);
3291
+
3292
+ final TestGesture gesture = await tester.createGesture (kind: PointerDeviceKind .mouse);
3293
+ await gesture.addPointer ();
3294
+ await gesture.moveTo (tester.getCenter (buttonFinder));
3295
+ await tester.pumpAndSettle ();
3296
+
3297
+ final Finder tooltipFinder = find.text (tooltipMessage);
3298
+ expect (tooltipFinder, findsOneWidget);
3299
+
3300
+ final Finder ignorePointerFinder = find.byType (IgnorePointer );
3301
+
3302
+ final IgnorePointer ignorePointer = tester.widget <IgnorePointer >(ignorePointerFinder.last);
3303
+ expect (ignorePointer.ignoring, isFalse);
3304
+
3305
+ await gesture.removePointer ();
3306
+ },
3307
+ );
3308
+
3309
+ testWidgets ("Tooltip overlay doesn't ignore pointer by default when passing rich message" , (
3310
+ WidgetTester tester,
3311
+ ) async {
3312
+ const InlineSpan richMessage = TextSpan (
3313
+ children: < InlineSpan > [
3314
+ TextSpan (text: 'Rich ' , style: TextStyle (fontWeight: FontWeight .bold)),
3315
+ TextSpan (text: 'Tooltip' ),
3316
+ ],
3317
+ );
3318
+
3319
+ await tester.pumpWidget (
3320
+ MaterialApp (
3321
+ home: Scaffold (
3322
+ body: Center (
3323
+ child: Tooltip (
3324
+ richMessage: richMessage,
3325
+ child: ElevatedButton (onPressed: () {}, child: const Text ('Hover me' )),
3326
+ ),
3327
+ ),
3328
+ ),
3329
+ ),
3330
+ );
3331
+
3332
+ final Finder buttonFinder = find.text ('Hover me' );
3333
+ expect (buttonFinder, findsOneWidget);
3334
+
3335
+ final TestGesture gesture = await tester.createGesture (kind: PointerDeviceKind .mouse);
3336
+ await gesture.addPointer ();
3337
+ await gesture.moveTo (tester.getCenter (buttonFinder));
3338
+ await tester.pumpAndSettle ();
3339
+
3340
+ final Finder tooltipFinder = find.textContaining ('Rich Tooltip' );
3341
+ expect (tooltipFinder, findsOneWidget);
3342
+
3343
+ final Finder ignorePointerFinder = find.byType (IgnorePointer );
3344
+
3345
+ final IgnorePointer ignorePointer = tester.widget <IgnorePointer >(ignorePointerFinder.last);
3346
+ expect (ignorePointer.ignoring, isFalse);
3347
+
3348
+ await gesture.removePointer ();
3349
+ });
3350
+
3351
+ testWidgets ('Tooltip overlay with richMessage ignores pointer when passing ignorePointer: true' , (
3352
+ WidgetTester tester,
3353
+ ) async {
3354
+ const InlineSpan richMessage = TextSpan (
3355
+ children: < InlineSpan > [
3356
+ TextSpan (text: 'Rich ' , style: TextStyle (fontWeight: FontWeight .bold)),
3357
+ TextSpan (text: 'Tooltip' ),
3358
+ ],
3359
+ );
3360
+
3361
+ await tester.pumpWidget (
3362
+ MaterialApp (
3363
+ home: Scaffold (
3364
+ body: Center (
3365
+ child: Tooltip (
3366
+ ignorePointer: true ,
3367
+ richMessage: richMessage,
3368
+ child: ElevatedButton (onPressed: () {}, child: const Text ('Hover me' )),
3369
+ ),
3370
+ ),
3371
+ ),
3372
+ ),
3373
+ );
3374
+
3375
+ final Finder buttonFinder = find.text ('Hover me' );
3376
+ expect (buttonFinder, findsOneWidget);
3377
+
3378
+ final TestGesture gesture = await tester.createGesture (kind: PointerDeviceKind .mouse);
3379
+ await gesture.addPointer ();
3380
+ await gesture.moveTo (tester.getCenter (buttonFinder));
3381
+ await tester.pumpAndSettle ();
3382
+
3383
+ final Finder tooltipFinder = find.textContaining ('Rich Tooltip' );
3384
+ expect (tooltipFinder, findsOneWidget);
3385
+
3386
+ final Finder ignorePointerFinder = find.byType (IgnorePointer );
3387
+
3388
+ final IgnorePointer ignorePointer = tester.widget <IgnorePointer >(ignorePointerFinder.last);
3389
+ expect (ignorePointer.ignoring, isTrue);
3390
+
3391
+ await gesture.removePointer ();
3392
+ });
3223
3393
}
3224
3394
3225
3395
Future <void > setWidgetForTooltipMode (
@@ -3228,6 +3398,7 @@ Future<void> setWidgetForTooltipMode(
3228
3398
Duration ? showDuration,
3229
3399
bool ? enableTapToDismiss,
3230
3400
TooltipTriggeredCallback ? onTriggered,
3401
+ bool ? ignorePointer,
3231
3402
}) async {
3232
3403
await tester.pumpWidget (
3233
3404
MaterialApp (
@@ -3237,6 +3408,7 @@ Future<void> setWidgetForTooltipMode(
3237
3408
onTriggered: onTriggered,
3238
3409
showDuration: showDuration,
3239
3410
enableTapToDismiss: enableTapToDismiss ?? true ,
3411
+ ignorePointer: ignorePointer,
3240
3412
child: const SizedBox (width: 100.0 , height: 100.0 ),
3241
3413
),
3242
3414
),
0 commit comments