| // Copyright 2014 The Flutter Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| import 'package:flutter/material.dart'; | |
| import 'package:flutter_gallery/demo/all.dart'; | |
| import 'package:flutter_gallery/gallery/app.dart'; | |
| import 'package:flutter_gallery/gallery/themes.dart'; | |
| import 'package:flutter_test/flutter_test.dart'; | |
| class TestMaterialApp extends StatelessWidget { | |
| const TestMaterialApp({super.key, required this.home}); | |
| final Widget home; | |
| @override | |
| Widget build(BuildContext context) { | |
| return MaterialApp(theme: ThemeData(useMaterial3: false), home: home); | |
| } | |
| } | |
| 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(const TestMaterialApp(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(const TestMaterialApp(home: BottomAppBarDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('bottom_navigation_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: BottomNavigationDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('buttons_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ButtonsDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('cards_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: CardsDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('chip_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ChipDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }, skip: true); // https://github.com/flutter/flutter/issues/42455 | |
| testWidgets('data_table_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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(const TestMaterialApp(home: DateAndTimePickerDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('dialog_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: DialogDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('drawer_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: DrawerDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('elevation_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ElevationDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('expansion_panels_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: GridListDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('icons_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: LeaveBehindDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('list_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ListDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('menu_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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(const TestMaterialApp(home: ModalBottomSheetDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('overscroll_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: OverscrollDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('page_selector_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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(const TestMaterialApp(home: PersistentBottomSheetDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('progress_indicator_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: ReorderableListDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('scrollable_tabs_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ScrollableTabsDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('search_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: SearchDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('selection_controls_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: SelectionControlsDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('slider_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: SnackBarDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('tabs_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: TabsDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('tabs_fab_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: TextFormFieldDemo())); | |
| await expectLater(tester, meetsGuideline(androidTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('tooltip_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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(const TestMaterialApp(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(const TestMaterialApp(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(const TestMaterialApp(home: BottomAppBarDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('bottom_navigation_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: BottomNavigationDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('buttons_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ButtonsDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('cards_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: CardsDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('chip_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ChipDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets( | |
| 'data_table_demo', | |
| (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: DataTableDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }, | |
| // DataTables are not accessible, https://github.com/flutter/flutter/issues/10830 | |
| skip: true, | |
| ); | |
| testWidgets('date_and_time_picker_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: DateAndTimePickerDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('dialog_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: DialogDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('drawer_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: DrawerDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('elevation_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ElevationDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('expansion_panels_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: GridListDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('icons_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: LeaveBehindDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('list_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ListDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('menu_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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(const TestMaterialApp(home: ModalBottomSheetDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('overscroll_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: OverscrollDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('page_selector_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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(const TestMaterialApp(home: PersistentBottomSheetDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('progress_indicator_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: ReorderableListDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('scrollable_tabs_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: ScrollableTabsDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('search_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: SearchDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('selection_controls_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: SelectionControlsDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('slider_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: SnackBarDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('tabs_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(home: TabsDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('tabs_fab_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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 TestMaterialApp(home: TextFormFieldDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('tooltip_demo', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(const TestMaterialApp(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(const TestMaterialApp(home: ExpansionTileListDemo())); | |
| await expectLater(tester, meetsGuideline(labeledTapTargetGuideline)); | |
| handle.dispose(); | |
| }); | |
| }); | |
| group('All material demos meet text contrast guidelines', () { | |
| final themes = <ThemeData>[kLightGalleryTheme, kDarkGalleryTheme]; | |
| const themeNames = <String>['kLightGalleryTheme', 'kDarkGalleryTheme']; | |
| for (var themeIndex = 0; themeIndex < themes.length; themeIndex += 1) { | |
| final ThemeData theme = themes[themeIndex]; | |
| final String themeName = themeNames[themeIndex]; | |
| testWidgets('backdrop_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const BackdropDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('bottom_app_bar_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const BottomAppBarDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('bottom_navigation_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const BottomNavigationDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('buttons_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ButtonsDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('cards_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const CardsDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('chip_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ChipDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('data_table_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const DataTableDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('date_and_time_picker_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const DateAndTimePickerDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('dialog_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const DialogDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('drawer_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const DrawerDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('elevation_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ElevationDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('expansion_panels_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ExpansionPanelsDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('grid_list_demo $themeName', (WidgetTester tester) async { | |
| 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 { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const IconsDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('leave_behind_demo $themeName', (WidgetTester tester) async { | |
| 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 { | |
| 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 { | |
| 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 { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ModalBottomSheetDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('overscroll_demo', (WidgetTester tester) async { | |
| 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 { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const PageSelectorDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('persistent_bottom_sheet_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const PersistentBottomSheetDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('progress_indicator_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ProgressIndicatorDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('reorderable_list_demo $themeName', (WidgetTester tester) async { | |
| 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 { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ScrollableTabsDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('search_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const SearchDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('selection_controls_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const SelectionControlsDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('slider_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const SliderDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('snack_bar_demo $themeName', (WidgetTester tester) async { | |
| 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 { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const TabsDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('tabs_fab_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const TabsFabDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('text_form_field_demo $themeName', (WidgetTester tester) async { | |
| 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 { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const TooltipDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| testWidgets('expansion_tile_list_demo $themeName', (WidgetTester tester) async { | |
| final SemanticsHandle handle = tester.ensureSemantics(); | |
| await tester.pumpWidget(MaterialApp(theme: theme, home: const ExpansionTileListDemo())); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| handle.dispose(); | |
| }); | |
| } | |
| }); | |
| group('Gallery home page meets text contrast guidelines', () { | |
| testWidgets('options menu', (WidgetTester tester) async { | |
| await tester.pumpWidget(const GalleryApp(testMode: true)); | |
| await tester.tap(find.byTooltip('Toggle options page')); | |
| await tester.pumpAndSettle(); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| }); | |
| testWidgets('options menu - dark theme', (WidgetTester tester) async { | |
| await tester.pumpWidget(const GalleryApp(testMode: true)); | |
| await tester.tap(find.byTooltip('Toggle options page')); | |
| await tester.pumpAndSettle(); | |
| // Toggle dark mode. | |
| final Finder themeToggleContainer = find.ancestor( | |
| of: find.text('Theme'), | |
| matching: find.byType(Container), | |
| ); | |
| final Finder themeMenuButton = find.descendant( | |
| of: themeToggleContainer, | |
| matching: find.byIcon(Icons.arrow_drop_down), | |
| ); | |
| await tester.tap(themeMenuButton); | |
| await tester.pumpAndSettle(); | |
| await tester.tap(find.text('Dark')); | |
| await tester.pumpAndSettle(); | |
| await expectLater(tester, meetsGuideline(textContrastGuideline)); | |
| }); | |
| }); | |
| } |