icons_demo.dart 5.2 KB
Newer Older
Hans Muller's avatar
Hans Muller committed
1 2 3 4 5 6
// 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';

7
class IconsDemo extends StatefulWidget {
8
  @override
Hans Muller's avatar
Hans Muller committed
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
  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;
    });
  }

46
  Widget buildIconButton(double size, IconData icon, bool enabled) {
Hans Muller's avatar
Hans Muller committed
47 48
    return new IconButton(
      size: size,
49
      icon: icon,
Hans Muller's avatar
Hans Muller committed
50
      color: iconColor,
51
      tooltip: "${enabled ? 'enabled' : 'disabled'} icon button",
Hans Muller's avatar
Hans Muller committed
52 53 54 55 56 57 58 59 60 61 62 63 64
      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)
      )
    );
  }

65
  @override
Hans Muller's avatar
Hans Muller committed
66 67
  Widget build(BuildContext context) {
    final ThemeData theme = Theme.of(context);
68
    final TextStyle textStyle = theme.textTheme.subhead.copyWith(color: theme.textTheme.caption.color);
Hans Muller's avatar
Hans Muller committed
69 70

    return new Scaffold(
71 72
      appBar: new AppBar(
        title: new Text('Icons')
Hans Muller's avatar
Hans Muller committed
73 74 75 76
      ),
      body: new IconTheme(
        data: new IconThemeData(opacity: iconOpacity),
        child: new Padding(
77
          padding: const EdgeInsets.all(24.0),
Hans Muller's avatar
Hans Muller committed
78 79 80
          child: new Column(
            children: <Widget>[
              new Row(
81 82
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                crossAxisAlignment: CrossAxisAlignment.center,
Hans Muller's avatar
Hans Muller committed
83 84 85 86
                children: <Widget>[
                  new Flexible(
                    flex: 0,
                    child: new Column(
87
                      crossAxisAlignment: CrossAxisAlignment.center,
Hans Muller's avatar
Hans Muller committed
88 89 90 91 92 93 94 95 96 97 98
                      children: <Widget>[
                        new Text('Size', style: textStyle),
                        buildSizeLabel(18, textStyle),
                        buildSizeLabel(24, textStyle),
                        buildSizeLabel(36, textStyle),
                        buildSizeLabel(48, textStyle)
                      ]
                    )
                  ),
                  new Flexible(
                    child: new Column(
99
                      crossAxisAlignment: CrossAxisAlignment.center,
Hans Muller's avatar
Hans Muller committed
100 101
                      children: <Widget>[
                        new Text('Enabled', style: textStyle),
102 103 104 105
                        buildIconButton(18.0, Icons.face, true),
                        buildIconButton(24.0, Icons.alarm, true),
                        buildIconButton(36.0, Icons.home, true),
                        buildIconButton(48.0, Icons.android, true)
Hans Muller's avatar
Hans Muller committed
106 107 108 109 110
                      ]
                    )
                  ),
                  new Flexible(
                    child: new Column(
111
                      crossAxisAlignment: CrossAxisAlignment.center,
Hans Muller's avatar
Hans Muller committed
112 113
                      children: <Widget>[
                        new Text('Disabled', style: textStyle),
114 115 116 117
                        buildIconButton(18.0, Icons.face, false),
                        buildIconButton(24.0, Icons.alarm, false),
                        buildIconButton(36.0, Icons.home, false),
                        buildIconButton(48.0, Icons.android, false)
Hans Muller's avatar
Hans Muller committed
118 119 120 121 122 123 124 125 126 127
                      ]
                    )
                  )
                ]
              ),
              new Flexible(
                child: new Center(
                  child: new IconTheme(
                    data: new IconThemeData(opacity: 1.0),
                    child: new Row(
128
                      mainAxisAlignment: MainAxisAlignment.center,
Hans Muller's avatar
Hans Muller committed
129 130
                      children: <Widget>[
                        new Icon(
131
                          icon: Icons.brightness_7,
Hans Muller's avatar
Hans Muller committed
132 133 134 135 136 137 138 139 140 141 142 143 144 145
                          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(
146
                          icon: Icons.brightness_7,
Hans Muller's avatar
Hans Muller committed
147 148 149 150 151 152 153 154 155 156 157 158 159 160
                          color: iconColor.withAlpha(0xFF)
                        ),
                      ]
                    )
                  )
                )
              )
            ]
          )
        )
      )
    );
  }
}