// 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/material.dart'; import '../demo/all.dart'; typedef Widget GalleryDemoBuilder(); class GalleryItem extends StatelessWidget { GalleryItem({ this.title, this.subtitle, this.category: 'Components', this.routeName, 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 ListItem( 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); } } ); } } final List<GalleryItem> kAllGalleryItems = <GalleryItem>[ // Demos new GalleryItem( title: 'Pesto', subtitle: 'Simple recipe browser', category: 'Demos', routeName: PestoDemo.routeName, buildRoute: (BuildContext context) => new PestoDemo() ), new GalleryItem( title: 'Shrine', subtitle:'Basic shopping app', category: 'Demos', routeName: ShrineDemo.routeName, buildRoute: (BuildContext context) => new ShrineDemo() ), new GalleryItem( title: 'Contact profile', category: 'Demos', subtitle: 'Address book entry with a flexible appbar', routeName: ContactsDemo.routeName, buildRoute: (BuildContext context) => new ContactsDemo() ), // Components new GalleryItem( title: 'Bottom navigation', subtitle: 'Bottom navigation with cross-fading views', routeName: BottomNavigationDemo.routeName, buildRoute: (BuildContext context) => new BottomNavigationDemo() ), new GalleryItem( title: 'Buttons', subtitle: 'All kinds: flat, raised, dropdown, icon, etc', routeName: ButtonsDemo.routeName, buildRoute: (BuildContext context) => new ButtonsDemo() ), new GalleryItem( title: 'Cards', subtitle: 'Material with rounded corners and a drop shadow', routeName: CardsDemo.routeName, buildRoute: (BuildContext context) => new CardsDemo() ), new GalleryItem( title: 'Chips', subtitle: 'Label with an optional delete button and avatar', routeName: ChipDemo.routeName, buildRoute: (BuildContext context) => new ChipDemo() ), new GalleryItem( title: 'Date picker', subtitle: 'Date selection widget', routeName: DatePickerDemo.routeName, buildRoute: (BuildContext context) => new DatePickerDemo() ), new GalleryItem( title: 'Dialog', subtitle: 'All kinds: simple, alert, fullscreen, etc', routeName: DialogDemo.routeName, buildRoute: (BuildContext context) => new DialogDemo() ), new GalleryItem( title: 'Expand/collapse list control', subtitle: 'List with one level of sublists', routeName: TwoLevelListDemo.routeName, buildRoute: (BuildContext context) => new TwoLevelListDemo() ), new GalleryItem( title: 'Expansion panels', subtitle: 'List of expanding panels', routeName: ExpasionPanelsDemo.routeName, buildRoute: (BuildContext context) => new ExpasionPanelsDemo() ), new GalleryItem( title: 'Floating action button', subtitle: 'Action buttons with transitions', routeName: TabsFabDemo.routeName, buildRoute: (BuildContext context) => new TabsFabDemo() ), new GalleryItem( title: 'Grid', subtitle: 'Row and column layout', routeName: GridListDemo.routeName, buildRoute: (BuildContext context) => new GridListDemo() ), new GalleryItem( title: 'Icons', subtitle: 'Enabled and disabled icons with varying opacity', routeName: IconsDemo.routeName, buildRoute: (BuildContext context) => new IconsDemo() ), new GalleryItem( title: 'Leave-behind list items', subtitle: 'List items with hidden actions', routeName: LeaveBehindDemo.routeName, buildRoute: (BuildContext context) => new LeaveBehindDemo() ), new GalleryItem( title: 'List', subtitle: 'Layout variations for scrollable lists', routeName: ListDemo.routeName, buildRoute: (BuildContext context) => new ListDemo() ), new GalleryItem( title: 'Menus', subtitle: 'Menu buttons and simple menus', routeName: MenuDemo.routeName, buildRoute: (BuildContext context) => new MenuDemo() ), new GalleryItem( title: 'Modal bottom sheet', subtitle: 'Modal sheet that slides up from the bottom', routeName: ModalBottomSheetDemo.routeName, buildRoute: (BuildContext context) => new ModalBottomSheetDemo() ), new GalleryItem( title: 'Over-scroll', subtitle: 'Refresh and overscroll indicators', routeName: OverscrollDemo.routeName, buildRoute: (BuildContext context) => new OverscrollDemo() ), new GalleryItem( title: 'Page selector', subtitle: 'Pageable list with indicator', routeName: PageSelectorDemo.routeName, buildRoute: (BuildContext context) => new PageSelectorDemo() ), new GalleryItem( title: 'Persistent bottom sheet', subtitle: 'Sheet that slides up from the bottom', routeName: PersistentBottomSheetDemo.routeName, buildRoute: (BuildContext context) => new PersistentBottomSheetDemo() ), new GalleryItem( title: 'Progress indicators', subtitle: 'All kinds: linear, circular, indeterminate, etc', routeName: ProgressIndicatorDemo.routeName, buildRoute: (BuildContext context) => new ProgressIndicatorDemo() ), new GalleryItem( title: 'Scrollable tabs', subtitle: 'Tab bar that scrolls', routeName: ScrollableTabsDemo.routeName, buildRoute: (BuildContext context) => new ScrollableTabsDemo() ), new GalleryItem( title: 'Selection controls', subtitle: 'Checkboxes, radio buttons, and switches', routeName: SelectionControlsDemo.routeName, buildRoute: (BuildContext context) => new SelectionControlsDemo() ), new GalleryItem( title: 'Sliders', subtitle: 'Widgets that select a value by dragging the slider thumb', routeName: SliderDemo.routeName, buildRoute: (BuildContext context) => new SliderDemo() ), new GalleryItem( title: 'Snackbar', subtitle: 'Temporary message that appears at the bottom', routeName: SnackBarDemo.routeName, buildRoute: (BuildContext context) => new SnackBarDemo() ), new GalleryItem( title: 'Tabs', subtitle: 'Tabs with independently scrollable views', routeName: TabsDemo.routeName, buildRoute: (BuildContext context) => new TabsDemo() ), new GalleryItem( title: 'Text fields', subtitle: 'Single line of editable text and numbers', routeName: TextFieldDemo.routeName, buildRoute: (BuildContext context) => new TextFieldDemo() ), new GalleryItem( title: 'Time picker', subtitle: 'Hour and minute selection widget', routeName: TimePickerDemo.routeName, buildRoute: (BuildContext context) => new TimePickerDemo() ), new GalleryItem( title: 'Tooltips', subtitle: 'Short message displayed after a long-press', routeName: TooltipDemo.routeName, buildRoute: (BuildContext context) => new TooltipDemo() ), // 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() ) ];