| // Copyright 2015 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 'demo/widget_demo.dart'; |
| |
| class GalleryPage extends StatefulComponent { |
| GalleryPage({ this.demos, this.active, this.onThemeChanged }); |
| |
| final List<WidgetDemo> demos; |
| final WidgetDemo active; |
| final ValueChanged<ThemeData> onThemeChanged; |
| |
| _GalleryPageState createState() => new _GalleryPageState(); |
| } |
| |
| class _GalleryPageState extends State<GalleryPage> { |
| Widget _buildDrawer() { |
| List<Widget> items = <Widget>[ |
| new DrawerHeader(child: new Text('Material demos')), |
| ]; |
| |
| for (WidgetDemo demo in config.demos) { |
| items.add(new DrawerItem( |
| onPressed: () { |
| Navigator.pushNamed(context, demo.routeName); |
| }, |
| child: new Text(demo.title) |
| )); |
| } |
| |
| return new Drawer(child: new Block(items)); |
| } |
| |
| Widget _buildBody() { |
| if (config.active != null) |
| return config.active.builder(context); |
| return new Material( |
| child: new Center( |
| child: new Text('Select a demo from the drawer') |
| ) |
| ); |
| } |
| |
| Widget _buildTabBar() { |
| final WidgetBuilder builder = config.active?.tabBarBuilder; |
| return builder != null ? builder(context) : null; |
| } |
| |
| Widget build(BuildContext context) { |
| return new Scaffold( |
| toolBar: new ToolBar( |
| center: new Text(config.active?.title ?? 'Material gallery'), |
| tabBar: _buildTabBar() |
| ), |
| drawer: _buildDrawer(), |
| body: _buildBody() |
| ); |
| } |
| } |