// 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 '../gallery/demo.dart'; const String _raisedText = "Raised buttons add dimension to mostly flat layouts. They emphasize " "functions on busy or wide spaces."; const String _raisedCode = 'buttons_raised'; const String _flatText = "A flat button displays an ink splash on press " "but does not lift. Use flat buttons on toolbars, in dialogs and " "inline with padding"; const String _flatCode = 'buttons_flat'; const String _dropdownText = "A dropdown button displays a menu that's used to select a value from a " "small set of values. The button displays the current value and a down " "arrow."; const String _dropdownCode = 'buttons_dropdown'; const String _iconText = "IconButtons are appropriate for toggle buttons that allow a single choice " "to be selected or deselected, such as adding or removing an item's star."; const String _iconCode = 'buttons_icon'; const String _actionText = "Floating action buttons are used for a promoted action. They are " "distinguished by a circled icon floating above the UI and can have motion " "behaviors that include morphing, launching, and a transferring anchor " "point."; const String _actionCode = 'buttons_action'; class ButtonsDemo extends StatefulWidget { static const String routeName = '/buttons'; @override _ButtonsDemoState createState() => new _ButtonsDemoState(); } class _ButtonsDemoState extends State<ButtonsDemo> { @override Widget build(BuildContext context) { List<ComponentDemoTabData> demos = <ComponentDemoTabData>[ new ComponentDemoTabData( tabName: 'RAISED', description: _raisedText, widget: buildRaisedButton(), exampleCodeTag: _raisedCode, ), new ComponentDemoTabData( tabName: 'FLAT', description: _flatText, widget: buildFlatButton(), exampleCodeTag: _flatCode, ), new ComponentDemoTabData( tabName: 'DROPDOWN', description: _dropdownText, widget: buildDropdownButton(), exampleCodeTag: _dropdownCode, ), new ComponentDemoTabData( tabName: 'ICON', description: _iconText, widget: buildIconButton(), exampleCodeTag: _iconCode, ), new ComponentDemoTabData( tabName: 'ACTION', description: _actionText, widget: buildActionButton(), exampleCodeTag: _actionCode, ), ]; return new TabbedComponentDemoScaffold( title: 'Buttons', demos: demos, ); } Widget buildRaisedButton() { return new Align( alignment: new FractionalOffset(0.5, 0.4), child: new ButtonBar( mainAxisSize: MainAxisSize.min, children: <Widget>[ new RaisedButton( child: new Text('RAISED BUTTON'), onPressed: () { // Perform some action }, ), new RaisedButton( child: new Text('DISABLED'), onPressed: null, ) ], ), ); } Widget buildFlatButton() { return new Align( alignment: new FractionalOffset(0.5, 0.4), child: new ButtonBar( mainAxisSize: MainAxisSize.min, children: <Widget>[ new FlatButton( child: new Text('FLAT BUTTON'), onPressed: () { // Perform some action }, ), new FlatButton( child: new Text('DISABLED'), onPressed: null, ) ], ), ); } // https://en.wikipedia.org/wiki/Free_Four String dropdown1Value = 'Free'; String dropdown2Value = 'Four'; Widget buildDropdownButton() { return new Padding( padding: const EdgeInsets.all(24.0), child: new Column( mainAxisAlignment: MainAxisAlignment.start, children: <Widget>[ new ListItem( title: new Text('Scrollable dropdown:'), trailing: new DropdownButton<String>( value: dropdown1Value, onChanged: (String newValue) { setState(() { if (newValue != null) dropdown1Value = newValue; }); }, items: <String>[ 'One', 'Two', 'Free', 'Four', 'Can', 'I', 'Have', 'A', 'Little', 'Bit', 'More', 'Five', 'Six', 'Seven', 'Eight', 'Nine', 'Ten' ] .map((String value) { return new DropdownMenuItem<String>( value: value, child: new Text(value), ); }) .toList(), ), ), new SizedBox( height: 24.0, ), new ListItem( title: new Text('Simple dropdown:'), trailing: new DropdownButton<String>( value: dropdown2Value, onChanged: (String newValue) { setState(() { if (newValue != null) dropdown2Value = newValue; }); }, items: <String>['One', 'Two', 'Free', 'Four'].map((String value) { return new DropdownMenuItem<String>( value: value, child: new Text(value), ); }).toList(), ), ) ], ), ); } bool iconButtonToggle = false; Widget buildIconButton() { return new Align( alignment: new FractionalOffset(0.5, 0.4), child: new Row( mainAxisSize: MainAxisSize.min, children: <Widget>[ new IconButton( icon: new Icon(Icons.thumb_up), onPressed: () { setState(() => iconButtonToggle = !iconButtonToggle); }, color: iconButtonToggle ? Theme.of(context).primaryColor : null, ), new IconButton( icon: new Icon(Icons.thumb_up), onPressed: null, ) ] .map((Widget button) => new SizedBox(width: 64.0, height: 64.0, child: button)) .toList(), ), ); } Widget buildActionButton() { return new Align( alignment: new FractionalOffset(0.5, 0.4), child: new FloatingActionButton( child: new Icon(Icons.add), onPressed: () { // Perform some action }, ), ); } }