|  | import 'package:flutter/material.dart'; | 
|  | import 'package:flutter_test/flutter_test.dart'; | 
|  | import 'package:flutter_gallery/demo/all.dart'; | 
|  | import 'package:flutter_gallery/gallery/themes.dart'; | 
|  |  | 
|  | void main() { | 
|  | group('All material demos meet recommended tap target sizes', () { | 
|  | testWidgets('backdrop_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: BackdropDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('bottom_app_bar_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: BottomAppBarDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('bottom_navigation_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: BottomNavigationDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('buttons_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ButtonsDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('cards_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: CardsDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('chip_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ChipDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('data_table_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DataTableDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('date_and_time_picker_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DateAndTimePickerDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('dialog_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DialogDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('drawer_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DrawerDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('elevation_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ElevationDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('expansion_panels_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ExpansionPanelsDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('grid_list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: GridListDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('icons_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: IconsDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('leave_behind_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: LeaveBehindDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: ListDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('menu_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: MenuDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('modal_bottom_sheet_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ModalBottomSheetDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('overscroll_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: OverscrollDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('page_selector_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: PageSelectorDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('persistent_bottom_sheet_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: PersistentBottomSheetDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('progress_indicator_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ProgressIndicatorDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('reorderable_list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: ReorderableListDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('scrollable_tabs_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ScrollableTabsDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('search_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: SearchDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('selection_controls_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: SelectionControlsDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('slider_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: SliderDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('snack_bar_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: SnackBarDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tabs_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: TabsDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tabs_fab_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: TabsFabDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('text_form_field_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: TextFormFieldDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tooltip_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: TooltipDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('expansion_tile_list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ExpansionTileListDemo())); | 
|  | await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | group('All material demos have labeled tap targets', () { | 
|  | testWidgets('backdrop_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: BackdropDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('bottom_app_bar_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: BottomAppBarDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('bottom_navigation_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: BottomNavigationDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('buttons_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ButtonsDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('cards_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: CardsDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('chip_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ChipDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('data_table_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DataTableDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); | 
|  |  | 
|  | testWidgets('date_and_time_picker_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DateAndTimePickerDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('dialog_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DialogDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('drawer_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: DrawerDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('elevation_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ElevationDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); | 
|  |  | 
|  | testWidgets('expansion_panels_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ExpansionPanelsDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('grid_list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: GridListDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); | 
|  |  | 
|  | testWidgets('icons_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: IconsDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('leave_behind_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: LeaveBehindDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: ListDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('menu_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: MenuDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('modal_bottom_sheet_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ModalBottomSheetDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('overscroll_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: OverscrollDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('page_selector_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: PageSelectorDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('persistent_bottom_sheet_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: PersistentBottomSheetDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('progress_indicator_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ProgressIndicatorDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('reorderable_list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: ReorderableListDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('scrollable_tabs_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ScrollableTabsDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); | 
|  |  | 
|  | testWidgets('search_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: SearchDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('selection_controls_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: SelectionControlsDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); | 
|  |  | 
|  | testWidgets('slider_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: SliderDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('snack_bar_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: SnackBarDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tabs_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: TabsDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tabs_fab_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: TabsFabDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('text_form_field_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: TextFormFieldDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tooltip_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: TooltipDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('expansion_tile_list_demo', (WidgetTester tester) async { | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(home: ExpansionTileListDemo())); | 
|  | await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  | }); | 
|  |  | 
|  | group('All material demos meet text contrast guidelines', () { | 
|  | final List<ThemeData> themes = <ThemeData>[ | 
|  | kLightGalleryTheme.data, | 
|  | ThemeData.light(), | 
|  | // TODO(hansmuller): add kDarkGalleryTheme.data, ThemeData.dark(), see #22044 | 
|  | ]; | 
|  |  | 
|  | const List<String> themeNames = <String>[ | 
|  | 'kLightGalleryTheme', | 
|  | 'ThemeData.light()', | 
|  | // TODO(hansmuller): add 'kDarkGalleryTheme', 'ThemeData.dark()', see 22044 | 
|  | ]; | 
|  |  | 
|  | for (int themeIndex = 0; themeIndex < themes.length; themeIndex += 1) { | 
|  | final ThemeData theme = themes[themeIndex]; | 
|  | final String themeName = themeNames[themeIndex]; | 
|  |  | 
|  | testWidgets('backdrop_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: BackdropDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('bottom_app_bar_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: BottomAppBarDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: theme == ThemeData.light()); | 
|  |  | 
|  | testWidgets('bottom_navigation_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: BottomNavigationDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('buttons_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ButtonsDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('cards_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: CardsDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('chip_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ChipDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); // https://github.com/flutter/flutter/issues/21647 | 
|  |  | 
|  | testWidgets('data_table_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: DataTableDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); // https://github.com/flutter/flutter/issues/21647 | 
|  |  | 
|  | testWidgets('date_and_time_picker_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: DateAndTimePickerDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); // https://github.com/flutter/flutter/issues/21647 | 
|  |  | 
|  | testWidgets('dialog_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: DialogDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('drawer_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: DrawerDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('elevation_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ElevationDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('expansion_panels_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ExpansionPanelsDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('grid_list_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: const GridListDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('icons_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: IconsDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); // https://github.com/flutter/flutter/issues/21647 | 
|  |  | 
|  | testWidgets('leave_behind_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: const LeaveBehindDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('list_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: const ListDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('menu_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: const MenuDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('modal_bottom_sheet_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ModalBottomSheetDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('overscroll_demo', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(const MaterialApp(home: OverscrollDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('page_selector_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: PageSelectorDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('persistent_bottom_sheet_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: PersistentBottomSheetDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('progress_indicator_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ProgressIndicatorDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('reorderable_list_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: const ReorderableListDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('scrollable_tabs_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ScrollableTabsDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('search_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: SearchDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }, skip: true); // https://github.com/flutter/flutter/issues/21651 | 
|  |  | 
|  | testWidgets('selection_controls_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: SelectionControlsDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('slider_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: SliderDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('snack_bar_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: const SnackBarDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tabs_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: TabsDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tabs_fab_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: TabsFabDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('text_form_field_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: const TextFormFieldDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('tooltip_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: TooltipDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  |  | 
|  | testWidgets('expansion_tile_list_demo $themeName', (WidgetTester tester) async { | 
|  | tester.binding.addTime(const Duration(seconds: 3)); | 
|  | final SemanticsHandle handle = tester.ensureSemantics(); | 
|  | await tester.pumpWidget(MaterialApp(theme: theme, home: ExpansionTileListDemo())); | 
|  | await expectLater(tester, meetsGuideline(textContrastGuideline)); | 
|  | handle.dispose(); | 
|  | }); | 
|  | } | 
|  | }); | 
|  | } |