@@ -59,46 +59,50 @@ void main() {
59
59
return stickyHeaderListView.controller;
60
60
}
61
61
62
- ScrollToBottomButton ? findScrollToBottomButton (WidgetTester tester) {
63
- return tester.widget <ScrollToBottomButton >(find.byType (ScrollToBottomButton ));
62
+ bool isButtonVisible (WidgetTester tester) {
63
+ return tester.any (find.descendant (
64
+ of: find.byType (ScrollToBottomButton ),
65
+ matching: find.byTooltip ("Scroll to bottom" )));
64
66
}
65
67
66
68
testWidgets ('scrolling changes visibility' , (WidgetTester tester) async {
67
69
final stream = eg.stream ();
68
70
await setupMessageListPage (tester, narrow: StreamNarrow (stream.streamId));
69
71
70
72
final scrollController = findMessageListScrollController (tester)! ;
71
- final scrollToBottomButton = findScrollToBottomButton (tester)! ;
72
73
73
74
// Initial state should be not visible, as the message list renders with latest message in view
74
- check (scrollToBottomButton.visibleValue.value ).equals (false );
75
+ check (isButtonVisible (tester) ).equals (false );
75
76
76
77
scrollController.jumpTo (600 );
77
78
await tester.pump ();
78
- check (scrollToBottomButton.visibleValue.value ).equals (true );
79
+ check (isButtonVisible (tester) ).equals (true );
79
80
80
81
scrollController.jumpTo (0 );
81
82
await tester.pump ();
82
- check (scrollToBottomButton.visibleValue.value ).equals (false );
83
+ check (isButtonVisible (tester) ).equals (false );
83
84
});
84
85
85
86
testWidgets ('dimension updates changes visibility' , (WidgetTester tester) async {
86
87
final stream = eg.stream ();
87
88
await setupMessageListPage (tester, narrow: StreamNarrow (stream.streamId));
88
89
89
90
final scrollController = findMessageListScrollController (tester)! ;
90
- final scrollToBottomButton = findScrollToBottomButton (tester)! ;
91
91
92
92
// Initial state should be not visible, as the message list renders with latest message in view
93
- check (scrollToBottomButton.visibleValue.value ).equals (false );
93
+ check (isButtonVisible (tester) ).equals (false );
94
94
95
95
scrollController.jumpTo (600 );
96
96
await tester.pump ();
97
- check (scrollToBottomButton.visibleValue.value ).equals (true );
97
+ check (isButtonVisible (tester) ).equals (true );
98
98
99
99
tester.view.physicalSize = const Size (2000 , 40000 );
100
100
await tester.pump ();
101
- check (scrollToBottomButton.visibleValue.value).equals (false );
101
+ // Dimension changes use NotificationListener<ScrollMetricsNotification
102
+ // which has a one frame lag. If that ever gets resolved this extra pump
103
+ // would ideally be removed
104
+ await tester.pump ();
105
+ check (isButtonVisible (tester)).equals (false );
102
106
});
103
107
});
104
- }
108
+ }
0 commit comments