selection_controls_demo.dart 5.01 KB
Newer Older
1 2 3 4 5 6
// 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';

7 8 9 10 11
import '../gallery/demo.dart';

const String _checkboxText =
  "Checkboxes allow the user to select multiple options from a set.";

12
const String _checkboxCode = 'selectioncontrols_checkbox';
13 14 15 16 17 18

const String _radioText =
  "Radio buttons allow the user to select one option from a set. Use radio "
  "buttons for exclusive selection if you think that the user needs to see "
  "all available options side-by-side.";

19
const String _radioCode = 'selectioncontrols_radio';
20 21 22 23 24 25

const String _switchText =
  "On/off switches toggle the state of a single settings option. The option "
  "that the switch controls, as well as the state it’s in, should be made "
  "clear from the corresponding inline label.";

26
const String _switchCode = 'selectioncontrols_switch';
27

28
class SelectionControlsDemo extends StatefulWidget {
29 30
  static const String routeName = '/selection-controls';

31
  @override
32
  _SelectionControlsDemoState createState() => new _SelectionControlsDemoState();
33 34
}

35
class _SelectionControlsDemoState extends State<SelectionControlsDemo> {
36 37 38 39 40 41 42
  @override
  Widget build(BuildContext context) {
    List<ComponentDemoTabData> demos = <ComponentDemoTabData>[
      new ComponentDemoTabData(
        tabName: "CHECKBOX",
        description: _checkboxText,
        widget: buildCheckbox(),
43
        exampleCodeTag: _checkboxCode
44 45 46 47 48
      ),
      new ComponentDemoTabData(
        tabName: "RADIO",
        description: _radioText,
        widget: buildRadio(),
49
        exampleCodeTag: _radioCode
50 51 52 53 54
      ),
      new ComponentDemoTabData(
        tabName: "SWITCH",
        description: _switchText,
        widget: buildSwitch(),
55
        exampleCodeTag: _switchCode
56 57
      )
    ];
58

59
    return new TabbedComponentDemoScaffold(
60
      title: 'Selection controls',
61 62
      demos: demos
    );
63 64
  }

65 66 67 68
  bool checkboxValueA = true;
  bool checkboxValueB = false;
  int radioValue = 0;
  bool switchValue = false;
69

70
  void handleRadioValueChanged(int value) {
71
    setState(() {
72
      radioValue = value;
73 74 75
    });
  }

76 77 78 79
  Widget buildCheckbox() {
    return new Align(
      alignment: new FractionalOffset(0.5, 0.4),
      child: new Column(
80
        mainAxisSize: MainAxisSize.min,
81 82
        children: <Widget>[
          new Row(
83
            mainAxisSize: MainAxisSize.min,
84
            children: <Widget>[
85 86 87 88 89 90 91 92 93 94 95
              new Checkbox(value: checkboxValueA, onChanged: (bool value) {
                setState(() {
                  checkboxValueA = value;
                });
              }),
              new Checkbox(value: checkboxValueB, onChanged: (bool value) {
                setState(() {
                  checkboxValueB = value;
                });
              })
            ]
96 97
          ),
          new Row(
98
            mainAxisSize: MainAxisSize.min,
99 100
            children: <Widget>[
              // Disabled checkboxes
101 102
              new Checkbox(value: true, onChanged: null),
              new Checkbox(value: false, onChanged: null)
103 104 105 106 107 108 109 110 111 112 113
            ]
          )
        ]
      )
    );
  }

  Widget buildRadio() {
    return new Align(
      alignment: new FractionalOffset(0.5, 0.4),
      child: new Column(
114
        mainAxisSize: MainAxisSize.min,
115
        children: <Widget>[
116
          new Row(
117
            mainAxisSize: MainAxisSize.min,
118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
            children: <Widget>[
              new Radio<int>(
                value: 0,
                groupValue: radioValue,
                onChanged: handleRadioValueChanged
              ),
              new Radio<int>(
                value: 1,
                groupValue: radioValue,
                onChanged: handleRadioValueChanged
              ),
              new Radio<int>(
                value: 2,
                groupValue: radioValue,
                onChanged: handleRadioValueChanged
              )
            ]
135
          ),
136
          // Disabled radio buttons
137
          new Row(
138
            mainAxisSize: MainAxisSize.min,
139
            children: <Widget>[
140 141
              new Radio<int>(
                value: 0,
142 143
                groupValue: 0,
                onChanged: null
144 145 146
              ),
              new Radio<int>(
                value: 1,
147 148
                groupValue: 0,
                onChanged: null
149 150 151
              ),
              new Radio<int>(
                value: 2,
152 153
                groupValue: 0,
                onChanged: null
154 155 156 157 158 159 160 161 162 163 164 165
              )
            ]
          )
        ]
      )
    );
  }

  Widget buildSwitch() {
    return new Align(
      alignment: new FractionalOffset(0.5, 0.4),
      child: new Row(
166
        mainAxisSize: MainAxisSize.min,
167
        children: <Widget>[
168 169 170 171
          new Switch(
            value: switchValue,
            onChanged: (bool value) {
              setState(() {
172
              switchValue = value;
173 174 175
              });
            }
          ),
176
          // Disabled switches
177 178
          new Switch(value: true, onChanged: null),
          new Switch(value: false, onChanged: null)
179
        ]
180 181 182 183
      )
    );
  }
}