drawer.dart 3.09 KB
Newer Older
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 GalleryDrawer extends StatelessWidget {
8 9
  GalleryDrawer({
    Key key,
Eric Seidel's avatar
Eric Seidel committed
10
    this.useLightTheme,
11 12
    this.onThemeChanged,
    this.timeDilation,
Eric Seidel's avatar
Eric Seidel committed
13 14 15
    this.onTimeDilationChanged,
    this.showPerformanceOverlay,
    this.onShowPerformanceOverlayChanged
16 17 18
  }) : super(key: key) {
    assert(onThemeChanged != null);
    assert(onTimeDilationChanged != null);
19 20
  }

Eric Seidel's avatar
Eric Seidel committed
21
  final bool useLightTheme;
22 23 24 25
  final ValueChanged<bool> onThemeChanged;

  final double timeDilation;
  final ValueChanged<double> onTimeDilationChanged;
26

Eric Seidel's avatar
Eric Seidel committed
27 28 29
  final bool showPerformanceOverlay;
  final ValueChanged<bool> onShowPerformanceOverlayChanged;

30
  @override
31 32 33 34
  Widget build(BuildContext context) {
    return new Drawer(
      child: new Block(
        children: <Widget>[
35
          new DrawerHeader(child: new Text('Flutter gallery')),
36
          new DrawerItem(
37
            icon: Icons.brightness_5,
38
            onPressed: () { onThemeChanged(true); },
Eric Seidel's avatar
Eric Seidel committed
39
            selected: useLightTheme,
40 41 42 43 44
            child: new Row(
              children: <Widget>[
                new Flexible(child: new Text('Light')),
                new Radio<bool>(
                  value: true,
Eric Seidel's avatar
Eric Seidel committed
45
                  groupValue: useLightTheme,
46
                  onChanged: onThemeChanged
47 48 49 50 51
                )
              ]
            )
          ),
          new DrawerItem(
52
            icon: Icons.brightness_7,
53
            onPressed: () { onThemeChanged(false); },
Eric Seidel's avatar
Eric Seidel committed
54
            selected: useLightTheme,
55 56 57 58 59
            child: new Row(
              children: <Widget>[
                new Flexible(child: new Text('Dark')),
                new Radio<bool>(
                  value: false,
Eric Seidel's avatar
Eric Seidel committed
60
                  groupValue: useLightTheme,
61
                  onChanged: onThemeChanged
62 63 64 65
                )
              ]
            )
          ),
Hans Muller's avatar
Hans Muller committed
66
          new Divider(),
67
          new DrawerItem(
68
            icon: Icons.hourglass_empty,
69
            selected: timeDilation != 1.0,
70
            onPressed: () { onTimeDilationChanged(timeDilation != 1.0 ? 1.0 : 20.0); },
71 72 73 74 75
            child: new Row(
              children: <Widget>[
                new Flexible(child: new Text('Animate Slowly')),
                new Checkbox(
                  value: timeDilation != 1.0,
76
                  onChanged: (bool value) { onTimeDilationChanged(value ? 20.0 : 1.0); }
77 78 79
                )
              ]
            )
Eric Seidel's avatar
Eric Seidel committed
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
          ),
          new DrawerItem(
            icon: Icons.assessment,
            onPressed: () { onShowPerformanceOverlayChanged(!showPerformanceOverlay); },
            selected: showPerformanceOverlay,
            child: new Row(
              children: <Widget>[
                new Flexible(child: new Text('Performance Overlay')),
                new Checkbox(
                  value: showPerformanceOverlay,
                  onChanged: (bool value) { onShowPerformanceOverlayChanged(!showPerformanceOverlay); }
                )
              ]
            )
          ),
95 96 97 98 99
        ]
      )
    );
  }
}