@@ -930,6 +930,72 @@ void main() {
930
930
await gesture.up ();
931
931
});
932
932
933
+ testWidgets ('Tooltip is dismissed after a long press and showDuration expired' , (WidgetTester tester) async {
934
+ const Duration showDuration = Duration (seconds: 3 );
935
+ await setWidgetForTooltipMode (tester, TooltipTriggerMode .longPress, showDuration: showDuration);
936
+
937
+ final Finder tooltip = find.byType (Tooltip );
938
+ final TestGesture gesture = await tester.startGesture (tester.getCenter (tooltip));
939
+
940
+ // Long press reveals tooltip
941
+ await tester.pump (kLongPressTimeout);
942
+ await tester.pump (const Duration (milliseconds: 10 ));
943
+ expect (find.text (tooltipText), findsOneWidget);
944
+ await gesture.up ();
945
+
946
+ // Tooltip is dismissed after showDuration expired
947
+ await tester.pump (showDuration);
948
+ await tester.pump (const Duration (milliseconds: 10 ));
949
+ expect (find.text (tooltipText), findsNothing);
950
+ });
951
+
952
+ testWidgets ('Tooltip is dismissed after a tap and showDuration expired' , (WidgetTester tester) async {
953
+ const Duration showDuration = Duration (seconds: 3 );
954
+ await setWidgetForTooltipMode (tester, TooltipTriggerMode .tap, showDuration: showDuration);
955
+
956
+ final Finder tooltip = find.byType (Tooltip );
957
+ expect (find.text (tooltipText), findsNothing);
958
+
959
+ await testGestureTap (tester, tooltip);
960
+ expect (find.text (tooltipText), findsOneWidget);
961
+
962
+ // Tooltip is dismissed after showDuration expired
963
+ await tester.pump (showDuration);
964
+ await tester.pump (const Duration (milliseconds: 10 ));
965
+ expect (find.text (tooltipText), findsNothing);
966
+ });
967
+
968
+ testWidgets ('Tooltip is dismissed after a tap and showDuration expired when competing with a GestureDetector' , (WidgetTester tester) async {
969
+ // Regression test for https://github.com/flutter/flutter/issues/98854
970
+ const Duration showDuration = Duration (seconds: 3 );
971
+ await tester.pumpWidget (
972
+ MaterialApp (
973
+ home: GestureDetector (
974
+ onVerticalDragStart: (_) { /* Do nothing */ },
975
+ child: const Tooltip (
976
+ message: tooltipText,
977
+ triggerMode: TooltipTriggerMode .tap,
978
+ showDuration: showDuration,
979
+ child: SizedBox (width: 100.0 , height: 100.0 ),
980
+ ),
981
+ ),
982
+ ),
983
+ );
984
+ final Finder tooltip = find.byType (Tooltip );
985
+ expect (find.text (tooltipText), findsNothing);
986
+
987
+ await tester.tap (tooltip);
988
+ // Wait for GestureArena disambiguation, delay is kPressTimeout to disambiguate
989
+ // between onTap and onVerticalDragStart
990
+ await tester.pump (kPressTimeout);
991
+ expect (find.text (tooltipText), findsOneWidget);
992
+
993
+ // Tooltip is dismissed after showDuration expired
994
+ await tester.pump (showDuration);
995
+ await tester.pump (const Duration (milliseconds: 10 ));
996
+ expect (find.text (tooltipText), findsNothing);
997
+ });
998
+
933
999
testWidgets ('Dispatch the mouse events before tip overlay detached' , (WidgetTester tester) async {
934
1000
// Regression test for https://github.com/flutter/flutter/issues/96890
935
1001
const Duration waitDuration = Duration .zero;
@@ -1840,13 +1906,19 @@ void main() {
1840
1906
});
1841
1907
}
1842
1908
1843
- Future <void > setWidgetForTooltipMode (WidgetTester tester, TooltipTriggerMode triggerMode, {TooltipTriggeredCallback ? onTriggered}) async {
1909
+ Future <void > setWidgetForTooltipMode (
1910
+ WidgetTester tester,
1911
+ TooltipTriggerMode triggerMode, {
1912
+ Duration ? showDuration,
1913
+ TooltipTriggeredCallback ? onTriggered,
1914
+ }) async {
1844
1915
await tester.pumpWidget (
1845
1916
MaterialApp (
1846
1917
home: Tooltip (
1847
1918
message: tooltipText,
1848
1919
triggerMode: triggerMode,
1849
1920
onTriggered: onTriggered,
1921
+ showDuration: showDuration,
1850
1922
child: const SizedBox (width: 100.0 , height: 100.0 ),
1851
1923
),
1852
1924
),
0 commit comments