@@ -146,13 +146,100 @@ void main() {
146146 await tester.pump (const Duration (seconds: 1 ));
147147
148148 expect (_getMaterial (tester).color, ThemeData ().colorScheme.surface);
149- expect (_getMaterial (tester).surfaceTintColor,
150- ThemeData ().colorScheme.surfaceTint);
149+ expect (_getMaterial (tester).surfaceTintColor, ThemeData ().colorScheme.surfaceTint);
151150 expect (_getMaterial (tester).elevation, 1 );
152151 expect (_getIndicatorDecoration (tester)? .color, const Color (0xff2196f3 ));
153152 expect (_getIndicatorDecoration (tester)? .shape, const StadiumBorder ());
154153 });
155154
155+ testWidgets ('Navigation drawer is scrollable' , (WidgetTester tester) async {
156+ final GlobalKey <ScaffoldState > scaffoldKey = GlobalKey <ScaffoldState >();
157+ widgetSetup (tester, 500 , windowHeight: 300 );
158+ await tester.pumpWidget (
159+ _buildWidget (
160+ scaffoldKey,
161+ NavigationDrawer (
162+ children: < Widget > [
163+ for (int i = 0 ; i < 100 ; i++ )
164+ NavigationDrawerDestination (
165+ icon: const Icon (Icons .ac_unit),
166+ label: Text ('Label$i ' ),
167+ ),
168+ ],
169+ onDestinationSelected: (int i) {},
170+ ),
171+ ),
172+ );
173+ scaffoldKey.currentState! .openDrawer ();
174+ await tester.pump (const Duration (seconds: 1 ));
175+
176+ expect (find.text ('Label0' ), findsOneWidget);
177+ expect (find.text ('Label1' ), findsOneWidget);
178+ expect (find.text ('Label2' ), findsOneWidget);
179+ expect (find.text ('Label3' ), findsOneWidget);
180+ expect (find.text ('Label4' ), findsOneWidget);
181+ expect (find.text ('Label5' ), findsOneWidget);
182+ expect (find.text ('Label6' ), findsNothing);
183+ expect (find.text ('Label7' ), findsNothing);
184+ expect (find.text ('Label8' ), findsNothing);
185+
186+ await tester.dragFrom (const Offset (0 , 200 ), const Offset (0.0 , - 200 ));
187+ await tester.pump ();
188+
189+ expect (find.text ('Label0' ), findsNothing);
190+ expect (find.text ('Label1' ), findsNothing);
191+ expect (find.text ('Label2' ), findsNothing);
192+ expect (find.text ('Label3' ), findsOneWidget);
193+ expect (find.text ('Label4' ), findsOneWidget);
194+ expect (find.text ('Label5' ), findsOneWidget);
195+ expect (find.text ('Label6' ), findsOneWidget);
196+ expect (find.text ('Label7' ), findsOneWidget);
197+ expect (find.text ('Label8' ), findsOneWidget);
198+ expect (find.text ('Label9' ), findsNothing);
199+ expect (find.text ('Label10' ), findsNothing);
200+ });
201+
202+ testWidgets ('Safe Area test' , (WidgetTester tester) async {
203+ final GlobalKey <ScaffoldState > scaffoldKey = GlobalKey <ScaffoldState >();
204+ const double windowHeight = 300 ;
205+ widgetSetup (tester, 500 , windowHeight: windowHeight);
206+ await tester.pumpWidget (
207+ MediaQuery (
208+ data: const MediaQueryData (padding: EdgeInsets .all (20.0 )),
209+ child: MaterialApp (
210+ useInheritedMediaQuery: true ,
211+ theme: ThemeData .light (),
212+ home: Scaffold (
213+ key: scaffoldKey,
214+ drawer: NavigationDrawer (
215+ children: < Widget > [
216+ for (int i = 0 ; i < 10 ; i++ )
217+ NavigationDrawerDestination (
218+ icon: const Icon (Icons .ac_unit),
219+ label: Text ('Label$i ' ),
220+ ),
221+ ],
222+ onDestinationSelected: (int i) {},
223+ ),
224+ body: Container (),
225+ ),
226+ ),
227+ ),
228+ );
229+ scaffoldKey.currentState! .openDrawer ();
230+ await tester.pump ();
231+ await tester.pump (const Duration (seconds: 1 ));
232+
233+ // Safe area padding on the top and sides.
234+ expect (
235+ tester.getTopLeft (find.widgetWithText (NavigationDrawerDestination ,'Label0' )),
236+ const Offset (20.0 , 20.0 ),
237+ );
238+
239+ // No Safe area padding at the bottom.
240+ expect (tester.getBottomRight (find.widgetWithText (NavigationDrawerDestination ,'Label4' )).dy, windowHeight);
241+ });
242+
156243 testWidgets ('Navigation drawer semantics' , (WidgetTester tester) async {
157244 final GlobalKey <ScaffoldState > scaffoldKey = GlobalKey <ScaffoldState >();
158245 final ThemeData theme= ThemeData .from (colorScheme: const ColorScheme .light ());
0 commit comments