// 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 'tabs_fab_demo.dart'; import 'dialog_demo.dart'; import 'snack_bar_demo.dart'; const String _floatingText = "A floating action button is a circular material button that lifts " "and displays an ink reaction on press. It turns and fades in when " "it changes."; const String _raisedText = "A raised button is typically a rectangular material button that lifts " "and displays ink reactions on press. Raised buttons add dimension to " "mostly flat layouts. They emphasize functions on busy or wide spaces."; const String _flatText = "A flat button is made of ink that displays ink reactions on press " "but does not lift. Use flat buttons on toolbars, in dialogs and " "inline with padding"; const String _dropdownText = "A dropdown button selects between multiple selections. The button " "displays the current state and a down arrow."; class _ButtonDemo { _ButtonDemo({ this.title, this.text, this.builder }) { assert(title != null); assert(text != null); assert(builder != null); } final String title; final String text; final WidgetBuilder builder; TabLabel get tabLabel => new TabLabel(text: title.toUpperCase()); // The TabBarSelection created below saves and restores _ButtonDemo objects // to recover this demo's selected tab. To enable it to compare restored // _ButtonDemo objects with new ones, define hashCode and operator== . bool operator==(Object other) { if (other.runtimeType != runtimeType) return false; _ButtonDemo typedOther = other; return typedOther.title == title && typedOther.text == text; } int get hashCode => hashValues(title.hashCode, text.hashCode); } class ButtonsDemo extends StatefulComponent { _ButtonsDemoState createState() => new _ButtonsDemoState(); } class _ButtonsDemoState extends State<ButtonsDemo> { List<_ButtonDemo> demos; void initState() { super.initState(); demos = <_ButtonDemo>[ new _ButtonDemo(title: 'FLOATING', text: _floatingText, builder: buildFloatingButton), new _ButtonDemo(title: 'RAISED', text: _raisedText, builder: buildRaisedButton), new _ButtonDemo(title: 'FLAT', text: _flatText, builder: buildFlatButton), new _ButtonDemo(title: 'DROPDOWN', text: _dropdownText, builder: buildDropdownButton) ]; } Widget buildFloatingButton(BuildContext context) { return new SizedBox( height: 128.0, child: new Center( child: new FloatingActionButton( tooltip: 'Open FAB demos', child: new Icon(icon: Icons.add), onPressed: () { Navigator.push(context, new MaterialPageRoute( builder: (BuildContext context) => new TabsFabDemo() )); } ) ) ); } Widget buildRaisedButton(BuildContext context) { return new Container( margin: const EdgeDims.symmetric(vertical: 16.0), child: new Column( children: <Widget>[ new RaisedButton( child: new Text("Launch Demo"), onPressed: () { Navigator.push(context, new MaterialPageRoute( builder: (BuildContext context) => new SnackBarDemo() )); } ), new RaisedButton( child: new Text("Disabled") ) ] .map((Widget child) { return new Container( margin: const EdgeDims.symmetric(vertical: 8.0), child: child ); }) .toList() ) ); } Widget buildFlatButton(BuildContext context) { return new Container( margin: const EdgeDims.symmetric(vertical: 16.0), child: new ButtonTheme( color: ButtonColor.accent, child: new Column( children: <Widget>[ new FlatButton( child: new Text("Launch Demo"), onPressed: () { Navigator.push(context, new MaterialPageRoute( builder: (_) => new DialogDemo() )); } ), new FlatButton( child: new Text("Disabled") ) ] .map((Widget child) { return new Container( margin: const EdgeDims.symmetric(vertical: 8.0), child: child ); }) .toList() ) ) ); } String dropdownValue = "Free"; Widget buildDropdownButton(BuildContext context) { return new SizedBox( height: 256.0, child: new Center( child: new DropDownButton<String>( value: dropdownValue, onChanged: (String newValue) { setState(() { if (newValue != null) dropdownValue = newValue; }); }, items: <String>["One", "Two", "Free", "Four"] .map((String value) { return new DropDownMenuItem<String>( value: value, child: new Text(value)); }) .toList() ) ) ); } Widget buildTabView(_ButtonDemo demo) { return new Builder( builder: (BuildContext context) { final TextStyle textStyle = Theme.of(context).text.caption.copyWith(fontSize: 16.0); return new Column( alignItems: FlexAlignItems.stretch, children: <Widget>[ demo.builder(context), new Padding( padding: const EdgeDims.symmetric(horizontal: 32.0), child: new Text(demo.text, style: textStyle) ) ] ); } ); } Widget build(BuildContext context) { return new TabBarSelection<_ButtonDemo>( values: demos, child: new Scaffold( toolBar: new ToolBar( center: new Text("Buttons"), tabBar: new TabBar<_ButtonDemo>( isScrollable: true, labels: new Map.fromIterable(demos, value: (_ButtonDemo demo) => demo.tabLabel) ) ), body: new TabBarView( children: demos.map(buildTabView).toList() ) ) ); } }