@@ -146,13 +146,100 @@ void main() {
146
146
await tester.pump (const Duration (seconds: 1 ));
147
147
148
148
expect (_getMaterial (tester).color, ThemeData ().colorScheme.surface);
149
- expect (_getMaterial (tester).surfaceTintColor,
150
- ThemeData ().colorScheme.surfaceTint);
149
+ expect (_getMaterial (tester).surfaceTintColor, ThemeData ().colorScheme.surfaceTint);
151
150
expect (_getMaterial (tester).elevation, 1 );
152
151
expect (_getIndicatorDecoration (tester)? .color, const Color (0xff2196f3 ));
153
152
expect (_getIndicatorDecoration (tester)? .shape, const StadiumBorder ());
154
153
});
155
154
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
+
156
243
testWidgets ('Navigation drawer semantics' , (WidgetTester tester) async {
157
244
final GlobalKey <ScaffoldState > scaffoldKey = GlobalKey <ScaffoldState >();
158
245
final ThemeData theme= ThemeData .from (colorScheme: const ColorScheme .light ());
0 commit comments