// 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 'package:flutter/material.dart'; import 'package:flutter/widgets.dart'; import '../demo/all.dart'; import 'drawer.dart'; import 'header.dart'; import 'item.dart'; const double _kFlexibleSpaceMaxHeight = 256.0; class GalleryHome extends StatefulWidget { GalleryHome({ Key key, this.useLightTheme, this.onThemeChanged, this.timeDilation, this.onTimeDilationChanged, this.showPerformanceOverlay, this.onShowPerformanceOverlayChanged }) : super(key: key) { assert(onThemeChanged != null); assert(onTimeDilationChanged != null); assert(onShowPerformanceOverlayChanged != null); } final bool useLightTheme; final ValueChanged onThemeChanged; final double timeDilation; final ValueChanged onTimeDilationChanged; final bool showPerformanceOverlay; final ValueChanged onShowPerformanceOverlayChanged; @override GalleryHomeState createState() => new GalleryHomeState(); } class GalleryHomeState extends State { final Key _homeKey = new ValueKey("Gallery Home"); @override Widget build(BuildContext context) { final double statusBarHight = (MediaQuery.of(context)?.padding ?? EdgeInsets.zero).top; return new Scaffold( key: _homeKey, drawer: new GalleryDrawer( useLightTheme: config.useLightTheme, onThemeChanged: config.onThemeChanged, timeDilation: config.timeDilation, onTimeDilationChanged: config.onTimeDilationChanged, showPerformanceOverlay: config.showPerformanceOverlay, onShowPerformanceOverlayChanged: config.onShowPerformanceOverlayChanged ), appBar: new AppBar( expandedHeight: _kFlexibleSpaceMaxHeight, flexibleSpace: new FlexibleSpaceBar( title: new Text('Flutter gallery'), background: new GalleryHeader() ) ), appBarBehavior: AppBarBehavior.under, body: new TwoLevelList( padding: new EdgeInsets.only(top: _kFlexibleSpaceMaxHeight + statusBarHight), type: MaterialListType.oneLine, children: [ new TwoLevelSublist( leading: new Icon(icon: Icons.star), title: new Text('Demos'), children: [ new GalleryItem(title: 'Weather', routeName: WeatherDemo.routeName), new GalleryItem(title: 'Fitness', routeName: FitnessDemo.routeName), new GalleryItem(title: 'Fancy lines', routeName: DrawingDemo.routeName), new GalleryItem(title: 'Flexible space toolbar', routeName: FlexibleSpaceDemo.routeName), new GalleryItem(title: 'Floating action button', routeName: TabsFabDemo.routeName), ] ), new TwoLevelSublist( leading: new Icon(icon: Icons.extension), title: new Text('Components'), children: [ new GalleryItem(title: 'Buttons', routeName: ButtonsDemo.routeName), new GalleryItem(title: 'Cards', routeName: CardsDemo.routeName), new GalleryItem(title: 'Chips', routeName: ChipDemo.routeName), new GalleryItem(title: 'Date picker', routeName: DatePickerDemo.routeName), new GalleryItem(title: 'Data tables', routeName: DataTableDemo.routeName), new GalleryItem(title: 'Dialog', routeName: DialogDemo.routeName), new GalleryItem(title: 'Drop-down button', routeName: DropDownDemo.routeName), new GalleryItem(title: 'Expand/collapse list control', routeName: TwoLevelListDemo.routeName), new GalleryItem(title: 'Grid', routeName: GridListDemo.routeName), new GalleryItem(title: 'Icons', routeName: IconsDemo.routeName), new GalleryItem(title: 'Leave-behind list items', routeName: LeaveBehindDemo.routeName), new GalleryItem(title: 'List', routeName: ListDemo.routeName), new GalleryItem(title: 'Menus', routeName: MenuDemo.routeName), new GalleryItem(title: 'Modal bottom sheet', routeName: ModalBottomSheetDemo.routeName), new GalleryItem(title: 'Over-scroll', routeName: OverscrollDemo.routeName), new GalleryItem(title: 'Page selector', routeName: PageSelectorDemo.routeName), new GalleryItem(title: 'Persistent bottom sheet', routeName: PersistentBottomSheetDemo.routeName), new GalleryItem(title: 'Progress indicators', routeName: ProgressIndicatorDemo.routeName), new GalleryItem(title: 'Scrollable tabs', routeName: ScrollableTabsDemo.routeName), new GalleryItem(title: 'Selection controls', routeName: SelectionControlsDemo.routeName), new GalleryItem(title: 'Sliders', routeName: SliderDemo.routeName), new GalleryItem(title: 'Snackbar', routeName: SnackBarDemo.routeName), new GalleryItem(title: 'Tabs', routeName: TabsDemo.routeName), new GalleryItem(title: 'Text fields', routeName: TextFieldDemo.routeName), new GalleryItem(title: 'Time picker', routeName: TimePickerDemo.routeName), new GalleryItem(title: 'Tooltips', routeName: TooltipDemo.routeName), ] ), new TwoLevelSublist( leading: new Icon(icon: Icons.color_lens), title: new Text('Style'), children: [ new GalleryItem(title: 'Colors', routeName: ColorsDemo.routeName), new GalleryItem(title: 'Typography', routeName: TypographyDemo.routeName), ] ) ] ) ); } }