icons_demo.dart 5.22 KB
Newer Older
Hans Muller's avatar
Hans Muller committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
// 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';

class IconsDemo extends StatefulComponent {
  IconsDemoState createState() => new IconsDemoState();
}

class IconsDemoState extends State<IconsDemo> {
  static final List<Map<int, Color>> iconColorSwatches = <Map<int, Color>>[
    Colors.red,
    Colors.pink,
    Colors.purple,
    Colors.deepPurple,
    Colors.indigo,
    Colors.blue,
    Colors.lightBlue,
    Colors.cyan,
    Colors.teal,
    Colors.green,
    Colors.lightGreen,
    Colors.lime,
    Colors.yellow,
    Colors.amber,
    Colors.orange,
    Colors.deepOrange,
    Colors.brown,
    Colors.grey,
    Colors.blueGrey
  ];

  int iconColorIndex = 2;
  double iconOpacity = 1.0;

  Color get iconColor => iconColorSwatches[iconColorIndex][400];

  void handleIconButtonPress() {
    setState(() {
      iconColorIndex = (iconColorIndex + 1) % iconColorSwatches.length;
    });
  }

  Widget buildIconButton(IconSize size, String name, bool enabled) {
    return new IconButton(
      size: size,
      icon: name,
      color: iconColor,
      tooltip: "${enabled ? 'enabled' : 'disabled'} $name icon button",
      onPressed: enabled ? handleIconButtonPress : null
    );
  }

  Widget buildSizeLabel(int size, TextStyle style) {
    return new SizedBox(
      height: size.toDouble() + 16.0, // to match an IconButton's padded height
      child: new Center(
        child: new Text('$size', style: style)
      )
    );
  }

  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
    final TextStyle textStyle = theme.text.subhead.copyWith(color: theme.text.caption.color);

    return new Scaffold(
      toolBar: new ToolBar(
        center: new Text('Icons')
      ),
      body: new IconTheme(
        data: new IconThemeData(opacity: iconOpacity),
        child: new Padding(
          padding: const EdgeDims.all(24.0),
          child: new Column(
            children: <Widget>[
              new Row(
                justifyContent: FlexJustifyContent.spaceBetween,
                alignItems: FlexAlignItems.center,
                children: <Widget>[
                  new Flexible(
                    flex: 0,
                    child: new Column(
                      alignItems: FlexAlignItems.center,
                      children: <Widget>[
                        new Text('Size', style: textStyle),
                        buildSizeLabel(18, textStyle),
                        buildSizeLabel(24, textStyle),
                        buildSizeLabel(36, textStyle),
                        buildSizeLabel(48, textStyle)
                      ]
                    )
                  ),
                  new Flexible(
                    child: new Column(
                      alignItems: FlexAlignItems.center,
                      children: <Widget>[
                        new Text('Enabled', style: textStyle),
                        buildIconButton(IconSize.s18, 'action/face', true),
                        buildIconButton(IconSize.s24, 'action/alarm', true),
                        buildIconButton(IconSize.s36, 'action/home', true),
                        buildIconButton(IconSize.s48, 'action/android', true)
                      ]
                    )
                  ),
                  new Flexible(
                    child: new Column(
                      alignItems: FlexAlignItems.center,
                      children: <Widget>[
                        new Text('Disabled', style: textStyle),
                        buildIconButton(IconSize.s18, 'action/face', false),
                        buildIconButton(IconSize.s24, 'action/alarm', false),
                        buildIconButton(IconSize.s36, 'action/home', false),
                        buildIconButton(IconSize.s48, 'action/android', false)
                      ]
                    )
                  )
                ]
              ),
              new Flexible(
                child: new Center(
                  child: new IconTheme(
                    data: new IconThemeData(opacity: 1.0),
                    child: new Row(
                      justifyContent: FlexJustifyContent.center,
                      children: <Widget>[
                        new Icon(
                          icon: 'image/brightness_7',
                          color: iconColor.withAlpha(0x33) // 0.2 * 255 = 0x33
                        ),
                        new Slider(
                          value: iconOpacity,
                          min: 0.2,
                          max: 1.0,
                          activeColor: iconColor,
                          onChanged: (double newValue) {
                            setState(() {
                              iconOpacity = newValue;
                            });
                          }
                        ),
                        new Icon(
                          icon: 'image/brightness_7',
                          color: iconColor.withAlpha(0xFF)
                        ),
                      ]
                    )
                  )
                )
              )
            ]
          )
        )
      )
    );
  }
}