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
// 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/widgets.dart';
import 'colors.dart';
import 'icon.dart';
import 'ink_well.dart';
import 'theme.dart';
class DrawerItem extends StatelessComponent {
const DrawerItem({
Key key,
this.icon,
this.child,
this.onPressed,
this.selected: false
}) : super(key: key);
final String icon;
final Widget child;
final VoidCallback onPressed;
final bool selected;
Color _getIconColor(ThemeData themeData) {
switch (themeData.brightness) {
case ThemeBrightness.light:
if (selected)
return themeData.primaryColor;
if (onPressed == null)
return Colors.black26;
return Colors.black45;
case ThemeBrightness.dark:
if (selected)
return themeData.accentColor;
if (onPressed == null)
return Colors.white30;
return null; // use default icon theme colour unmodified
}
}
TextStyle _getTextStyle(ThemeData themeData) {
TextStyle result = themeData.text.body2;
if (selected) {
switch (themeData.brightness) {
case ThemeBrightness.light:
return result.copyWith(color: themeData.primaryColor);
case ThemeBrightness.dark:
return result.copyWith(color: themeData.accentColor);
}
}
return result;
}
Widget build(BuildContext context) {
ThemeData themeData = Theme.of(context);
List<Widget> children = <Widget>[];
if (icon != null) {
children.add(
new Padding(
padding: const EdgeDims.symmetric(horizontal: 16.0),
child: new Icon(
icon: icon,
color: _getIconColor(themeData)
)
)
);
}
children.add(
new Flexible(
child: new Padding(
padding: const EdgeDims.symmetric(horizontal: 16.0),
child: new DefaultTextStyle(
style: _getTextStyle(themeData),
child: child
)
)
)
);
return new MergeSemantics(
child: new Container(
height: 48.0,
child: new InkWell(
onTap: onPressed,
child: new Row(children: children)
)
)
);
}
}