blob: ada4c4c7670057d4d53a849e6caf9b7802d2d2e9 [file] [log] [blame]
// 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 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: 'Vignettes',
routeName: ShrineDemo.routeName,
buildRoute: (BuildContext context) => new ShrineDemo(),
),
new GalleryItem(
title: 'Contact profile',
subtitle: 'Address book entry with a flexible appbar',
category: 'Vignettes',
routeName: ContactsDemo.routeName,
buildRoute: (BuildContext context) => new ContactsDemo(),
),
new GalleryItem(
title: 'Animation',
subtitle: 'Section organizer',
category: 'Vignettes',
routeName: AnimationDemo.routeName,
buildRoute: (BuildContext context) => const AnimationDemo(),
),
new GalleryItem(
title: 'Video',
subtitle: 'Video playback',
category: 'Vignettes',
routeName: VideoDemo.routeName,
buildRoute: (BuildContext context) => const VideoDemo(),
),
// Material Components
new GalleryItem(
title: 'Backdrop',
subtitle: 'Select a front layer from back layer',
category: 'Material Components',
routeName: BackdropDemo.routeName,
buildRoute: (BuildContext context) => new BackdropDemo(),
),
new GalleryItem(
title: 'Bottom app bar',
subtitle: 'With repositionable floating action button',
category: 'Material Components',
routeName: BottomAppBarDemo.routeName,
buildRoute: (BuildContext context) => new BottomAppBarDemo(),
),
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: 'Data tables',
subtitle: 'Rows and columns',
category: 'Material Components',
routeName: DataTableDemo.routeName,
buildRoute: (BuildContext context) => new DataTableDemo(),
),
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: ExpansionPanelsDemo.routeName,
buildRoute: (BuildContext context) => new ExpansionPanelsDemo(),
),
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: 'Navigation',
subtitle: 'Cupertino styled navigation patterns',
category: 'Cupertino Components',
routeName: CupertinoNavigationDemo.routeName,
buildRoute: (BuildContext context) => new CupertinoNavigationDemo(),
),
new GalleryItem(
title: 'Pickers',
subtitle: 'Cupertino styled pickers',
category: 'Cupertino Components',
routeName: CupertinoPickerDemo.routeName,
buildRoute: (BuildContext context) => new CupertinoPickerDemo(),
),
new GalleryItem(
title: 'Pull to refresh',
subtitle: 'Cupertino styled refresh controls',
category: 'Cupertino Components',
routeName: CupertinoRefreshControlDemo.routeName,
buildRoute: (BuildContext context) => new CupertinoRefreshControlDemo(),
),
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(),
),
// Media
new GalleryItem(
title: 'Animated images',
subtitle: 'GIF and WebP animations',
category: 'Media',
routeName: ImagesDemo.routeName,
buildRoute: (BuildContext context) => new ImagesDemo(),
),
// 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: 'Vignettes',
routeName: PestoDemo.routeName,
buildRoute: (BuildContext context) => const PestoDemo(),
),
);
return true;
}());
return galleryItems;
}
final List<GalleryItem> kAllGalleryItems = _buildGalleryItems();