// Copyright 2016 The Chromium 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 'dart:developer'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import '../demo/all.dart'; typedef Widget GalleryDemoBuilder(); class GalleryItem extends StatelessWidget { const GalleryItem({ @required this.title, this.subtitle, @required this.category, @required this.routeName, @required this.buildRoute, }) : assert(title != null), assert(category != null), assert(routeName != null), assert(buildRoute != null); final String title; final String subtitle; final String category; final String routeName; final WidgetBuilder buildRoute; @override Widget build(BuildContext context) { return new MergeSemantics( child: new ListTile( title: new Text(title), subtitle: new Text(subtitle), onTap: () { if (routeName != null) { Timeline.instantSync('Start Transition', arguments: <String, String>{ 'from': '/', 'to': routeName }); Navigator.pushNamed(context, routeName); } } ), ); } } List<GalleryItem> _buildGalleryItems() { // When editing this list, make sure you keep it in sync with // the list in ../../test_driver/transitions_perf_test.dart final List<GalleryItem> galleryItems = <GalleryItem>[ // Demos new GalleryItem( title: 'Shrine', subtitle:'Basic shopping app', category: 'Demos', routeName: ShrineDemo.routeName, buildRoute: (BuildContext context) => new ShrineDemo(), ), new GalleryItem( title: 'Contact profile', subtitle: 'Address book entry with a flexible appbar', category: 'Demos', routeName: ContactsDemo.routeName, buildRoute: (BuildContext context) => new ContactsDemo(), ), new GalleryItem( title: 'Animation', subtitle: 'Section organizer', category: 'Demos', routeName: AnimationDemo.routeName, buildRoute: (BuildContext context) => const AnimationDemo(), ), // Material Components new GalleryItem( title: 'Bottom navigation', subtitle: 'Bottom navigation with cross-fading views', category: 'Material Components', routeName: BottomNavigationDemo.routeName, buildRoute: (BuildContext context) => new BottomNavigationDemo(), ), new GalleryItem( title: 'Buttons', subtitle: 'All kinds: flat, raised, dropdown, icon, etc', category: 'Material Components', routeName: ButtonsDemo.routeName, buildRoute: (BuildContext context) => new ButtonsDemo(), ), new GalleryItem( title: 'Cards', subtitle: 'Material with rounded corners and a drop shadow', category: 'Material Components', routeName: CardsDemo.routeName, buildRoute: (BuildContext context) => new CardsDemo(), ), new GalleryItem( title: 'Chips', subtitle: 'Label with an optional delete button and avatar', category: 'Material Components', routeName: ChipDemo.routeName, buildRoute: (BuildContext context) => new ChipDemo(), ), new GalleryItem( title: 'Date and time pickers', subtitle: 'Date and time selection widgets', category: 'Material Components', routeName: DateAndTimePickerDemo.routeName, buildRoute: (BuildContext context) => new DateAndTimePickerDemo(), ), new GalleryItem( title: 'Dialog', subtitle: 'All kinds: simple, alert, fullscreen, etc', category: 'Material Components', routeName: DialogDemo.routeName, buildRoute: (BuildContext context) => new DialogDemo(), ), new GalleryItem( title: 'Drawer', subtitle: 'Navigation drawer with a standard header', category: 'Material Components', routeName: DrawerDemo.routeName, buildRoute: (BuildContext context) => new DrawerDemo(), ), new GalleryItem( title: 'Expand/collapse list control', subtitle: 'List with one level of sublists', category: 'Material Components', routeName: TwoLevelListDemo.routeName, buildRoute: (BuildContext context) => new TwoLevelListDemo(), ), new GalleryItem( title: 'Expansion panels', subtitle: 'List of expanding panels', category: 'Material Components', routeName: ExpasionPanelsDemo.routeName, buildRoute: (BuildContext context) => new ExpasionPanelsDemo(), ), new GalleryItem( title: 'Floating action button', subtitle: 'Action buttons with transitions', category: 'Material Components', routeName: TabsFabDemo.routeName, buildRoute: (BuildContext context) => new TabsFabDemo(), ), new GalleryItem( title: 'Grid', subtitle: 'Row and column layout', category: 'Material Components', routeName: GridListDemo.routeName, buildRoute: (BuildContext context) => const GridListDemo(), ), new GalleryItem( title: 'Icons', subtitle: 'Enabled and disabled icons with varying opacity', category: 'Material Components', routeName: IconsDemo.routeName, buildRoute: (BuildContext context) => new IconsDemo(), ), new GalleryItem( title: 'Leave-behind list items', subtitle: 'List items with hidden actions', category: 'Material Components', routeName: LeaveBehindDemo.routeName, buildRoute: (BuildContext context) => const LeaveBehindDemo(), ), new GalleryItem( title: 'List', subtitle: 'Layout variations for scrollable lists', category: 'Material Components', routeName: ListDemo.routeName, buildRoute: (BuildContext context) => const ListDemo(), ), new GalleryItem( title: 'Menus', subtitle: 'Menu buttons and simple menus', category: 'Material Components', routeName: MenuDemo.routeName, buildRoute: (BuildContext context) => const MenuDemo(), ), new GalleryItem( title: 'Modal bottom sheet', subtitle: 'Modal sheet that slides up from the bottom', category: 'Material Components', routeName: ModalBottomSheetDemo.routeName, buildRoute: (BuildContext context) => new ModalBottomSheetDemo(), ), new GalleryItem( title: 'Page selector', subtitle: 'PageView with indicator', category: 'Material Components', routeName: PageSelectorDemo.routeName, buildRoute: (BuildContext context) => new PageSelectorDemo(), ), new GalleryItem( title: 'Persistent bottom sheet', subtitle: 'Sheet that slides up from the bottom', category: 'Material Components', routeName: PersistentBottomSheetDemo.routeName, buildRoute: (BuildContext context) => new PersistentBottomSheetDemo(), ), new GalleryItem( title: 'Progress indicators', subtitle: 'All kinds: linear, circular, indeterminate, etc', category: 'Material Components', routeName: ProgressIndicatorDemo.routeName, buildRoute: (BuildContext context) => new ProgressIndicatorDemo(), ), new GalleryItem( title: 'Pull to refresh', subtitle: 'Refresh indicators', category: 'Material Components', routeName: OverscrollDemo.routeName, buildRoute: (BuildContext context) => const OverscrollDemo(), ), new GalleryItem( title: 'Scrollable tabs', subtitle: 'Tab bar that scrolls', category: 'Material Components', routeName: ScrollableTabsDemo.routeName, buildRoute: (BuildContext context) => new ScrollableTabsDemo(), ), new GalleryItem( title: 'Selection controls', subtitle: 'Checkboxes, radio buttons, and switches', category: 'Material Components', routeName: SelectionControlsDemo.routeName, buildRoute: (BuildContext context) => new SelectionControlsDemo(), ), new GalleryItem( title: 'Sliders', subtitle: 'Widgets that select a value by dragging the slider thumb', category: 'Material Components', routeName: SliderDemo.routeName, buildRoute: (BuildContext context) => new SliderDemo(), ), new GalleryItem( title: 'Snackbar', subtitle: 'Temporary message that appears at the bottom', category: 'Material Components', routeName: SnackBarDemo.routeName, buildRoute: (BuildContext context) => const SnackBarDemo(), ), new GalleryItem( title: 'Tabs', subtitle: 'Tabs with independently scrollable views', category: 'Material Components', routeName: TabsDemo.routeName, buildRoute: (BuildContext context) => new TabsDemo(), ), new GalleryItem( title: 'Text fields', subtitle: 'Single line of editable text and numbers', category: 'Material Components', routeName: TextFormFieldDemo.routeName, buildRoute: (BuildContext context) => const TextFormFieldDemo(), ), new GalleryItem( title: 'Tooltips', subtitle: 'Short message displayed after a long-press', category: 'Material Components', routeName: TooltipDemo.routeName, buildRoute: (BuildContext context) => new TooltipDemo(), ), // Cupertino Components new GalleryItem( title: 'Activity Indicator', subtitle: 'Cupertino styled activity indicator', category: 'Cupertino Components', routeName: CupertinoProgressIndicatorDemo.routeName, buildRoute: (BuildContext context) => new CupertinoProgressIndicatorDemo(), ), new GalleryItem( title: 'Buttons', subtitle: 'Cupertino styled buttons', category: 'Cupertino Components', routeName: CupertinoButtonsDemo.routeName, buildRoute: (BuildContext context) => new CupertinoButtonsDemo(), ), new GalleryItem( title: 'Dialogs', subtitle: 'Cupertino styled dialogs', category: 'Cupertino Components', routeName: CupertinoDialogDemo.routeName, buildRoute: (BuildContext context) => new CupertinoDialogDemo(), ), new GalleryItem( title: 'Sliders', subtitle: 'Cupertino styled sliders', category: 'Cupertino Components', routeName: CupertinoSliderDemo.routeName, buildRoute: (BuildContext context) => new CupertinoSliderDemo(), ), new GalleryItem( title: 'Switches', subtitle: 'Cupertino styled switches', category: 'Cupertino Components', routeName: CupertinoSwitchDemo.routeName, buildRoute: (BuildContext context) => new CupertinoSwitchDemo(), ), // Styles new GalleryItem( title: 'Colors', subtitle: 'All of the predefined colors', category: 'Style', routeName: ColorsDemo.routeName, buildRoute: (BuildContext context) => new ColorsDemo(), ), new GalleryItem( title: 'Typography', subtitle: 'All of the predefined text styles', category: 'Style', routeName: TypographyDemo.routeName, buildRoute: (BuildContext context) => new TypographyDemo(), ) ]; // Keep Pesto around for its regression test value. It is not included // in (release builds) the performance tests. assert(() { galleryItems.insert(0, new GalleryItem( title: 'Pesto', subtitle: 'Simple recipe browser', category: 'Demos', routeName: PestoDemo.routeName, buildRoute: (BuildContext context) => const PestoDemo(), ), ); return true; }()); return galleryItems; } final List<GalleryItem> kAllGalleryItems = _buildGalleryItems();