@@ -281,6 +281,10 @@ void main() {
281
281
});
282
282
283
283
group ('Dialog (${materialType .name })' , () {
284
+ Material getMaterialFromDialog (WidgetTester tester) {
285
+ return tester.widget <Material >(find.descendant (of: find.byType (Dialog ), matching: find.byType (Material )).first);
286
+ }
287
+
284
288
testWidgets ('Widgets have correct label capitalization' , (WidgetTester tester) async {
285
289
await startPicker (tester, (TimeOfDay ? time) {}, materialType: materialType);
286
290
expect (find.text (selectTimeString), findsOneWidget);
@@ -313,6 +317,84 @@ void main() {
313
317
314
318
switch (materialType) {
315
319
case MaterialType .material2:
320
+ testWidgets ('Dialog size - dial mode' , (WidgetTester tester) async {
321
+ addTearDown (tester.view.reset);
322
+
323
+ const Size timePickerPortraitSize = Size (310 , 468 );
324
+ const Size timePickerLandscapeSize = Size (524 , 342 );
325
+ const Size timePickerLandscapeSizeM2 = Size (508 , 300 );
326
+ const EdgeInsets padding = EdgeInsets .fromLTRB (8 , 18 , 8 , 8 );
327
+ double width;
328
+ double height;
329
+
330
+ // portrait
331
+ tester.view.physicalSize = const Size (800 , 800.5 );
332
+ tester.view.devicePixelRatio = 1 ;
333
+ await mediaQueryBoilerplate (tester, materialType: materialType);
334
+
335
+ width = timePickerPortraitSize.width + padding.horizontal;
336
+ height = timePickerPortraitSize.height + padding.vertical;
337
+ expect (
338
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
339
+ Size (width, height),
340
+ );
341
+
342
+ await tester.tap (find.text (okString)); // dismiss the dialog
343
+ await tester.pumpAndSettle ();
344
+
345
+ // landscape
346
+ tester.view.physicalSize = const Size (800.5 , 800 );
347
+ tester.view.devicePixelRatio = 1 ;
348
+ await mediaQueryBoilerplate (
349
+ tester,
350
+ alwaysUse24HourFormat: true ,
351
+ materialType: materialType,
352
+ );
353
+
354
+ width = timePickerLandscapeSize.width + padding.horizontal;
355
+ height = timePickerLandscapeSizeM2.height + padding.vertical;
356
+ expect (
357
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
358
+ Size (width, height),
359
+ );
360
+ });
361
+
362
+ testWidgets ('Dialog size - input mode' , (WidgetTester tester) async {
363
+ const TimePickerEntryMode entryMode = TimePickerEntryMode .input;
364
+ const Size timePickerInputSize = Size (312 , 216 );
365
+ const Size dayPeriodPortraitSize = Size (52 , 80 );
366
+ const EdgeInsets padding = EdgeInsets .fromLTRB (8 , 18 , 8 , 8 );
367
+ final double height = timePickerInputSize.height + padding.vertical;
368
+ double width;
369
+
370
+ await mediaQueryBoilerplate (
371
+ tester,
372
+ entryMode: entryMode,
373
+ materialType: materialType,
374
+ );
375
+
376
+ width = timePickerInputSize.width + padding.horizontal;
377
+ expect (
378
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
379
+ Size (width, height),
380
+ );
381
+
382
+ await tester.tap (find.text (okString)); // dismiss the dialog
383
+ await tester.pumpAndSettle ();
384
+
385
+ await mediaQueryBoilerplate (
386
+ tester,
387
+ alwaysUse24HourFormat: true ,
388
+ entryMode: entryMode,
389
+ materialType: materialType,
390
+ );
391
+ width = timePickerInputSize.width - dayPeriodPortraitSize.width - 12 + padding.horizontal + 16 ;
392
+ expect (
393
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
394
+ Size (width, height),
395
+ );
396
+ });
397
+
316
398
testWidgets ('respects MediaQueryData.alwaysUse24HourFormat == true' , (WidgetTester tester) async {
317
399
await mediaQueryBoilerplate (tester, alwaysUse24HourFormat: true , materialType: materialType);
318
400
@@ -333,6 +415,86 @@ void main() {
333
415
});
334
416
break ;
335
417
case MaterialType .material3:
418
+ testWidgets ('Dialog size - dial mode' , (WidgetTester tester) async {
419
+ addTearDown (tester.view.reset);
420
+
421
+ const Size timePickerPortraitSize = Size (310 , 468 );
422
+ const Size timePickerLandscapeSize = Size (524 , 342 );
423
+ const EdgeInsets padding = EdgeInsets .all (24.0 );
424
+ double width;
425
+ double height;
426
+
427
+ // portrait
428
+ tester.view.physicalSize = const Size (800 , 800.5 );
429
+ tester.view.devicePixelRatio = 1 ;
430
+ await mediaQueryBoilerplate (tester, materialType: materialType);
431
+
432
+ width = timePickerPortraitSize.width + padding.horizontal;
433
+ height = timePickerPortraitSize.height + padding.vertical;
434
+ expect (
435
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
436
+ Size (width, height),
437
+ );
438
+
439
+ await tester.tap (find.text (okString)); // dismiss the dialog
440
+ await tester.pumpAndSettle ();
441
+
442
+ // landscape
443
+ tester.view.physicalSize = const Size (800.5 , 800 );
444
+ tester.view.devicePixelRatio = 1 ;
445
+ await mediaQueryBoilerplate (
446
+ tester,
447
+ alwaysUse24HourFormat: true ,
448
+ materialType: materialType,
449
+ );
450
+
451
+ width = timePickerLandscapeSize.width + padding.horizontal;
452
+ height = timePickerLandscapeSize.height + padding.vertical;
453
+ expect (
454
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
455
+ Size (width, height),
456
+ );
457
+ });
458
+
459
+ testWidgets ('Dialog size - input mode' , (WidgetTester tester) async {
460
+ final ThemeData theme = ThemeData (useMaterial3: true );
461
+ const TimePickerEntryMode entryMode = TimePickerEntryMode .input;
462
+ const double textScaleFactor = 1.0 ;
463
+ const Size timePickerMinInputSize = Size (312 , 216 );
464
+ const Size dayPeriodPortraitSize = Size (52 , 80 );
465
+ const EdgeInsets padding = EdgeInsets .all (24.0 );
466
+ final double height = timePickerMinInputSize.height * textScaleFactor + padding.vertical;
467
+ double width;
468
+
469
+ await mediaQueryBoilerplate (
470
+ tester,
471
+ entryMode: entryMode,
472
+ materialType: materialType,
473
+ );
474
+
475
+ width = timePickerMinInputSize.width - (theme.useMaterial3 ? 32 : 0 ) + padding.horizontal;
476
+ expect (
477
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
478
+ Size (width, height),
479
+ );
480
+
481
+ await tester.tap (find.text (okString)); // dismiss the dialog
482
+ await tester.pumpAndSettle ();
483
+
484
+ await mediaQueryBoilerplate (
485
+ tester,
486
+ alwaysUse24HourFormat: true ,
487
+ entryMode: entryMode,
488
+ materialType: materialType,
489
+ );
490
+
491
+ width = timePickerMinInputSize.width - dayPeriodPortraitSize.width - 12 + padding.horizontal;
492
+ expect (
493
+ tester.getSize (find.byWidget (getMaterialFromDialog (tester))),
494
+ Size (width, height),
495
+ );
496
+ });
497
+
336
498
testWidgets ('respects MediaQueryData.alwaysUse24HourFormat == true' , (WidgetTester tester) async {
337
499
await mediaQueryBoilerplate (tester, alwaysUse24HourFormat: true , materialType: materialType);
338
500
0 commit comments