Commit 870894fc authored by Adam Barth's avatar Adam Barth

Switch Material Design icons to using the iconfont

Rather than managing all the Material Design icons manually, we now
manage them using an icon font. The icon font contains glyphs for each
icon in an efficient vector format.

This patch updates the FLX tooling to include the MaterialIcons font and
updates the Icon widget to use the font instead of asset images.

Fixes #2313
Fixes #2218
Fixes #2009
Fixes #994
parent 6e2d6549
https://storage.googleapis.com/flutter_infra/flutter/fonts/b1e27075635f686ce12784a90125de693b4c360c/fonts.zip
#!/bin/bash
# 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.
set -e
FLUTTER_ROOT=$(dirname $(dirname $(dirname "${BASH_SOURCE[0]}")))
MATERIAL_FONTS_STAMP_PATH="$FLUTTER_ROOT/bin/cache/material_fonts.stamp"
MATERIAL_FONTS_VERSION=`cat "$FLUTTER_ROOT/bin/cache/material_fonts.version"`
if [ ! -f "$MATERIAL_FONTS_STAMP_PATH" ] || [ "$MATERIAL_FONTS_VERSION" != `cat "$MATERIAL_FONTS_STAMP_PATH"` ]; then
echo "Downloading Material Design fonts..."
MATERIAL_FONTS_URL="$MATERIAL_FONTS_VERSION"
MATERIAL_FONTS_PATH="$FLUTTER_ROOT/bin/cache/artifacts/material_fonts"
MATERIAL_FONTS_ZIP="$FLUTTER_ROOT/bin/cache/material_fonts.zip"
mkdir -p -- "$MATERIAL_FONTS_PATH"
curl --progress-bar -continue-at=- --location --output "$MATERIAL_FONTS_ZIP" "$MATERIAL_FONTS_URL"
rm -rf -- "$MATERIAL_FONTS_PATH"
unzip -o -q "$MATERIAL_FONTS_ZIP" -d "$MATERIAL_FONTS_PATH"
rm -f -- "$MATERIAL_FONTS_ZIP"
echo "$MATERIAL_FONTS_VERSION" > "$MATERIAL_FONTS_STAMP_PATH"
fi
......@@ -18,6 +18,7 @@ REVISION=`(cd "$FLUTTER_ROOT"; git rev-parse HEAD)`
if [ ! -f "$SNAPSHOT_PATH" ] || [ ! -f "$STAMP_PATH" ] || [ `cat "$STAMP_PATH"` != "$REVISION" ] || [ "$FLUTTER_TOOLS_DIR/pubspec.yaml" -nt "$FLUTTER_TOOLS_DIR/pubspec.lock" ]; then
"$FLUTTER_ROOT/bin/cache/update_dart_sdk.sh"
"$FLUTTER_ROOT/bin/cache/update_engine.sh"
"$FLUTTER_ROOT/bin/cache/update_material_fonts.sh"
echo Building flutter tool...
FLUTTER_DIR="$FLUTTER_ROOT/packages/flutter"
......
......@@ -50,7 +50,7 @@ class AdaptedGridItem extends StatelessComponent {
child: new Text(name)
),
new IconButton(
icon: 'navigation/more_vert'
icon: Icons.more_vert
)
]
)
......
name: material_gallery
uses-material-design: true
assets:
- assets/flutter_logo.png
- assets/section_animation.png
......@@ -22,42 +23,3 @@ assets:
- packages/flutter_gallery_assets/top_10_australian_beaches.png
- packages/flutter_gallery_assets/jumpingjack.json
- packages/flutter_gallery_assets/jumpingjack.png
material-design-icons:
- name: action/accessibility
- name: action/account_circle
- name: action/alarm
- name: action/android
- name: action/delete
- name: action/done
- name: action/event
- name: action/face
- name: action/home
- name: action/hourglass_empty
- name: action/info
- name: action/language
- name: action/list
- name: av/play_arrow
- name: av/sort_by_alpha
- name: av/stop
- name: communication/call
- name: communication/email
- name: communication/location_on
- name: communication/message
- name: content/add
- name: content/add_circle
- name: content/clear
- name: content/create
- name: image/brightness_5
- name: image/brightness_7
- name: image/flash_on
- name: image/timer
- name: navigation/arrow_back
- name: navigation/arrow_drop_down
- name: navigation/arrow_forward
- name: navigation/cancel
- name: navigation/expand_less
- name: navigation/expand_more
- name: navigation/menu
- name: navigation/more_horiz
- name: navigation/more_vert
- name: social/person_add
......@@ -78,7 +78,7 @@ class _ButtonsDemoState extends State<ButtonsDemo> {
child: new Center(
child: new FloatingActionButton(
tooltip: 'Open FAB demos',
child: new Icon(icon: 'content/add'),
child: new Icon(icon: Icons.add),
onPressed: () {
Navigator.push(context, new MaterialPageRoute(
builder: (BuildContext context) => new TabsFabDemo()
......
......@@ -28,7 +28,7 @@ const String _alertWithTitleText =
class DialogDemoItem extends StatelessComponent {
DialogDemoItem({ Key key, this.icon, this.color, this.text, this.onPressed }) : super(key: key);
final String icon;
final IconData icon;
final Color color;
final String text;
final VoidCallback onPressed;
......@@ -43,7 +43,7 @@ class DialogDemoItem extends StatelessComponent {
alignItems: FlexAlignItems.center,
children: <Widget>[
new Icon(
size: IconSize.s36,
size: 36.0,
icon: icon,
color: color
),
......@@ -166,19 +166,19 @@ class DialogDemoState extends State<DialogDemo> {
content: new Column(
children: <Widget>[
new DialogDemoItem(
icon: 'action/account_circle',
icon: Icons.account_circle,
color: theme.primaryColor,
text: 'username@gmail.com',
onPressed: () { Navigator.pop(context, 'username@gmail.com'); }
),
new DialogDemoItem(
icon: 'action/account_circle',
icon: Icons.account_circle,
color: theme.primaryColor,
text: 'user02@gmail.com',
onPressed: () { Navigator.pop(context, 'user02@gmail.com'); }
),
new DialogDemoItem(
icon: 'content/add_circle',
icon: Icons.add_circle,
text: 'add account',
color: theme.disabledColor
)
......
......@@ -110,9 +110,9 @@ class _FitnessDemoContentsState extends State<_FitnessDemoContents> {
child: new Row(
justifyContent: FlexJustifyContent.center,
children: <Widget>[
_createInfoPanelCell("action/accessibility", "$count", "COUNT"),
_createInfoPanelCell("image/timer", _formatSeconds(time), "TIME"),
_createInfoPanelCell("image/flash_on", "$kcal", "KCAL")
_createInfoPanelCell(Icons.accessibility, '$count', 'COUNT'),
_createInfoPanelCell(Icons.timer, _formatSeconds(time), 'TIME'),
_createInfoPanelCell(Icons.flash_on, '$kcal', 'KCAL')
]
)
),
......@@ -136,7 +136,7 @@ class _FitnessDemoContentsState extends State<_FitnessDemoContents> {
);
}
Widget _createInfoPanelCell(String icon, String value, String description) {
Widget _createInfoPanelCell(IconData icon, String value, String description) {
Color color;
if (workoutAnimation.workingOut)
color = Colors.black87;
......@@ -148,7 +148,7 @@ class _FitnessDemoContentsState extends State<_FitnessDemoContents> {
child: new Center(
child: new Column(
children: <Widget>[
new Icon(icon: icon, size: IconSize.s48, color: color),
new Icon(icon: icon, size: 48.0, color: color),
new Text(value, style: new TextStyle(fontSize: 24.0, color: color)),
new Text(description, style: new TextStyle(color: color))
]
......
......@@ -8,7 +8,7 @@ import 'package:flutter/widgets.dart';
class _ContactCategory extends StatelessComponent {
_ContactCategory({ Key key, this.icon, this.children }) : super(key: key);
final String icon;
final IconData icon;
final List<Widget> children;
Widget build(BuildContext context) {
......@@ -38,7 +38,7 @@ class _ContactItem extends StatelessComponent {
assert(lines.length > 1);
}
final String icon;
final IconData icon;
final List<String> lines;
Widget build(BuildContext context) {
......@@ -88,11 +88,11 @@ class FlexibleSpaceDemoState extends State<FlexibleSpaceDemo> {
toolBar: new ToolBar(
right: <Widget>[
new IconButton(
icon: 'content/create',
icon: Icons.create,
tooltip: 'Search'
),
new IconButton(
icon: 'navigation/more_vert',
icon: Icons.more_vert,
tooltip: 'Show menu'
)
],
......@@ -112,17 +112,17 @@ class FlexibleSpaceDemoState extends State<FlexibleSpaceDemo> {
padding: new EdgeDims.only(top: appBarHeight),
children: <Widget>[
new _ContactCategory(
icon: 'communication/call',
icon: Icons.call,
children: <Widget>[
new _ContactItem(
icon: 'communication/message',
icon: Icons.message,
lines: <String>[
'(650) 555-1234',
'Mobile'
]
),
new _ContactItem(
icon: 'communication/message',
icon: Icons.message,
lines: <String>[
'(323) 555-6789',
'Work'
......@@ -131,7 +131,7 @@ class FlexibleSpaceDemoState extends State<FlexibleSpaceDemo> {
]
),
new _ContactCategory(
icon: 'communication/email',
icon: Icons.email,
children: <Widget>[
new _ContactItem(
lines: <String>[
......@@ -148,7 +148,7 @@ class FlexibleSpaceDemoState extends State<FlexibleSpaceDemo> {
]
),
new _ContactCategory(
icon: 'communication/location_on',
icon: Icons.location_on,
children: <Widget>[
new _ContactItem(
lines: <String>[
......
......@@ -56,7 +56,7 @@ class DateTimeItem extends StatelessComponent {
justifyContent: FlexJustifyContent.spaceBetween,
children: <Widget>[
new Text(new DateFormat('EEE, MMM d yyyy').format(date)),
new Icon(icon: 'navigation/arrow_drop_down', size: IconSize.s24, color: Colors.black54),
new Icon(icon: Icons.arrow_drop_down, color: Colors.black54),
]
)
)
......@@ -81,7 +81,7 @@ class DateTimeItem extends StatelessComponent {
child: new Row(
children: <Widget>[
new Text('$time'),
new Icon(icon: 'navigation/arrow_drop_down', size: IconSize.s24, color: Colors.black54),
new Icon(icon: Icons.arrow_drop_down, color: Colors.black54),
]
)
)
......@@ -143,7 +143,7 @@ class FullScreenDialogDemoState extends State<FullScreenDialogDemo> {
return new Scaffold(
toolBar: new ToolBar(
left: new IconButton(
icon: 'content/clear',
icon: Icons.clear,
onPressed: () { handleDismissButton(context); }
),
center: new Text('New Event'),
......
......@@ -72,7 +72,7 @@ class GridDemoPhotoItem extends StatelessComponent {
return new GridTile(
header: new GridTileBar(
backgroundColor: Colors.black.withAlpha(0x08),
left: new Icon(icon: 'action/info', color: Colors.white70),
left: new Icon(icon: Icons.info, color: Colors.white70),
title: new Text(photo.title)
),
child: image
......@@ -84,7 +84,7 @@ class GridDemoPhotoItem extends StatelessComponent {
backgroundColor: Colors.black.withAlpha(0x08),
title: new Text(photo.title),
caption: new Text(photo.caption),
right: new Icon(icon: 'action/info', color: Colors.white70)
right: new Icon(icon: Icons.info, color: Colors.white70)
),
child: image
);
......@@ -176,7 +176,7 @@ class GridListDemoState extends State<GridListDemo> {
center: new Text('Grid List'),
right: <Widget>[
new IconButton(
icon: "navigation/more_vert",
icon: Icons.more_vert,
onPressed: () { showTileStyleMenu(context); },
tooltip: 'Show menu'
)
......
......@@ -42,12 +42,12 @@ class IconsDemoState extends State<IconsDemo> {
});
}
Widget buildIconButton(IconSize size, String name, bool enabled) {
Widget buildIconButton(double size, IconData icon, bool enabled) {
return new IconButton(
size: size,
icon: name,
icon: icon,
color: iconColor,
tooltip: "${enabled ? 'enabled' : 'disabled'} $name icon button",
tooltip: "${enabled ? 'enabled' : 'disabled'} icon button",
onPressed: enabled ? handleIconButtonPress : null
);
}
......@@ -97,10 +97,10 @@ class IconsDemoState extends State<IconsDemo> {
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)
buildIconButton(18.0, Icons.face, true),
buildIconButton(24.0, Icons.alarm, true),
buildIconButton(36.0, Icons.home, true),
buildIconButton(48.0, Icons.android, true)
]
)
),
......@@ -109,10 +109,10 @@ class IconsDemoState extends State<IconsDemo> {
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)
buildIconButton(18.0, Icons.face, false),
buildIconButton(24.0, Icons.alarm, false),
buildIconButton(36.0, Icons.home, false),
buildIconButton(48.0, Icons.android, false)
]
)
)
......@@ -126,7 +126,7 @@ class IconsDemoState extends State<IconsDemo> {
justifyContent: FlexJustifyContent.center,
children: <Widget>[
new Icon(
icon: 'image/brightness_7',
icon: Icons.brightness_7,
color: iconColor.withAlpha(0x33) // 0.2 * 255 = 0x33
),
new Slider(
......@@ -141,7 +141,7 @@ class IconsDemoState extends State<IconsDemo> {
}
),
new Icon(
icon: 'image/brightness_7',
icon: Icons.brightness_7,
color: iconColor.withAlpha(0xFF)
),
]
......
......@@ -149,7 +149,7 @@ class ListDemoState extends State<ListDemo> {
left: _showAvatars ? new CircleAvatar(child: new Text(item)) : null,
primary: new Text('This item represents $item'),
secondary: secondary,
right: _showIcons ? new Icon(icon: 'action/info', color: Theme.of(context).disabledColor) : null
right: _showIcons ? new Icon(icon: Icons.info, color: Theme.of(context).disabledColor) : null
);
}
......@@ -178,7 +178,7 @@ class ListDemoState extends State<ListDemo> {
center: new Text('Scrolling List\n$itemSizeText$layoutText'),
right: <Widget>[
new IconButton(
icon: "av/sort_by_alpha",
icon: Icons.sort_by_alpha,
tooltip: 'Sort',
onPressed: () {
setState(() {
......@@ -188,7 +188,7 @@ class ListDemoState extends State<ListDemo> {
}
),
new IconButton(
icon: "navigation/more_vert",
icon: Icons.more_vert,
tooltip: 'Show menu',
onPressed: () { showConfigurationSheet(context); }
)
......
......@@ -115,21 +115,21 @@ class MenuDemoState extends State<MenuDemo> {
new PopupMenuItem(
value: 'Preview',
child: new ListItem(
left: new Icon(icon: 'action/visibility'),
left: new Icon(icon: Icons.visibility),
primary: new Text('Preview')
)
),
new PopupMenuItem(
value: 'Share',
child: new ListItem(
left: new Icon(icon: 'social/person_add'),
left: new Icon(icon: Icons.person_add),
primary: new Text('Share')
)
),
new PopupMenuItem(
value: 'Get Link',
child: new ListItem(
left: new Icon(icon: 'content/link'),
left: new Icon(icon: Icons.link),
primary: new Text('Get Link')
)
),
......@@ -137,7 +137,7 @@ class MenuDemoState extends State<MenuDemo> {
new PopupMenuItem(
value: 'Remove',
child: new ListItem(
left: new Icon(icon: 'action/delete'),
left: new Icon(icon: Icons.delete),
primary: new Text('Remove')
)
)
......
......@@ -5,13 +5,13 @@
import 'package:flutter/material.dart';
class PageSelectorDemo extends StatelessComponent {
Widget _buildTabView(String iconName) {
Widget _buildTabView(IconData icon) {
return new Container(
key: new ValueKey<String>(iconName),
key: new ObjectKey(icon),
padding: const EdgeDims.all(12.0),
child: new Card(
child: new Center(
child: new Icon(icon: 'action/$iconName', size:IconSize.s48)
child: new Icon(icon: icon, size: 48.0)
)
)
);
......@@ -24,12 +24,19 @@ class PageSelectorDemo extends StatelessComponent {
}
Widget build(BuildContext notUsed) { // Can't find the TabBarSelection from this context.
final List<String> iconNames = <String>['event', 'home', 'android', 'alarm', 'face', 'language'];
final List<IconData> icons = <IconData>[
Icons.event,
Icons.home,
Icons.android,
Icons.alarm,
Icons.face,
Icons.language,
];
return new Scaffold(
toolBar: new ToolBar(center: new Text('Page Selector')),
body: new TabBarSelection(
values: iconNames,
values: icons,
child: new Builder(
builder: (BuildContext context) {
return new Column(
......@@ -39,13 +46,13 @@ class PageSelectorDemo extends StatelessComponent {
child: new Row(
children: <Widget>[
new IconButton(
icon: 'navigation/arrow_back',
icon: Icons.arrow_back,
onPressed: () { _handleArrowButtonPress(context, -1); },
tooltip: 'Back'
),
new TabPageSelector<String>(),
new IconButton(
icon: 'navigation/arrow_forward',
icon: Icons.arrow_forward,
onPressed: () { _handleArrowButtonPress(context, 1); },
tooltip: 'Forward'
)
......@@ -55,7 +62,7 @@ class PageSelectorDemo extends StatelessComponent {
),
new Flexible(
child: new TabBarView(
children: iconNames.map(_buildTabView).toList()
children: icons.map(_buildTabView).toList()
)
)
]
......
......@@ -30,7 +30,7 @@ class PersistentBottomSheetDemo extends StatelessComponent {
return new Scaffold(
toolBar: new ToolBar(center: new Text("Persistent Bottom Sheet")),
floatingActionButton: new FloatingActionButton(
child: new Icon(icon: 'content/add'),
child: new Icon(icon: Icons.add),
backgroundColor: Colors.redAccent[200]
),
body: new Builder(
......
......@@ -5,29 +5,45 @@
import 'package:flutter/material.dart';
class TabsDemo extends StatelessComponent {
final List<String> iconNames = <String>["event", "home", "android", "alarm", "face", "language"];
final List<IconData> icons = <IconData>[
Icons.event,
Icons.home,
Icons.android,
Icons.alarm,
Icons.face,
Icons.language,
];
final Map<IconData, String> labels = <IconData, String>{
Icons.event: 'EVENT',
Icons.home: 'HOME',
Icons.android: 'ANDROID',
Icons.alarm: 'ALARM',
Icons.face: 'FACE',
Icons.language: 'LANGUAGE',
};
Widget build(_) {
return new TabBarSelection(
values: iconNames,
values: icons,
child: new Scaffold(
toolBar: new ToolBar(
center: new Text("Scrollable Tabs"),
tabBar: new TabBar<String>(
isScrollable: true,
labels: new Map.fromIterable(
iconNames,
value: (String iconName) => new TabLabel(text: iconName.toUpperCase(), icon: "action/$iconName")
icons,
value: (IconData icon) => new TabLabel(text: labels[icon], icon: icon)
)
)
),
body: new TabBarView(
children: iconNames.map((String iconName) {
children: icons.map((IconData icon) {
return new Container(
key: new ValueKey<String>(iconName),
key: new ObjectKey(icon),
padding: const EdgeDims.all(12.0),
child: new Card(
child: new Center(child: new Icon(icon: "action/$iconName", size:IconSize.s48))
child: new Center(child: new Icon(icon: icon, size: 48.0))
)
);
}).toList()
......
......@@ -9,7 +9,7 @@ class _Page {
final String label;
final Map<int, Color> colors;
final String icon;
final IconData icon;
TabLabel get tabLabel => new TabLabel(text: label.toUpperCase());
Color get labelColor => colors != null ? colors[300] : Colors.grey[300];
......@@ -32,12 +32,12 @@ class TabsFabDemo extends StatefulComponent {
class _TabsFabDemoState extends State<TabsFabDemo> {
final GlobalKey scaffoldKey = new GlobalKey();
final List<_Page> pages = <_Page>[
new _Page(label: 'Blue', colors: Colors.indigo, icon: 'content/add'),
new _Page(label: 'Too', colors: Colors.indigo, icon: 'content/add'),
new _Page(label: 'Eco', colors: Colors.green, icon: 'content/create'),
new _Page(label: 'Blue', colors: Colors.indigo, icon: Icons.add),
new _Page(label: 'Too', colors: Colors.indigo, icon: Icons.add),
new _Page(label: 'Eco', colors: Colors.green, icon: Icons.create),
new _Page(label: 'No'),
new _Page(label: 'Teal', colors: Colors.teal, icon: 'content/add'),
new _Page(label: 'Red', colors: Colors.red, icon: 'content/create')
new _Page(label: 'Teal', colors: Colors.teal, icon: Icons.add),
new _Page(label: 'Red', colors: Colors.red, icon: Icons.create),
];
_Page selectedPage;
......
......@@ -28,8 +28,8 @@ class TooltipDemo extends StatelessComponent {
new Tooltip(
message: 'call icon',
child: new Icon(
size: IconSize.s18,
icon: 'communication/call',
size: 18.0,
icon: Icons.call,
color: theme.primaryColor
)
),
......@@ -38,8 +38,8 @@ class TooltipDemo extends StatelessComponent {
),
new Center(
child: new IconButton(
size: IconSize.s48,
icon: 'communication/call',
size: 48.0,
icon: Icons.call,
color: theme.primaryColor,
tooltip: 'place a phone call',
onPressed: () {
......
......@@ -27,7 +27,7 @@ class GalleryDrawer extends StatelessComponent {
children: <Widget>[
new DrawerHeader(child: new Text('Flutter Gallery')),
new DrawerItem(
icon: 'image/brightness_5',
icon: Icons.brightness_5,
onPressed: () { _changeTheme(context, true); },
selected: GalleryApp.of(context).lightTheme,
child: new Row(
......@@ -42,7 +42,7 @@ class GalleryDrawer extends StatelessComponent {
)
),
new DrawerItem(
icon: 'image/brightness_7',
icon: Icons.brightness_7,
onPressed: () { _changeTheme(context, false); },
selected: !GalleryApp.of(context).lightTheme,
child: new Row(
......@@ -58,7 +58,7 @@ class GalleryDrawer extends StatelessComponent {
),
new Divider(),
new DrawerItem(
icon: 'action/hourglass_empty',
icon: Icons.hourglass_empty,
selected: timeDilation != 1.0,
onPressed: () { _toggleAnimationSpeed(context); },
child: new Row(
......
name: stocks
version: 0.0.2
update-url: http://localhost:9888/
material-design-icons:
- name: action/accessibility
- name: action/account_balance
- name: action/assessment
- name: action/backup
- name: action/done
- name: action/help
- name: action/picture_in_picture
- name: action/search
- name: action/settings
- name: action/thumb_down
- name: action/thumb_up
- name: content/add
- name: device/dvr
- name: editor/border_all
- name: editor/border_clear
- name: navigation/arrow_back
- name: navigation/menu
- name: navigation/more_vert
- name: editor/format_color_text
- name: image/filter_none
- name: hardware/mouse
- name: image/gradient
uses-material-design: true
......@@ -28,8 +28,8 @@ class _NotImplementedDialog extends StatelessComponent {
child: new Row(
children: <Widget>[
new Icon(
icon: 'device/dvr',
size: IconSize.s18
icon: Icons.dvr,
size: 18.0
),
new Container(
width: 8.0
......@@ -124,12 +124,12 @@ class StockHomeState extends State<StockHome> {
child: new Block(children: <Widget>[
new DrawerHeader(child: new Text('Stocks')),
new DrawerItem(
icon: 'action/assessment',
icon: Icons.assessment,
selected: true,
child: new Text('Stock List')
),
new DrawerItem(
icon: 'action/account_balance',
icon: Icons.account_balance,
onPressed: () {
showDialog(
context: context,
......@@ -156,7 +156,7 @@ class StockHomeState extends State<StockHome> {
child: new Text('Account Balance')
),
new DrawerItem(
icon: 'device/dvr',
icon: Icons.dvr,
onPressed: () {
try {
debugDumpApp();
......@@ -171,7 +171,7 @@ class StockHomeState extends State<StockHome> {
),
new Divider(),
new DrawerItem(
icon: 'action/thumb_up',
icon: Icons.thumb_up,
onPressed: () => _handleStockModeChange(StockMode.optimistic),
child: new Row(
children: <Widget>[
......@@ -181,7 +181,7 @@ class StockHomeState extends State<StockHome> {
)
),
new DrawerItem(
icon: 'action/thumb_down',
icon: Icons.thumb_down,
onPressed: () => _handleStockModeChange(StockMode.pessimistic),
child: new Row(
children: <Widget>[
......@@ -192,11 +192,11 @@ class StockHomeState extends State<StockHome> {
),
new Divider(),
new DrawerItem(
icon: 'action/settings',
icon: Icons.settings,
onPressed: _handleShowSettings,
child: new Text('Settings')),
new DrawerItem(
icon: 'action/help',
icon: Icons.help,
child: new Text('Help & Feedback'))
])
);
......@@ -212,7 +212,7 @@ class StockHomeState extends State<StockHome> {
center: new Text(StockStrings.of(context).title()),
right: <Widget>[
new IconButton(
icon: "action/search",
icon: Icons.search,
onPressed: _handleSearchBegin,
tooltip: 'Search'
),
......@@ -305,7 +305,7 @@ class StockHomeState extends State<StockHome> {
Widget buildSearchBar() {
return new ToolBar(
left: new IconButton(
icon: 'navigation/arrow_back',
icon: Icons.arrow_back,
color: Theme.of(context).accentColor,
onPressed: _handleSearchEnd,
tooltip: 'Back'
......@@ -330,7 +330,7 @@ class StockHomeState extends State<StockHome> {
Widget buildFloatingActionButton() {
return new FloatingActionButton(
tooltip: 'Create company',
child: new Icon(icon: 'content/add'),
child: new Icon(icon: Icons.add),
backgroundColor: Colors.redAccent[200],
onPressed: _handleCreateCompany
);
......
......@@ -103,7 +103,7 @@ class StockSettingsState extends State<StockSettings> {
Widget buildSettingsPane(BuildContext context) {
List<Widget> rows = <Widget>[
new DrawerItem(
icon: 'action/thumb_up',
icon: Icons.thumb_up,
onPressed: () => _confirmOptimismChange(),
child: new Row(
children: <Widget>[
......@@ -116,7 +116,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'action/backup',
icon: Icons.backup,
onPressed: () { _handleBackupChanged(!(config.configuration.backupMode == BackupMode.enabled)); },
child: new Row(
children: <Widget>[
......@@ -129,7 +129,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'action/picture_in_picture',
icon: Icons.picture_in_picture,
onPressed: () { _handleShowPerformanceOverlayChanged(!config.configuration.showPerformanceOverlay); },
child: new Row(
children: <Widget>[
......@@ -142,7 +142,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'action/accessibility',
icon: Icons.accessibility,
onPressed: () { _handleShowSemanticsDebuggerChanged(!config.configuration.showSemanticsDebugger); },
child: new Row(
children: <Widget>[
......@@ -159,7 +159,7 @@ class StockSettingsState extends State<StockSettings> {
// material grid and size construction lines are only available in checked mode
rows.addAll([
new DrawerItem(
icon: 'editor/border_clear',
icon: Icons.border_clear,
onPressed: () { _handleShowGridChanged(!config.configuration.debugShowGrid); },
child: new Row(
children: <Widget>[
......@@ -172,7 +172,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'editor/border_all',
icon: Icons.border_all,
onPressed: () { _handleShowSizesChanged(!config.configuration.debugShowSizes); },
child: new Row(
children: <Widget>[
......@@ -185,7 +185,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'editor/format_color_text',
icon: Icons.format_color_text,
onPressed: () { _handleShowBaselinesChanged(!config.configuration.debugShowBaselines); },
child: new Row(
children: <Widget>[
......@@ -198,7 +198,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'image/filter_none',
icon: Icons.filter_none,
onPressed: () { _handleShowLayersChanged(!config.configuration.debugShowLayers); },
child: new Row(
children: <Widget>[
......@@ -211,7 +211,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'hardware/mouse',
icon: Icons.mouse,
onPressed: () { _handleShowPointersChanged(!config.configuration.debugShowPointers); },
child: new Row(
children: <Widget>[
......@@ -224,7 +224,7 @@ class StockSettingsState extends State<StockSettings> {
)
),
new DrawerItem(
icon: 'image/gradient',
icon: Icons.gradient,
onPressed: () { _handleShowRainbowChanged(!config.configuration.debugShowRainbow); },
child: new Row(
children: <Widget>[
......
......@@ -44,19 +44,9 @@ void checkIconColor(WidgetTester tester, String label, Color color) {
// way to find the menu item. I hope.
Element semantics = findElementOfExactWidgetTypeGoingUp(tester.findText(label), MergeSemantics);
expect(semantics, isNotNull);
Element asset = findElementOfExactWidgetTypeGoingDown(semantics, AssetImage);
RenderImage imageBox = asset.findRenderObject();
Match match = materialIconAssetNameColorExtractor.firstMatch(asset.widget.name);
expect(match, isNotNull);
if (color == const Color(0xFFFFFFFF)) {
expect(match[1], equals('white'));
expect(imageBox.color, isNull);
} else if (color == const Color(0xFF000000)) {
expect(match[1], equals('black'));
expect(imageBox.color, isNull);
} else {
expect(imageBox.color, equals(color));
}
Element asset = findElementOfExactWidgetTypeGoingDown(semantics, Text);
Text text = asset.widget;
expect(text.style.color, equals(color));
}
void main() {
......
......@@ -134,16 +134,16 @@ class CardCollectionState extends State<CardCollection> {
buildDrawerColorRadioItem("Amber", Colors.amber, _primaryColor, _selectColor),
buildDrawerColorRadioItem("Teal", Colors.teal, _primaryColor, _selectColor),
new Divider(),
buildDrawerDirectionRadioItem("Dismiss horizontally", DismissDirection.horizontal, _dismissDirection, _changeDismissDirection, icon: 'action/code'),
buildDrawerDirectionRadioItem("Dismiss left", DismissDirection.left, _dismissDirection, _changeDismissDirection, icon: 'navigation/arrow_back'),
buildDrawerDirectionRadioItem("Dismiss right", DismissDirection.right, _dismissDirection, _changeDismissDirection, icon: 'navigation/arrow_forward'),
buildDrawerDirectionRadioItem("Dismiss horizontally", DismissDirection.horizontal, _dismissDirection, _changeDismissDirection, icon: Icons.code),
buildDrawerDirectionRadioItem("Dismiss left", DismissDirection.left, _dismissDirection, _changeDismissDirection, icon: Icons.arrow_back),
buildDrawerDirectionRadioItem("Dismiss right", DismissDirection.right, _dismissDirection, _changeDismissDirection, icon: Icons.arrow_forward),
new Divider(),
buildFontRadioItem("Left-align text", new TextStyle(textAlign: TextAlign.left), _textStyle, _changeTextStyle, icon: 'editor/format_align_left', enabled: !_editable),
buildFontRadioItem("Center-align text", new TextStyle(textAlign: TextAlign.center), _textStyle, _changeTextStyle, icon: 'editor/format_align_center', enabled: !_editable),
buildFontRadioItem("Right-align text", new TextStyle(textAlign: TextAlign.right), _textStyle, _changeTextStyle, icon: 'editor/format_align_right', enabled: !_editable),
buildFontRadioItem("Left-align text", new TextStyle(textAlign: TextAlign.left), _textStyle, _changeTextStyle, icon: Icons.format_align_left, enabled: !_editable),
buildFontRadioItem("Center-align text", new TextStyle(textAlign: TextAlign.center), _textStyle, _changeTextStyle, icon: Icons.format_align_center, enabled: !_editable),
buildFontRadioItem("Right-align text", new TextStyle(textAlign: TextAlign.right), _textStyle, _changeTextStyle, icon: Icons.format_align_right, enabled: !_editable),
new Divider(),
new DrawerItem(
icon: 'device/dvr',
icon: Icons.dvr,
onPressed: () { debugDumpApp(); debugDumpRenderTree(); },
child: new Text('Dump App to Console')
),
......@@ -221,7 +221,7 @@ class CardCollectionState extends State<CardCollection> {
);
}
Widget buildDrawerColorRadioItem(String label, Map<int, Color> itemValue, Map<int, Color> currentValue, ValueChanged<Map<int, Color>> onChanged, { String icon, bool enabled: true }) {
Widget buildDrawerColorRadioItem(String label, Map<int, Color> itemValue, Map<int, Color> currentValue, ValueChanged<Map<int, Color>> onChanged, { IconData icon, bool enabled: true }) {
return new DrawerItem(
icon: icon,
onPressed: enabled ? () { onChanged(itemValue); } : null,
......@@ -238,7 +238,7 @@ class CardCollectionState extends State<CardCollection> {
);
}
Widget buildDrawerDirectionRadioItem(String label, DismissDirection itemValue, DismissDirection currentValue, ValueChanged<DismissDirection> onChanged, { String icon, bool enabled: true }) {
Widget buildDrawerDirectionRadioItem(String label, DismissDirection itemValue, DismissDirection currentValue, ValueChanged<DismissDirection> onChanged, { IconData icon, bool enabled: true }) {
return new DrawerItem(
icon: icon,
onPressed: enabled ? () { onChanged(itemValue); } : null,
......@@ -255,7 +255,7 @@ class CardCollectionState extends State<CardCollection> {
);
}
Widget buildFontRadioItem(String label, TextStyle itemValue, TextStyle currentValue, ValueChanged<TextStyle> onChanged, { String icon, bool enabled: true }) {
Widget buildFontRadioItem(String label, TextStyle itemValue, TextStyle currentValue, ValueChanged<TextStyle> onChanged, { IconData icon, bool enabled: true }) {
return new DrawerItem(
icon: icon,
onPressed: enabled ? () { onChanged(itemValue); } : null,
......@@ -347,11 +347,11 @@ class CardCollectionState extends State<CardCollection> {
backgroundMessage = "Unsupported dismissDirection";
}
Widget leftArrowIcon = new Icon(icon: 'navigation/arrow_back', size: IconSize.s36);
Widget leftArrowIcon = new Icon(icon: Icons.arrow_back, size: 36.0);
if (_dismissDirection == DismissDirection.right)
leftArrowIcon = new Opacity(opacity: 0.1, child: leftArrowIcon);
Widget rightArrowIcon = new Icon(icon: 'navigation/arrow_forward', size: IconSize.s36);
Widget rightArrowIcon = new Icon(icon: Icons.arrow_forward, size: 36.0);
if (_dismissDirection == DismissDirection.left)
rightArrowIcon = new Opacity(opacity: 0.1, child: rightArrowIcon);
......
name: widgets
uses-material-design: true
assets:
- assets/starcircle.png
material-design-icons:
- name: action/account_circle
- name: action/alarm
- name: action/android
- name: action/assessment
- name: action/code
- name: action/event
- name: action/face
- name: action/home
- name: action/language
- name: action/list
- name: content/add
- name: content/create
- name: device/dvr
- name: editor/format_align_center
- name: editor/format_align_left
- name: editor/format_align_right
- name: navigation/arrow_back
- name: navigation/arrow_forward
- name: navigation/menu
- name: navigation/more_horiz
- name: navigation/more_vert
- name: navigation/refresh
......@@ -52,8 +52,8 @@ class HeroDemo extends StatelessComponent {
Widget build(BuildContext context) {
return new Scaffold(
toolBar: new ToolBar(
left: new IconButton(icon: "navigation/menu"),
center: new Text("Diets")
left: new IconButton(icon: Icons.menu),
center: new Text('Diets')
),
body: new Center(
child: new GestureDetector(
......@@ -105,11 +105,11 @@ class CrabPage extends StatelessComponent {
padding: new EdgeDims.only(top: ui.window.padding.top),
backgroundColor: const Color(0x00000000),
left: new IconButton(
icon: "navigation/arrow_back",
icon: Icons.arrow_back,
onPressed: () => Navigator.pop(context)
),
right: <Widget>[
new IconButton(icon: "navigation/more_vert")
new IconButton(icon: Icons.more_vert)
]
),
new Positioned(
......
......@@ -64,7 +64,7 @@ class PostDemoState extends State<PostDemo> {
floatingActionButton: new FloatingActionButton(
tooltip: 'Refresh',
child: new Icon(
icon: 'navigation/refresh'
icon: Icons.refresh
),
onPressed: _refresh
)
......
......@@ -81,13 +81,13 @@ class PageableListAppState extends State<PageableListApp> {
child: new Block(children: <Widget>[
new DrawerHeader(child: new Text('Options')),
new DrawerItem(
icon: 'navigation/more_horiz',
icon: Icons.more_horiz,
selected: scrollDirection == Axis.horizontal,
child: new Text('Horizontal Layout'),
onPressed: switchScrollDirection
),
new DrawerItem(
icon: 'navigation/more_vert',
icon: Icons.more_vert,
selected: scrollDirection == Axis.vertical,
child: new Text('Vertical Layout'),
onPressed: switchScrollDirection
......
......@@ -30,6 +30,7 @@ export 'src/material/floating_action_button.dart';
export 'src/material/grid_tile.dart';
export 'src/material/grid_tile_bar.dart';
export 'src/material/icon.dart';
export 'src/material/icons.dart';
export 'src/material/icon_button.dart';
export 'src/material/icon_theme.dart';
export 'src/material/icon_theme_data.dart';
......
......@@ -7,6 +7,7 @@ import 'package:flutter/widgets.dart';
import 'colors.dart';
import 'debug.dart';
import 'icon.dart';
import 'icons.dart';
import 'tooltip.dart';
const double _kChipHeight = 32.0;
......@@ -66,8 +67,8 @@ class Chip extends StatelessComponent {
child: new Container(
padding: const EdgeDims.symmetric(horizontal: 4.0),
child: new Icon(
icon: 'navigation/cancel',
size: IconSize.s18,
icon: Icons.cancel,
size: 18.0,
color: Colors.black54
)
)
......
......@@ -6,6 +6,7 @@ import 'package:flutter/widgets.dart';
import 'colors.dart';
import 'icon.dart';
import 'icons.dart';
import 'ink_well.dart';
import 'theme.dart';
......@@ -18,7 +19,7 @@ class DrawerItem extends StatelessComponent {
this.selected: false
}) : super(key: key);
final String icon;
final IconData icon;
final Widget child;
final VoidCallback onPressed;
final bool selected;
......
......@@ -8,6 +8,7 @@ import 'package:flutter/widgets.dart';
import 'debug.dart';
import 'icon.dart';
import 'icons.dart';
import 'ink_well.dart';
import 'shadows.dart';
import 'theme.dart';
......@@ -298,7 +299,7 @@ class _DropDownButtonState<T> extends State<DropDownButton<T>> {
alignment: const FractionalOffset(0.5, 0.0)
),
new Container(
child: new Icon(icon: 'navigation/arrow_drop_down', size: IconSize.s36),
child: new Icon(icon: Icons.arrow_drop_down, size: 36.0),
padding: const EdgeDims.only(top: 6.0)
)
],
......
......@@ -5,28 +5,15 @@
import 'package:flutter/widgets.dart';
import 'colors.dart';
import 'icons.dart';
import 'icon_theme.dart';
import 'icon_theme_data.dart';
import 'theme.dart';
enum IconSize {
s18,
s24,
s36,
s48,
}
const Map<IconSize, int> _kIconSize = const <IconSize, int>{
IconSize.s18: 18,
IconSize.s24: 24,
IconSize.s36: 36,
IconSize.s48: 48,
};
class Icon extends StatelessComponent {
Icon({
Key key,
this.size: IconSize.s24,
this.size: 24.0,
this.icon,
this.colorTheme,
this.color
......@@ -34,8 +21,8 @@ class Icon extends StatelessComponent {
assert(size != null);
}
final IconSize size;
final String icon;
final double size;
final IconData icon;
final IconThemeColor colorTheme;
final Color color;
......@@ -53,55 +40,42 @@ class Icon extends StatelessComponent {
}
Widget build(BuildContext context) {
final int iconSize = _kIconSize[size];
if (icon == null) {
return new SizedBox(
width: iconSize.toDouble(),
height: iconSize.toDouble()
width: size,
height: size
);
}
String category = '';
String subtype = '';
List<String> parts = icon.split('/');
if (parts.length == 2) {
category = parts[0];
subtype = parts[1];
}
final IconThemeColor iconThemeColor = _getIconThemeColor(context);
String colorSuffix;
switch(iconThemeColor) {
case IconThemeColor.black:
colorSuffix = "black";
break;
case IconThemeColor.white:
colorSuffix = "white";
break;
}
Color iconColor = color;
final int iconAlpha = (255.0 * (IconTheme.of(context)?.clampedOpacity ?? 1.0)).round();
if (iconAlpha != 255) {
if (color != null) {
iconColor = color.withAlpha((iconAlpha * color.opacity).round());
} else {
switch(iconThemeColor) {
case IconThemeColor.black:
iconColor = Colors.black.withAlpha(iconAlpha);
break;
case IconThemeColor.white:
iconColor = Colors.white.withAlpha(iconAlpha);
break;
}
if (color != null) {
if (iconAlpha != 255)
iconColor = color.withAlpha((iconAlpha * color.opacity).round());
} else {
switch(_getIconThemeColor(context)) {
case IconThemeColor.black:
iconColor = Colors.black.withAlpha(iconAlpha);
break;
case IconThemeColor.white:
iconColor = Colors.white.withAlpha(iconAlpha);
break;
}
}
return new AssetImage(
name: '$category/ic_${subtype}_${colorSuffix}_${iconSize}dp.png',
width: iconSize.toDouble(),
height: iconSize.toDouble(),
color: iconColor
return new SizedBox(
width: size,
height: size,
child: new Center(
child: new Text(new String.fromCharCode(icon.codePoint),
style: new TextStyle(
inherit: false,
color: iconColor,
fontSize: size,
fontFamily: 'MaterialIcons'
)
)
)
);
}
......
......@@ -5,6 +5,7 @@
import 'package:flutter/widgets.dart';
import 'icon.dart';
import 'icons.dart';
import 'icon_theme_data.dart';
import 'ink_well.dart';
import 'theme.dart';
......@@ -22,7 +23,7 @@ import 'tooltip.dart';
class IconButton extends StatelessComponent {
const IconButton({
Key key,
this.size: IconSize.s24,
this.size: 24.0,
this.icon,
this.colorTheme,
this.color,
......@@ -30,8 +31,8 @@ class IconButton extends StatelessComponent {
this.tooltip
}) : super(key: key);
final IconSize size;
final String icon;
final double size;
final IconData icon;
final IconThemeColor colorTheme;
final Color color;
......
// 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.
class IconData {
const IconData(this.codePoint);
final int codePoint;
bool operator ==(dynamic other) {
if (other is! IconData)
return false;
final IconData typedOther = other;
return codePoint == typedOther.codePoint;
}
int get hashCode => codePoint.hashCode;
String toString() => 'IconData(codePoint: $codePoint)';
}
class Icons {
Icons._();
static const IconData threed_rotation = const IconData(0xe84d); // 3d_rotation isn't a valid identifier.
static const IconData ac_unit = const IconData(0xeb3b);
static const IconData access_alarm = const IconData(0xe190);
static const IconData access_alarms = const IconData(0xe191);
static const IconData access_time = const IconData(0xe192);
static const IconData accessibility = const IconData(0xe84e);
static const IconData accessible = const IconData(0xe914);
static const IconData account_balance = const IconData(0xe84f);
static const IconData account_balance_wallet = const IconData(0xe850);
static const IconData account_box = const IconData(0xe851);
static const IconData account_circle = const IconData(0xe853);
static const IconData adb = const IconData(0xe60e);
static const IconData add = const IconData(0xe145);
static const IconData add_a_photo = const IconData(0xe439);
static const IconData add_alarm = const IconData(0xe193);
static const IconData add_alert = const IconData(0xe003);
static const IconData add_box = const IconData(0xe146);
static const IconData add_circle = const IconData(0xe147);
static const IconData add_circle_outline = const IconData(0xe148);
static const IconData add_location = const IconData(0xe567);
static const IconData add_shopping_cart = const IconData(0xe854);
static const IconData add_to_photos = const IconData(0xe39d);
static const IconData add_to_queue = const IconData(0xe05c);
static const IconData adjust = const IconData(0xe39e);
static const IconData airline_seat_flat = const IconData(0xe630);
static const IconData airline_seat_flat_angled = const IconData(0xe631);
static const IconData airline_seat_individual_suite = const IconData(0xe632);
static const IconData airline_seat_legroom_extra = const IconData(0xe633);
static const IconData airline_seat_legroom_normal = const IconData(0xe634);
static const IconData airline_seat_legroom_reduced = const IconData(0xe635);
static const IconData airline_seat_recline_extra = const IconData(0xe636);
static const IconData airline_seat_recline_normal = const IconData(0xe637);
static const IconData airplanemode_active = const IconData(0xe195);
static const IconData airplanemode_inactive = const IconData(0xe194);
static const IconData airplay = const IconData(0xe055);
static const IconData airport_shuttle = const IconData(0xeb3c);
static const IconData alarm = const IconData(0xe855);
static const IconData alarm_add = const IconData(0xe856);
static const IconData alarm_off = const IconData(0xe857);
static const IconData alarm_on = const IconData(0xe858);
static const IconData album = const IconData(0xe019);
static const IconData all_inclusive = const IconData(0xeb3d);
static const IconData all_out = const IconData(0xe90b);
static const IconData android = const IconData(0xe859);
static const IconData announcement = const IconData(0xe85a);
static const IconData apps = const IconData(0xe5c3);
static const IconData archive = const IconData(0xe149);
static const IconData arrow_back = const IconData(0xe5c4);
static const IconData arrow_downward = const IconData(0xe5db);
static const IconData arrow_drop_down = const IconData(0xe5c5);
static const IconData arrow_drop_down_circle = const IconData(0xe5c6);
static const IconData arrow_drop_up = const IconData(0xe5c7);
static const IconData arrow_forward = const IconData(0xe5c8);
static const IconData arrow_upward = const IconData(0xe5d8);
static const IconData art_track = const IconData(0xe060);
static const IconData aspect_ratio = const IconData(0xe85b);
static const IconData assessment = const IconData(0xe85c);
static const IconData assignment = const IconData(0xe85d);
static const IconData assignment_ind = const IconData(0xe85e);
static const IconData assignment_late = const IconData(0xe85f);
static const IconData assignment_return = const IconData(0xe860);
static const IconData assignment_returned = const IconData(0xe861);
static const IconData assignment_turned_in = const IconData(0xe862);
static const IconData assistant = const IconData(0xe39f);
static const IconData assistant_photo = const IconData(0xe3a0);
static const IconData attach_file = const IconData(0xe226);
static const IconData attach_money = const IconData(0xe227);
static const IconData attachment = const IconData(0xe2bc);
static const IconData audiotrack = const IconData(0xe3a1);
static const IconData autoreconst = const IconData(0xe863);
static const IconData av_timer = const IconData(0xe01b);
static const IconData backspace = const IconData(0xe14a);
static const IconData backup = const IconData(0xe864);
static const IconData battery_alert = const IconData(0xe19c);
static const IconData battery_charging_full = const IconData(0xe1a3);
static const IconData battery_full = const IconData(0xe1a4);
static const IconData battery_std = const IconData(0xe1a5);
static const IconData battery_unknown = const IconData(0xe1a6);
static const IconData beach_access = const IconData(0xeb3e);
static const IconData beenhere = const IconData(0xe52d);
static const IconData block = const IconData(0xe14b);
static const IconData bluetooth = const IconData(0xe1a7);
static const IconData bluetooth_audio = const IconData(0xe60f);
static const IconData bluetooth_connected = const IconData(0xe1a8);
static const IconData bluetooth_disabled = const IconData(0xe1a9);
static const IconData bluetooth_searching = const IconData(0xe1aa);
static const IconData blur_circular = const IconData(0xe3a2);
static const IconData blur_linear = const IconData(0xe3a3);
static const IconData blur_off = const IconData(0xe3a4);
static const IconData blur_on = const IconData(0xe3a5);
static const IconData book = const IconData(0xe865);
static const IconData bookmark = const IconData(0xe866);
static const IconData bookmark_border = const IconData(0xe867);
static const IconData border_all = const IconData(0xe228);
static const IconData border_bottom = const IconData(0xe229);
static const IconData border_clear = const IconData(0xe22a);
static const IconData border_color = const IconData(0xe22b);
static const IconData border_horizontal = const IconData(0xe22c);
static const IconData border_inner = const IconData(0xe22d);
static const IconData border_left = const IconData(0xe22e);
static const IconData border_outer = const IconData(0xe22f);
static const IconData border_right = const IconData(0xe230);
static const IconData border_style = const IconData(0xe231);
static const IconData border_top = const IconData(0xe232);
static const IconData border_vertical = const IconData(0xe233);
static const IconData branding_watermark = const IconData(0xe06b);
static const IconData brightness_1 = const IconData(0xe3a6);
static const IconData brightness_2 = const IconData(0xe3a7);
static const IconData brightness_3 = const IconData(0xe3a8);
static const IconData brightness_4 = const IconData(0xe3a9);
static const IconData brightness_5 = const IconData(0xe3aa);
static const IconData brightness_6 = const IconData(0xe3ab);
static const IconData brightness_7 = const IconData(0xe3ac);
static const IconData brightness_auto = const IconData(0xe1ab);
static const IconData brightness_high = const IconData(0xe1ac);
static const IconData brightness_low = const IconData(0xe1ad);
static const IconData brightness_medium = const IconData(0xe1ae);
static const IconData broken_image = const IconData(0xe3ad);
static const IconData brush = const IconData(0xe3ae);
static const IconData bubble_chart = const IconData(0xe6dd);
static const IconData bug_report = const IconData(0xe868);
static const IconData build = const IconData(0xe869);
static const IconData burst_mode = const IconData(0xe43c);
static const IconData business = const IconData(0xe0af);
static const IconData business_center = const IconData(0xeb3f);
static const IconData cached = const IconData(0xe86a);
static const IconData cake = const IconData(0xe7e9);
static const IconData call = const IconData(0xe0b0);
static const IconData call_end = const IconData(0xe0b1);
static const IconData call_made = const IconData(0xe0b2);
static const IconData call_merge = const IconData(0xe0b3);
static const IconData call_missed = const IconData(0xe0b4);
static const IconData call_missed_outgoing = const IconData(0xe0e4);
static const IconData call_received = const IconData(0xe0b5);
static const IconData call_split = const IconData(0xe0b6);
static const IconData call_to_action = const IconData(0xe06c);
static const IconData camera = const IconData(0xe3af);
static const IconData camera_alt = const IconData(0xe3b0);
static const IconData camera_enhance = const IconData(0xe8fc);
static const IconData camera_front = const IconData(0xe3b1);
static const IconData camera_rear = const IconData(0xe3b2);
static const IconData camera_roll = const IconData(0xe3b3);
static const IconData cancel = const IconData(0xe5c9);
static const IconData card_giftcard = const IconData(0xe8f6);
static const IconData card_membership = const IconData(0xe8f7);
static const IconData card_travel = const IconData(0xe8f8);
static const IconData casino = const IconData(0xeb40);
static const IconData cast = const IconData(0xe307);
static const IconData cast_connected = const IconData(0xe308);
static const IconData center_focus_strong = const IconData(0xe3b4);
static const IconData center_focus_weak = const IconData(0xe3b5);
static const IconData change_history = const IconData(0xe86b);
static const IconData chat = const IconData(0xe0b7);
static const IconData chat_bubble = const IconData(0xe0ca);
static const IconData chat_bubble_outline = const IconData(0xe0cb);
static const IconData check = const IconData(0xe5ca);
static const IconData check_box = const IconData(0xe834);
static const IconData check_box_outline_blank = const IconData(0xe835);
static const IconData check_circle = const IconData(0xe86c);
static const IconData chevron_left = const IconData(0xe5cb);
static const IconData chevron_right = const IconData(0xe5cc);
static const IconData child_care = const IconData(0xeb41);
static const IconData child_friendly = const IconData(0xeb42);
static const IconData chrome_reader_mode = const IconData(0xe86d);
static const IconData class_ = const IconData(0xe86e); // class is a reserved word in Dart.
static const IconData clear = const IconData(0xe14c);
static const IconData clear_all = const IconData(0xe0b8);
static const IconData close = const IconData(0xe5cd);
static const IconData closed_caption = const IconData(0xe01c);
static const IconData cloud = const IconData(0xe2bd);
static const IconData cloud_circle = const IconData(0xe2be);
static const IconData cloud_done = const IconData(0xe2bf);
static const IconData cloud_download = const IconData(0xe2c0);
static const IconData cloud_off = const IconData(0xe2c1);
static const IconData cloud_queue = const IconData(0xe2c2);
static const IconData cloud_upload = const IconData(0xe2c3);
static const IconData code = const IconData(0xe86f);
static const IconData collections = const IconData(0xe3b6);
static const IconData collections_bookmark = const IconData(0xe431);
static const IconData color_lens = const IconData(0xe3b7);
static const IconData colorize = const IconData(0xe3b8);
static const IconData comment = const IconData(0xe0b9);
static const IconData compare = const IconData(0xe3b9);
static const IconData compare_arrows = const IconData(0xe915);
static const IconData computer = const IconData(0xe30a);
static const IconData confirmation_number = const IconData(0xe638);
static const IconData contact_mail = const IconData(0xe0d0);
static const IconData contact_phone = const IconData(0xe0cf);
static const IconData contacts = const IconData(0xe0ba);
static const IconData content_copy = const IconData(0xe14d);
static const IconData content_cut = const IconData(0xe14e);
static const IconData content_paste = const IconData(0xe14f);
static const IconData control_point = const IconData(0xe3ba);
static const IconData control_point_duplicate = const IconData(0xe3bb);
static const IconData copyright = const IconData(0xe90c);
static const IconData create = const IconData(0xe150);
static const IconData create_const_folder = const IconData(0xe2cc);
static const IconData credit_card = const IconData(0xe870);
static const IconData crop = const IconData(0xe3be);
static const IconData crop_16_9 = const IconData(0xe3bc);
static const IconData crop_3_2 = const IconData(0xe3bd);
static const IconData crop_5_4 = const IconData(0xe3bf);
static const IconData crop_7_5 = const IconData(0xe3c0);
static const IconData crop_din = const IconData(0xe3c1);
static const IconData crop_free = const IconData(0xe3c2);
static const IconData crop_landscape = const IconData(0xe3c3);
static const IconData crop_original = const IconData(0xe3c4);
static const IconData crop_portrait = const IconData(0xe3c5);
static const IconData crop_rotate = const IconData(0xe437);
static const IconData crop_square = const IconData(0xe3c6);
static const IconData dashboard = const IconData(0xe871);
static const IconData data_usage = const IconData(0xe1af);
static const IconData date_range = const IconData(0xe916);
static const IconData dehaze = const IconData(0xe3c7);
static const IconData delete = const IconData(0xe872);
static const IconData delete_forever = const IconData(0xe92b);
static const IconData delete_sweep = const IconData(0xe16c);
static const IconData description = const IconData(0xe873);
static const IconData desktop_mac = const IconData(0xe30b);
static const IconData desktop_windows = const IconData(0xe30c);
static const IconData details = const IconData(0xe3c8);
static const IconData developer_board = const IconData(0xe30d);
static const IconData developer_mode = const IconData(0xe1b0);
static const IconData device_hub = const IconData(0xe335);
static const IconData devices = const IconData(0xe1b1);
static const IconData devices_other = const IconData(0xe337);
static const IconData dialer_sip = const IconData(0xe0bb);
static const IconData dialpad = const IconData(0xe0bc);
static const IconData directions = const IconData(0xe52e);
static const IconData directions_bike = const IconData(0xe52f);
static const IconData directions_boat = const IconData(0xe532);
static const IconData directions_bus = const IconData(0xe530);
static const IconData directions_car = const IconData(0xe531);
static const IconData directions_railway = const IconData(0xe534);
static const IconData directions_run = const IconData(0xe566);
static const IconData directions_subway = const IconData(0xe533);
static const IconData directions_transit = const IconData(0xe535);
static const IconData directions_walk = const IconData(0xe536);
static const IconData disc_full = const IconData(0xe610);
static const IconData dns = const IconData(0xe875);
static const IconData do_not_disturb = const IconData(0xe612);
static const IconData do_not_disturb_alt = const IconData(0xe611);
static const IconData do_not_disturb_off = const IconData(0xe643);
static const IconData do_not_disturb_on = const IconData(0xe644);
static const IconData dock = const IconData(0xe30e);
static const IconData domain = const IconData(0xe7ee);
static const IconData done = const IconData(0xe876);
static const IconData done_all = const IconData(0xe877);
static const IconData donut_large = const IconData(0xe917);
static const IconData donut_small = const IconData(0xe918);
static const IconData drafts = const IconData(0xe151);
static const IconData drag_handle = const IconData(0xe25d);
static const IconData drive_eta = const IconData(0xe613);
static const IconData dvr = const IconData(0xe1b2);
static const IconData edit = const IconData(0xe3c9);
static const IconData edit_location = const IconData(0xe568);
static const IconData eject = const IconData(0xe8fb);
static const IconData email = const IconData(0xe0be);
static const IconData enhanced_encryption = const IconData(0xe63f);
static const IconData equalizer = const IconData(0xe01d);
static const IconData error = const IconData(0xe000);
static const IconData error_outline = const IconData(0xe001);
static const IconData euro_symbol = const IconData(0xe926);
static const IconData ev_station = const IconData(0xe56d);
static const IconData event = const IconData(0xe878);
static const IconData event_available = const IconData(0xe614);
static const IconData event_busy = const IconData(0xe615);
static const IconData event_note = const IconData(0xe616);
static const IconData event_seat = const IconData(0xe903);
static const IconData exit_to_app = const IconData(0xe879);
static const IconData expand_less = const IconData(0xe5ce);
static const IconData expand_more = const IconData(0xe5cf);
static const IconData explicit = const IconData(0xe01e);
static const IconData explore = const IconData(0xe87a);
static const IconData exposure = const IconData(0xe3ca);
static const IconData exposure_neg_1 = const IconData(0xe3cb);
static const IconData exposure_neg_2 = const IconData(0xe3cc);
static const IconData exposure_plus_1 = const IconData(0xe3cd);
static const IconData exposure_plus_2 = const IconData(0xe3ce);
static const IconData exposure_zero = const IconData(0xe3cf);
static const IconData extension = const IconData(0xe87b);
static const IconData face = const IconData(0xe87c);
static const IconData fast_forward = const IconData(0xe01f);
static const IconData fast_rewind = const IconData(0xe020);
static const IconData favorite = const IconData(0xe87d);
static const IconData favorite_border = const IconData(0xe87e);
static const IconData featured_play_list = const IconData(0xe06d);
static const IconData featured_video = const IconData(0xe06e);
static const IconData feedback = const IconData(0xe87f);
static const IconData fiber_dvr = const IconData(0xe05d);
static const IconData fiber_manual_record = const IconData(0xe061);
static const IconData fiber_const = const IconData(0xe05e);
static const IconData fiber_pin = const IconData(0xe06a);
static const IconData fiber_smart_record = const IconData(0xe062);
static const IconData file_download = const IconData(0xe2c4);
static const IconData file_upload = const IconData(0xe2c6);
static const IconData filter = const IconData(0xe3d3);
static const IconData filter_1 = const IconData(0xe3d0);
static const IconData filter_2 = const IconData(0xe3d1);
static const IconData filter_3 = const IconData(0xe3d2);
static const IconData filter_4 = const IconData(0xe3d4);
static const IconData filter_5 = const IconData(0xe3d5);
static const IconData filter_6 = const IconData(0xe3d6);
static const IconData filter_7 = const IconData(0xe3d7);
static const IconData filter_8 = const IconData(0xe3d8);
static const IconData filter_9 = const IconData(0xe3d9);
static const IconData filter_9_plus = const IconData(0xe3da);
static const IconData filter_b_and_w = const IconData(0xe3db);
static const IconData filter_center_focus = const IconData(0xe3dc);
static const IconData filter_drama = const IconData(0xe3dd);
static const IconData filter_frames = const IconData(0xe3de);
static const IconData filter_hdr = const IconData(0xe3df);
static const IconData filter_list = const IconData(0xe152);
static const IconData filter_none = const IconData(0xe3e0);
static const IconData filter_tilt_shift = const IconData(0xe3e2);
static const IconData filter_vintage = const IconData(0xe3e3);
static const IconData find_in_page = const IconData(0xe880);
static const IconData find_replace = const IconData(0xe881);
static const IconData fingerprint = const IconData(0xe90d);
static const IconData first_page = const IconData(0xe5dc);
static const IconData fitness_center = const IconData(0xeb43);
static const IconData flag = const IconData(0xe153);
static const IconData flare = const IconData(0xe3e4);
static const IconData flash_auto = const IconData(0xe3e5);
static const IconData flash_off = const IconData(0xe3e6);
static const IconData flash_on = const IconData(0xe3e7);
static const IconData flight = const IconData(0xe539);
static const IconData flight_land = const IconData(0xe904);
static const IconData flight_takeoff = const IconData(0xe905);
static const IconData flip = const IconData(0xe3e8);
static const IconData flip_to_back = const IconData(0xe882);
static const IconData flip_to_front = const IconData(0xe883);
static const IconData folder = const IconData(0xe2c7);
static const IconData folder_open = const IconData(0xe2c8);
static const IconData folder_shared = const IconData(0xe2c9);
static const IconData folder_special = const IconData(0xe617);
static const IconData font_download = const IconData(0xe167);
static const IconData format_align_center = const IconData(0xe234);
static const IconData format_align_justify = const IconData(0xe235);
static const IconData format_align_left = const IconData(0xe236);
static const IconData format_align_right = const IconData(0xe237);
static const IconData format_bold = const IconData(0xe238);
static const IconData format_clear = const IconData(0xe239);
static const IconData format_color_fill = const IconData(0xe23a);
static const IconData format_color_reset = const IconData(0xe23b);
static const IconData format_color_text = const IconData(0xe23c);
static const IconData format_indent_decrease = const IconData(0xe23d);
static const IconData format_indent_increase = const IconData(0xe23e);
static const IconData format_italic = const IconData(0xe23f);
static const IconData format_line_spacing = const IconData(0xe240);
static const IconData format_list_bulleted = const IconData(0xe241);
static const IconData format_list_numbered = const IconData(0xe242);
static const IconData format_paint = const IconData(0xe243);
static const IconData format_quote = const IconData(0xe244);
static const IconData format_shapes = const IconData(0xe25e);
static const IconData format_size = const IconData(0xe245);
static const IconData format_strikethrough = const IconData(0xe246);
static const IconData format_textdirection_l_to_r = const IconData(0xe247);
static const IconData format_textdirection_r_to_l = const IconData(0xe248);
static const IconData format_underlined = const IconData(0xe249);
static const IconData forum = const IconData(0xe0bf);
static const IconData forward = const IconData(0xe154);
static const IconData forward_10 = const IconData(0xe056);
static const IconData forward_30 = const IconData(0xe057);
static const IconData forward_5 = const IconData(0xe058);
static const IconData free_breakfast = const IconData(0xeb44);
static const IconData fullscreen = const IconData(0xe5d0);
static const IconData fullscreen_exit = const IconData(0xe5d1);
static const IconData functions = const IconData(0xe24a);
static const IconData g_translate = const IconData(0xe927);
static const IconData gamepad = const IconData(0xe30f);
static const IconData games = const IconData(0xe021);
static const IconData gavel = const IconData(0xe90e);
static const IconData gesture = const IconData(0xe155);
static const IconData get_app = const IconData(0xe884);
static const IconData gif = const IconData(0xe908);
static const IconData golf_course = const IconData(0xeb45);
static const IconData gps_fixed = const IconData(0xe1b3);
static const IconData gps_not_fixed = const IconData(0xe1b4);
static const IconData gps_off = const IconData(0xe1b5);
static const IconData grade = const IconData(0xe885);
static const IconData gradient = const IconData(0xe3e9);
static const IconData grain = const IconData(0xe3ea);
static const IconData graphic_eq = const IconData(0xe1b8);
static const IconData grid_off = const IconData(0xe3eb);
static const IconData grid_on = const IconData(0xe3ec);
static const IconData group = const IconData(0xe7ef);
static const IconData group_add = const IconData(0xe7f0);
static const IconData group_work = const IconData(0xe886);
static const IconData hd = const IconData(0xe052);
static const IconData hdr_off = const IconData(0xe3ed);
static const IconData hdr_on = const IconData(0xe3ee);
static const IconData hdr_strong = const IconData(0xe3f1);
static const IconData hdr_weak = const IconData(0xe3f2);
static const IconData headset = const IconData(0xe310);
static const IconData headset_mic = const IconData(0xe311);
static const IconData healing = const IconData(0xe3f3);
static const IconData hearing = const IconData(0xe023);
static const IconData help = const IconData(0xe887);
static const IconData help_outline = const IconData(0xe8fd);
static const IconData high_quality = const IconData(0xe024);
static const IconData highlight = const IconData(0xe25f);
static const IconData highlight_off = const IconData(0xe888);
static const IconData history = const IconData(0xe889);
static const IconData home = const IconData(0xe88a);
static const IconData hot_tub = const IconData(0xeb46);
static const IconData hotel = const IconData(0xe53a);
static const IconData hourglass_empty = const IconData(0xe88b);
static const IconData hourglass_full = const IconData(0xe88c);
static const IconData http = const IconData(0xe902);
static const IconData https = const IconData(0xe88d);
static const IconData image = const IconData(0xe3f4);
static const IconData image_aspect_ratio = const IconData(0xe3f5);
static const IconData import_contacts = const IconData(0xe0e0);
static const IconData import_export = const IconData(0xe0c3);
static const IconData important_devices = const IconData(0xe912);
static const IconData inbox = const IconData(0xe156);
static const IconData indeterminate_check_box = const IconData(0xe909);
static const IconData info = const IconData(0xe88e);
static const IconData info_outline = const IconData(0xe88f);
static const IconData input = const IconData(0xe890);
static const IconData insert_chart = const IconData(0xe24b);
static const IconData insert_comment = const IconData(0xe24c);
static const IconData insert_drive_file = const IconData(0xe24d);
static const IconData insert_emoticon = const IconData(0xe24e);
static const IconData insert_invitation = const IconData(0xe24f);
static const IconData insert_link = const IconData(0xe250);
static const IconData insert_photo = const IconData(0xe251);
static const IconData invert_colors = const IconData(0xe891);
static const IconData invert_colors_off = const IconData(0xe0c4);
static const IconData iso = const IconData(0xe3f6);
static const IconData keyboard = const IconData(0xe312);
static const IconData keyboard_arrow_down = const IconData(0xe313);
static const IconData keyboard_arrow_left = const IconData(0xe314);
static const IconData keyboard_arrow_right = const IconData(0xe315);
static const IconData keyboard_arrow_up = const IconData(0xe316);
static const IconData keyboard_backspace = const IconData(0xe317);
static const IconData keyboard_capslock = const IconData(0xe318);
static const IconData keyboard_hide = const IconData(0xe31a);
static const IconData keyboard_return = const IconData(0xe31b);
static const IconData keyboard_tab = const IconData(0xe31c);
static const IconData keyboard_voice = const IconData(0xe31d);
static const IconData kitchen = const IconData(0xeb47);
static const IconData label = const IconData(0xe892);
static const IconData label_outline = const IconData(0xe893);
static const IconData landscape = const IconData(0xe3f7);
static const IconData language = const IconData(0xe894);
static const IconData laptop = const IconData(0xe31e);
static const IconData laptop_chromebook = const IconData(0xe31f);
static const IconData laptop_mac = const IconData(0xe320);
static const IconData laptop_windows = const IconData(0xe321);
static const IconData last_page = const IconData(0xe5dd);
static const IconData launch = const IconData(0xe895);
static const IconData layers = const IconData(0xe53b);
static const IconData layers_clear = const IconData(0xe53c);
static const IconData leak_add = const IconData(0xe3f8);
static const IconData leak_remove = const IconData(0xe3f9);
static const IconData lens = const IconData(0xe3fa);
static const IconData library_add = const IconData(0xe02e);
static const IconData library_books = const IconData(0xe02f);
static const IconData library_music = const IconData(0xe030);
static const IconData lightbulb_outline = const IconData(0xe90f);
static const IconData line_style = const IconData(0xe919);
static const IconData line_weight = const IconData(0xe91a);
static const IconData linear_scale = const IconData(0xe260);
static const IconData link = const IconData(0xe157);
static const IconData linked_camera = const IconData(0xe438);
static const IconData list = const IconData(0xe896);
static const IconData live_help = const IconData(0xe0c6);
static const IconData live_tv = const IconData(0xe639);
static const IconData local_activity = const IconData(0xe53f);
static const IconData local_airport = const IconData(0xe53d);
static const IconData local_atm = const IconData(0xe53e);
static const IconData local_bar = const IconData(0xe540);
static const IconData local_cafe = const IconData(0xe541);
static const IconData local_car_wash = const IconData(0xe542);
static const IconData local_convenience_store = const IconData(0xe543);
static const IconData local_dining = const IconData(0xe556);
static const IconData local_drink = const IconData(0xe544);
static const IconData local_florist = const IconData(0xe545);
static const IconData local_gas_station = const IconData(0xe546);
static const IconData local_grocery_store = const IconData(0xe547);
static const IconData local_hospital = const IconData(0xe548);
static const IconData local_hotel = const IconData(0xe549);
static const IconData local_laundry_service = const IconData(0xe54a);
static const IconData local_library = const IconData(0xe54b);
static const IconData local_mall = const IconData(0xe54c);
static const IconData local_movies = const IconData(0xe54d);
static const IconData local_offer = const IconData(0xe54e);
static const IconData local_parking = const IconData(0xe54f);
static const IconData local_pharmacy = const IconData(0xe550);
static const IconData local_phone = const IconData(0xe551);
static const IconData local_pizza = const IconData(0xe552);
static const IconData local_play = const IconData(0xe553);
static const IconData local_post_office = const IconData(0xe554);
static const IconData local_printshop = const IconData(0xe555);
static const IconData local_see = const IconData(0xe557);
static const IconData local_shipping = const IconData(0xe558);
static const IconData local_taxi = const IconData(0xe559);
static const IconData location_city = const IconData(0xe7f1);
static const IconData location_disabled = const IconData(0xe1b6);
static const IconData location_off = const IconData(0xe0c7);
static const IconData location_on = const IconData(0xe0c8);
static const IconData location_searching = const IconData(0xe1b7);
static const IconData lock = const IconData(0xe897);
static const IconData lock_open = const IconData(0xe898);
static const IconData lock_outline = const IconData(0xe899);
static const IconData looks = const IconData(0xe3fc);
static const IconData looks_3 = const IconData(0xe3fb);
static const IconData looks_4 = const IconData(0xe3fd);
static const IconData looks_5 = const IconData(0xe3fe);
static const IconData looks_6 = const IconData(0xe3ff);
static const IconData looks_one = const IconData(0xe400);
static const IconData looks_two = const IconData(0xe401);
static const IconData loop = const IconData(0xe028);
static const IconData loupe = const IconData(0xe402);
static const IconData low_priority = const IconData(0xe16d);
static const IconData loyalty = const IconData(0xe89a);
static const IconData mail = const IconData(0xe158);
static const IconData mail_outline = const IconData(0xe0e1);
static const IconData map = const IconData(0xe55b);
static const IconData markunread = const IconData(0xe159);
static const IconData markunread_mailbox = const IconData(0xe89b);
static const IconData memory = const IconData(0xe322);
static const IconData menu = const IconData(0xe5d2);
static const IconData merge_type = const IconData(0xe252);
static const IconData message = const IconData(0xe0c9);
static const IconData mic = const IconData(0xe029);
static const IconData mic_none = const IconData(0xe02a);
static const IconData mic_off = const IconData(0xe02b);
static const IconData mms = const IconData(0xe618);
static const IconData mode_comment = const IconData(0xe253);
static const IconData mode_edit = const IconData(0xe254);
static const IconData monetization_on = const IconData(0xe263);
static const IconData money_off = const IconData(0xe25c);
static const IconData monochrome_photos = const IconData(0xe403);
static const IconData mood = const IconData(0xe7f2);
static const IconData mood_bad = const IconData(0xe7f3);
static const IconData more = const IconData(0xe619);
static const IconData more_horiz = const IconData(0xe5d3);
static const IconData more_vert = const IconData(0xe5d4);
static const IconData motorcycle = const IconData(0xe91b);
static const IconData mouse = const IconData(0xe323);
static const IconData move_to_inbox = const IconData(0xe168);
static const IconData movie = const IconData(0xe02c);
static const IconData movie_creation = const IconData(0xe404);
static const IconData movie_filter = const IconData(0xe43a);
static const IconData multiline_chart = const IconData(0xe6df);
static const IconData music_note = const IconData(0xe405);
static const IconData music_video = const IconData(0xe063);
static const IconData my_location = const IconData(0xe55c);
static const IconData nature = const IconData(0xe406);
static const IconData nature_people = const IconData(0xe407);
static const IconData navigate_before = const IconData(0xe408);
static const IconData navigate_next = const IconData(0xe409);
static const IconData navigation = const IconData(0xe55d);
static const IconData near_me = const IconData(0xe569);
static const IconData network_cell = const IconData(0xe1b9);
static const IconData network_check = const IconData(0xe640);
static const IconData network_locked = const IconData(0xe61a);
static const IconData network_wifi = const IconData(0xe1ba);
static const IconData const_releases = const IconData(0xe031);
static const IconData next_week = const IconData(0xe16a);
static const IconData nfc = const IconData(0xe1bb);
static const IconData no_encryption = const IconData(0xe641);
static const IconData no_sim = const IconData(0xe0cc);
static const IconData not_interested = const IconData(0xe033);
static const IconData note = const IconData(0xe06f);
static const IconData note_add = const IconData(0xe89c);
static const IconData notifications = const IconData(0xe7f4);
static const IconData notifications_active = const IconData(0xe7f7);
static const IconData notifications_none = const IconData(0xe7f5);
static const IconData notifications_off = const IconData(0xe7f6);
static const IconData notifications_paused = const IconData(0xe7f8);
static const IconData offline_pin = const IconData(0xe90a);
static const IconData ondemand_video = const IconData(0xe63a);
static const IconData opacity = const IconData(0xe91c);
static const IconData open_in_browser = const IconData(0xe89d);
static const IconData open_in_const = const IconData(0xe89e);
static const IconData open_with = const IconData(0xe89f);
static const IconData pages = const IconData(0xe7f9);
static const IconData pageview = const IconData(0xe8a0);
static const IconData palette = const IconData(0xe40a);
static const IconData pan_tool = const IconData(0xe925);
static const IconData panorama = const IconData(0xe40b);
static const IconData panorama_fish_eye = const IconData(0xe40c);
static const IconData panorama_horizontal = const IconData(0xe40d);
static const IconData panorama_vertical = const IconData(0xe40e);
static const IconData panorama_wide_angle = const IconData(0xe40f);
static const IconData party_mode = const IconData(0xe7fa);
static const IconData pause = const IconData(0xe034);
static const IconData pause_circle_filled = const IconData(0xe035);
static const IconData pause_circle_outline = const IconData(0xe036);
static const IconData payment = const IconData(0xe8a1);
static const IconData people = const IconData(0xe7fb);
static const IconData people_outline = const IconData(0xe7fc);
static const IconData perm_camera_mic = const IconData(0xe8a2);
static const IconData perm_contact_calendar = const IconData(0xe8a3);
static const IconData perm_data_setting = const IconData(0xe8a4);
static const IconData perm_device_information = const IconData(0xe8a5);
static const IconData perm_identity = const IconData(0xe8a6);
static const IconData perm_media = const IconData(0xe8a7);
static const IconData perm_phone_msg = const IconData(0xe8a8);
static const IconData perm_scan_wifi = const IconData(0xe8a9);
static const IconData person = const IconData(0xe7fd);
static const IconData person_add = const IconData(0xe7fe);
static const IconData person_outline = const IconData(0xe7ff);
static const IconData person_pin = const IconData(0xe55a);
static const IconData person_pin_circle = const IconData(0xe56a);
static const IconData personal_video = const IconData(0xe63b);
static const IconData pets = const IconData(0xe91d);
static const IconData phone = const IconData(0xe0cd);
static const IconData phone_android = const IconData(0xe324);
static const IconData phone_bluetooth_speaker = const IconData(0xe61b);
static const IconData phone_forwarded = const IconData(0xe61c);
static const IconData phone_in_talk = const IconData(0xe61d);
static const IconData phone_iphone = const IconData(0xe325);
static const IconData phone_locked = const IconData(0xe61e);
static const IconData phone_missed = const IconData(0xe61f);
static const IconData phone_paused = const IconData(0xe620);
static const IconData phonelink = const IconData(0xe326);
static const IconData phonelink_erase = const IconData(0xe0db);
static const IconData phonelink_lock = const IconData(0xe0dc);
static const IconData phonelink_off = const IconData(0xe327);
static const IconData phonelink_ring = const IconData(0xe0dd);
static const IconData phonelink_setup = const IconData(0xe0de);
static const IconData photo = const IconData(0xe410);
static const IconData photo_album = const IconData(0xe411);
static const IconData photo_camera = const IconData(0xe412);
static const IconData photo_filter = const IconData(0xe43b);
static const IconData photo_library = const IconData(0xe413);
static const IconData photo_size_select_actual = const IconData(0xe432);
static const IconData photo_size_select_large = const IconData(0xe433);
static const IconData photo_size_select_small = const IconData(0xe434);
static const IconData picture_as_pdf = const IconData(0xe415);
static const IconData picture_in_picture = const IconData(0xe8aa);
static const IconData picture_in_picture_alt = const IconData(0xe911);
static const IconData pie_chart = const IconData(0xe6c4);
static const IconData pie_chart_outlined = const IconData(0xe6c5);
static const IconData pin_drop = const IconData(0xe55e);
static const IconData place = const IconData(0xe55f);
static const IconData play_arrow = const IconData(0xe037);
static const IconData play_circle_filled = const IconData(0xe038);
static const IconData play_circle_outline = const IconData(0xe039);
static const IconData play_for_work = const IconData(0xe906);
static const IconData playlist_add = const IconData(0xe03b);
static const IconData playlist_add_check = const IconData(0xe065);
static const IconData playlist_play = const IconData(0xe05f);
static const IconData plus_one = const IconData(0xe800);
static const IconData poll = const IconData(0xe801);
static const IconData polymer = const IconData(0xe8ab);
static const IconData pool = const IconData(0xeb48);
static const IconData portable_wifi_off = const IconData(0xe0ce);
static const IconData portrait = const IconData(0xe416);
static const IconData power = const IconData(0xe63c);
static const IconData power_input = const IconData(0xe336);
static const IconData power_settings_const = const IconData(0xe8ac);
static const IconData pregnant_woman = const IconData(0xe91e);
static const IconData present_to_all = const IconData(0xe0df);
static const IconData print = const IconData(0xe8ad);
static const IconData priority_high = const IconData(0xe645);
static const IconData public = const IconData(0xe80b);
static const IconData publish = const IconData(0xe255);
static const IconData query_builder = const IconData(0xe8ae);
static const IconData question_answer = const IconData(0xe8af);
static const IconData queue = const IconData(0xe03c);
static const IconData queue_music = const IconData(0xe03d);
static const IconData queue_play_next = const IconData(0xe066);
static const IconData radio = const IconData(0xe03e);
static const IconData radio_button_checked = const IconData(0xe837);
static const IconData radio_button_unchecked = const IconData(0xe836);
static const IconData rate_review = const IconData(0xe560);
static const IconData receipt = const IconData(0xe8b0);
static const IconData recent_actors = const IconData(0xe03f);
static const IconData record_voice_over = const IconData(0xe91f);
static const IconData redeem = const IconData(0xe8b1);
static const IconData redo = const IconData(0xe15a);
static const IconData refresh = const IconData(0xe5d5);
static const IconData remove = const IconData(0xe15b);
static const IconData remove_circle = const IconData(0xe15c);
static const IconData remove_circle_outline = const IconData(0xe15d);
static const IconData remove_from_queue = const IconData(0xe067);
static const IconData remove_red_eye = const IconData(0xe417);
static const IconData remove_shopping_cart = const IconData(0xe928);
static const IconData reorder = const IconData(0xe8fe);
static const IconData repeat = const IconData(0xe040);
static const IconData repeat_one = const IconData(0xe041);
static const IconData replay = const IconData(0xe042);
static const IconData replay_10 = const IconData(0xe059);
static const IconData replay_30 = const IconData(0xe05a);
static const IconData replay_5 = const IconData(0xe05b);
static const IconData reply = const IconData(0xe15e);
static const IconData reply_all = const IconData(0xe15f);
static const IconData report = const IconData(0xe160);
static const IconData report_problem = const IconData(0xe8b2);
static const IconData restaurant = const IconData(0xe56c);
static const IconData restaurant_menu = const IconData(0xe561);
static const IconData restore = const IconData(0xe8b3);
static const IconData restore_page = const IconData(0xe929);
static const IconData ring_volume = const IconData(0xe0d1);
static const IconData room = const IconData(0xe8b4);
static const IconData room_service = const IconData(0xeb49);
static const IconData rotate_90_degrees_ccw = const IconData(0xe418);
static const IconData rotate_left = const IconData(0xe419);
static const IconData rotate_right = const IconData(0xe41a);
static const IconData rounded_corner = const IconData(0xe920);
static const IconData router = const IconData(0xe328);
static const IconData rowing = const IconData(0xe921);
static const IconData rss_feed = const IconData(0xe0e5);
static const IconData rv_hookup = const IconData(0xe642);
static const IconData satellite = const IconData(0xe562);
static const IconData save = const IconData(0xe161);
static const IconData scanner = const IconData(0xe329);
static const IconData schedule = const IconData(0xe8b5);
static const IconData school = const IconData(0xe80c);
static const IconData screen_lock_landscape = const IconData(0xe1be);
static const IconData screen_lock_portrait = const IconData(0xe1bf);
static const IconData screen_lock_rotation = const IconData(0xe1c0);
static const IconData screen_rotation = const IconData(0xe1c1);
static const IconData screen_share = const IconData(0xe0e2);
static const IconData sd_card = const IconData(0xe623);
static const IconData sd_storage = const IconData(0xe1c2);
static const IconData search = const IconData(0xe8b6);
static const IconData security = const IconData(0xe32a);
static const IconData select_all = const IconData(0xe162);
static const IconData send = const IconData(0xe163);
static const IconData sentiment_dissatisfied = const IconData(0xe811);
static const IconData sentiment_neutral = const IconData(0xe812);
static const IconData sentiment_satisfied = const IconData(0xe813);
static const IconData sentiment_very_dissatisfied = const IconData(0xe814);
static const IconData sentiment_very_satisfied = const IconData(0xe815);
static const IconData settings = const IconData(0xe8b8);
static const IconData settings_applications = const IconData(0xe8b9);
static const IconData settings_backup_restore = const IconData(0xe8ba);
static const IconData settings_bluetooth = const IconData(0xe8bb);
static const IconData settings_brightness = const IconData(0xe8bd);
static const IconData settings_cell = const IconData(0xe8bc);
static const IconData settings_ethernet = const IconData(0xe8be);
static const IconData settings_input_antenna = const IconData(0xe8bf);
static const IconData settings_input_component = const IconData(0xe8c0);
static const IconData settings_input_composite = const IconData(0xe8c1);
static const IconData settings_input_hdmi = const IconData(0xe8c2);
static const IconData settings_input_svideo = const IconData(0xe8c3);
static const IconData settings_overscan = const IconData(0xe8c4);
static const IconData settings_phone = const IconData(0xe8c5);
static const IconData settings_power = const IconData(0xe8c6);
static const IconData settings_remote = const IconData(0xe8c7);
static const IconData settings_system_daydream = const IconData(0xe1c3);
static const IconData settings_voice = const IconData(0xe8c8);
static const IconData share = const IconData(0xe80d);
static const IconData shop = const IconData(0xe8c9);
static const IconData shop_two = const IconData(0xe8ca);
static const IconData shopping_basket = const IconData(0xe8cb);
static const IconData shopping_cart = const IconData(0xe8cc);
static const IconData short_text = const IconData(0xe261);
static const IconData show_chart = const IconData(0xe6e1);
static const IconData shuffle = const IconData(0xe043);
static const IconData signal_cellular_4_bar = const IconData(0xe1c8);
static const IconData signal_cellular_connected_no_internet_4_bar = const IconData(0xe1cd);
static const IconData signal_cellular_no_sim = const IconData(0xe1ce);
static const IconData signal_cellular_null = const IconData(0xe1cf);
static const IconData signal_cellular_off = const IconData(0xe1d0);
static const IconData signal_wifi_4_bar = const IconData(0xe1d8);
static const IconData signal_wifi_4_bar_lock = const IconData(0xe1d9);
static const IconData signal_wifi_off = const IconData(0xe1da);
static const IconData sim_card = const IconData(0xe32b);
static const IconData sim_card_alert = const IconData(0xe624);
static const IconData skip_next = const IconData(0xe044);
static const IconData skip_previous = const IconData(0xe045);
static const IconData slideshow = const IconData(0xe41b);
static const IconData slow_motion_video = const IconData(0xe068);
static const IconData smartphone = const IconData(0xe32c);
static const IconData smoke_free = const IconData(0xeb4a);
static const IconData smoking_rooms = const IconData(0xeb4b);
static const IconData sms = const IconData(0xe625);
static const IconData sms_failed = const IconData(0xe626);
static const IconData snooze = const IconData(0xe046);
static const IconData sort = const IconData(0xe164);
static const IconData sort_by_alpha = const IconData(0xe053);
static const IconData spa = const IconData(0xeb4c);
static const IconData space_bar = const IconData(0xe256);
static const IconData speaker = const IconData(0xe32d);
static const IconData speaker_group = const IconData(0xe32e);
static const IconData speaker_notes = const IconData(0xe8cd);
static const IconData speaker_notes_off = const IconData(0xe92a);
static const IconData speaker_phone = const IconData(0xe0d2);
static const IconData spellcheck = const IconData(0xe8ce);
static const IconData star = const IconData(0xe838);
static const IconData star_border = const IconData(0xe83a);
static const IconData star_half = const IconData(0xe839);
static const IconData stars = const IconData(0xe8d0);
static const IconData stay_current_landscape = const IconData(0xe0d3);
static const IconData stay_current_portrait = const IconData(0xe0d4);
static const IconData stay_primary_landscape = const IconData(0xe0d5);
static const IconData stay_primary_portrait = const IconData(0xe0d6);
static const IconData stop = const IconData(0xe047);
static const IconData stop_screen_share = const IconData(0xe0e3);
static const IconData storage = const IconData(0xe1db);
static const IconData store = const IconData(0xe8d1);
static const IconData store_mall_directory = const IconData(0xe563);
static const IconData straighten = const IconData(0xe41c);
static const IconData streetview = const IconData(0xe56e);
static const IconData strikethrough_s = const IconData(0xe257);
static const IconData style = const IconData(0xe41d);
static const IconData subdirectory_arrow_left = const IconData(0xe5d9);
static const IconData subdirectory_arrow_right = const IconData(0xe5da);
static const IconData subject = const IconData(0xe8d2);
static const IconData subscriptions = const IconData(0xe064);
static const IconData subtitles = const IconData(0xe048);
static const IconData subway = const IconData(0xe56f);
static const IconData supervisor_account = const IconData(0xe8d3);
static const IconData surround_sound = const IconData(0xe049);
static const IconData swap_calls = const IconData(0xe0d7);
static const IconData swap_horiz = const IconData(0xe8d4);
static const IconData swap_vert = const IconData(0xe8d5);
static const IconData swap_vertical_circle = const IconData(0xe8d6);
static const IconData switch_camera = const IconData(0xe41e);
static const IconData switch_video = const IconData(0xe41f);
static const IconData sync = const IconData(0xe627);
static const IconData sync_disabled = const IconData(0xe628);
static const IconData sync_problem = const IconData(0xe629);
static const IconData system_update = const IconData(0xe62a);
static const IconData system_update_alt = const IconData(0xe8d7);
static const IconData tab = const IconData(0xe8d8);
static const IconData tab_unselected = const IconData(0xe8d9);
static const IconData tablet = const IconData(0xe32f);
static const IconData tablet_android = const IconData(0xe330);
static const IconData tablet_mac = const IconData(0xe331);
static const IconData tag_faces = const IconData(0xe420);
static const IconData tap_and_play = const IconData(0xe62b);
static const IconData terrain = const IconData(0xe564);
static const IconData text_fields = const IconData(0xe262);
static const IconData text_format = const IconData(0xe165);
static const IconData textsms = const IconData(0xe0d8);
static const IconData texture = const IconData(0xe421);
static const IconData theaters = const IconData(0xe8da);
static const IconData thumb_down = const IconData(0xe8db);
static const IconData thumb_up = const IconData(0xe8dc);
static const IconData thumbs_up_down = const IconData(0xe8dd);
static const IconData time_to_leave = const IconData(0xe62c);
static const IconData timelapse = const IconData(0xe422);
static const IconData timeline = const IconData(0xe922);
static const IconData timer = const IconData(0xe425);
static const IconData timer_10 = const IconData(0xe423);
static const IconData timer_3 = const IconData(0xe424);
static const IconData timer_off = const IconData(0xe426);
static const IconData title = const IconData(0xe264);
static const IconData toc = const IconData(0xe8de);
static const IconData today = const IconData(0xe8df);
static const IconData toll = const IconData(0xe8e0);
static const IconData tonality = const IconData(0xe427);
static const IconData touch_app = const IconData(0xe913);
static const IconData toys = const IconData(0xe332);
static const IconData track_changes = const IconData(0xe8e1);
static const IconData traffic = const IconData(0xe565);
static const IconData train = const IconData(0xe570);
static const IconData tram = const IconData(0xe571);
static const IconData transfer_within_a_station = const IconData(0xe572);
static const IconData transform = const IconData(0xe428);
static const IconData translate = const IconData(0xe8e2);
static const IconData trending_down = const IconData(0xe8e3);
static const IconData trending_flat = const IconData(0xe8e4);
static const IconData trending_up = const IconData(0xe8e5);
static const IconData tune = const IconData(0xe429);
static const IconData turned_in = const IconData(0xe8e6);
static const IconData turned_in_not = const IconData(0xe8e7);
static const IconData tv = const IconData(0xe333);
static const IconData unarchive = const IconData(0xe169);
static const IconData undo = const IconData(0xe166);
static const IconData unfold_less = const IconData(0xe5d6);
static const IconData unfold_more = const IconData(0xe5d7);
static const IconData update = const IconData(0xe923);
static const IconData usb = const IconData(0xe1e0);
static const IconData verified_user = const IconData(0xe8e8);
static const IconData vertical_align_bottom = const IconData(0xe258);
static const IconData vertical_align_center = const IconData(0xe259);
static const IconData vertical_align_top = const IconData(0xe25a);
static const IconData vibration = const IconData(0xe62d);
static const IconData video_call = const IconData(0xe070);
static const IconData video_label = const IconData(0xe071);
static const IconData video_library = const IconData(0xe04a);
static const IconData videocam = const IconData(0xe04b);
static const IconData videocam_off = const IconData(0xe04c);
static const IconData videogame_asset = const IconData(0xe338);
static const IconData view_agenda = const IconData(0xe8e9);
static const IconData view_array = const IconData(0xe8ea);
static const IconData view_carousel = const IconData(0xe8eb);
static const IconData view_column = const IconData(0xe8ec);
static const IconData view_comfy = const IconData(0xe42a);
static const IconData view_compact = const IconData(0xe42b);
static const IconData view_day = const IconData(0xe8ed);
static const IconData view_headline = const IconData(0xe8ee);
static const IconData view_list = const IconData(0xe8ef);
static const IconData view_module = const IconData(0xe8f0);
static const IconData view_quilt = const IconData(0xe8f1);
static const IconData view_stream = const IconData(0xe8f2);
static const IconData view_week = const IconData(0xe8f3);
static const IconData vignette = const IconData(0xe435);
static const IconData visibility = const IconData(0xe8f4);
static const IconData visibility_off = const IconData(0xe8f5);
static const IconData voice_chat = const IconData(0xe62e);
static const IconData voicemail = const IconData(0xe0d9);
static const IconData volume_down = const IconData(0xe04d);
static const IconData volume_mute = const IconData(0xe04e);
static const IconData volume_off = const IconData(0xe04f);
static const IconData volume_up = const IconData(0xe050);
static const IconData vpn_key = const IconData(0xe0da);
static const IconData vpn_lock = const IconData(0xe62f);
static const IconData wallpaper = const IconData(0xe1bc);
static const IconData warning = const IconData(0xe002);
static const IconData watch = const IconData(0xe334);
static const IconData watch_later = const IconData(0xe924);
static const IconData wb_auto = const IconData(0xe42c);
static const IconData wb_cloudy = const IconData(0xe42d);
static const IconData wb_incandescent = const IconData(0xe42e);
static const IconData wb_iridescent = const IconData(0xe436);
static const IconData wb_sunny = const IconData(0xe430);
static const IconData wc = const IconData(0xe63d);
static const IconData web = const IconData(0xe051);
static const IconData web_asset = const IconData(0xe069);
static const IconData weekend = const IconData(0xe16b);
static const IconData whatshot = const IconData(0xe80e);
static const IconData widgets = const IconData(0xe1bd);
static const IconData wifi = const IconData(0xe63e);
static const IconData wifi_lock = const IconData(0xe1e1);
static const IconData wifi_tethering = const IconData(0xe1e2);
static const IconData work = const IconData(0xe8f9);
static const IconData wrap_text = const IconData(0xe25b);
static const IconData youtube_searched_for = const IconData(0xe8fa);
static const IconData zoom_in = const IconData(0xe8ff);
static const IconData zoom_out = const IconData(0xe900);
static const IconData zoom_out_map = const IconData(0xe56b);
}
......@@ -8,6 +8,7 @@ import 'package:flutter/widgets.dart';
import 'colors.dart';
import 'debug.dart';
import 'icon.dart';
import 'icons.dart';
import 'theme.dart';
export 'package:sky_services/editing/editing.mojom.dart' show KeyboardType;
......@@ -37,7 +38,7 @@ class Input extends StatefulComponent {
final KeyboardType keyboardType;
/// An icon to show adjacent to the input field.
final String icon;
final IconData icon;
/// Text to show above the input field.
final String labelText;
......@@ -195,7 +196,7 @@ class _InputState extends State<Input> {
child: new Icon(
icon: config.icon,
color: focused ? activeColor : Colors.black45,
size: config.isDense ? IconSize.s18 : IconSize.s24
size: config.isDense ? 18.0 : 24.0
)
),
new Flexible(child: child)
......
......@@ -8,6 +8,7 @@ import 'package:flutter/widgets.dart';
import 'divider.dart';
import 'icon.dart';
import 'icons.dart';
import 'icon_button.dart';
import 'icon_theme.dart';
import 'icon_theme_data.dart';
......@@ -101,7 +102,7 @@ class CheckedPopupMenuItem<T> extends PopupMenuItem<T> {
enabled: enabled,
child: new ListItem(
enabled: enabled,
left: new Icon(icon: checked ? 'action/done' : null),
left: new Icon(icon: checked ? Icons.done : null),
primary: child
)
);
......@@ -353,7 +354,7 @@ class _PopupMenuButtonState<T> extends State<PopupMenuButton<T>> {
Widget build(BuildContext context) {
if (config.child == null) {
return new IconButton(
icon: 'navigation/more_vert',
icon: Icons.more_vert,
tooltip: config.tooltip,
onPressed: () { showButtonMenu(context); }
);
......
......@@ -11,6 +11,7 @@ import 'package:flutter/widgets.dart';
import 'bottom_sheet.dart';
import 'constants.dart';
import 'drawer.dart';
import 'icons.dart';
import 'icon_button.dart';
import 'material.dart';
import 'snack_bar.dart';
......@@ -371,7 +372,7 @@ class ScaffoldState extends State<Scaffold> {
if (left == null) {
if (config.drawer != null) {
left = new IconButton(
icon: 'navigation/menu',
icon: Icons.menu,
onPressed: openDrawer,
tooltip: 'Open navigation menu' // TODO(ianh): Figure out how to localize this string
);
......@@ -379,7 +380,7 @@ class ScaffoldState extends State<Scaffold> {
_shouldShowBackArrow ??= Navigator.canPop(context);
if (_shouldShowBackArrow) {
left = new IconButton(
icon: 'navigation/arrow_back',
icon: Icons.arrow_back,
onPressed: () => Navigator.pop(context),
tooltip: 'Back' // TODO(ianh): Figure out how to localize this string
);
......
......@@ -11,6 +11,7 @@ import 'package:flutter/widgets.dart';
import 'colors.dart';
import 'icon.dart';
import 'icons.dart';
import 'icon_theme.dart';
import 'icon_theme_data.dart';
import 'ink_well.dart';
......@@ -291,7 +292,7 @@ class TabLabel {
const TabLabel({ this.text, this.icon, this.iconBuilder });
final String text;
final String icon;
final IconData icon;
final TabLabelIconBuilder iconBuilder;
}
......
......@@ -6,6 +6,7 @@ import 'package:flutter/widgets.dart';
import 'colors.dart';
import 'icon.dart';
import 'icons.dart';
import 'list.dart';
import 'list_item.dart';
import 'theme.dart';
......@@ -115,7 +116,7 @@ class _TwoLevelSublistState extends State<TwoLevelSublist> {
right: new RotationTransition(
turns: _iconTurns,
child: new Icon(
icon: 'navigation/expand_more',
icon: Icons.expand_more,
color: _iconColor.evaluate(_easeInAnimation)
)
)
......
......@@ -13,7 +13,6 @@ Future<int> assembleFlx({
Map manifestDescriptor: const {},
File snapshotFile: null,
String assetBasePath: flx.defaultAssetBasePath,
String materialAssetBasePath: flx.defaultMaterialAssetBasePath,
String outputPath: flx.defaultFlxOutputPath,
String privateKeyPath: flx.defaultPrivateKeyPath
}) async {
......@@ -21,7 +20,6 @@ Future<int> assembleFlx({
manifestDescriptor: manifestDescriptor,
snapshotFile: snapshotFile,
assetBasePath: assetBasePath,
materialAssetBasePath: materialAssetBasePath,
outputPath: outputPath,
privateKeyPath: privateKeyPath
);
......
......@@ -15,7 +15,9 @@ class BuildCommand extends FlutterCommand {
BuildCommand() {
argParser.addFlag('precompiled', negatable: false);
argParser.addOption('asset-base', defaultsTo: defaultMaterialAssetBasePath);
// This option is still referenced by the iOS build scripts. We should
// remove it once we've updated those build scripts.
argParser.addOption('asset-base', help: 'Ignored. Will be removed.', hide: true);
argParser.addOption('compiler');
argParser.addOption('target',
abbr: 't',
......@@ -42,7 +44,6 @@ class BuildCommand extends FlutterCommand {
return await build(
toolchain,
materialAssetBasePath: argResults['asset-base'],
mainPath: argResults.wasParsed('main') ? argResults['main'] : argResults['target'],
manifestPath: argResults['manifest'],
outputPath: outputPath,
......
......@@ -11,6 +11,7 @@ import 'package:flx/signing.dart';
import 'package:path/path.dart' as path;
import 'package:yaml/yaml.dart';
import 'artifacts.dart';
import 'base/file_system.dart' show ensureDirectoryExists;
import 'globals.dart';
import 'toolchain.dart';
......@@ -18,22 +19,12 @@ import 'zip.dart';
const String defaultMainPath = 'lib/main.dart';
const String defaultAssetBasePath = '.';
const String defaultMaterialAssetBasePath = 'packages/material_design_icons/icons';
const String defaultManifestPath = 'flutter.yaml';
const String defaultFlxOutputPath = 'build/app.flx';
const String defaultSnapshotPath = 'build/snapshot_blob.bin';
const String defaultPrivateKeyPath = 'privatekey.der';
const String _kSnapshotKey = 'snapshot_blob.bin';
Map<String, double> _kIconDensities = {
'mdpi': 1.0,
'hdpi' : 1.5,
'xhdpi' : 2.0,
'xxhdpi' : 3.0,
'xxxhdpi' : 4.0
};
const List<String> _kThemes = const <String>['white', 'black'];
const List<int> _kSizes = const <int>[18, 24, 36, 48];
class _Asset {
final String source;
......@@ -43,6 +34,27 @@ class _Asset {
_Asset({ this.source, this.base, this.key });
}
const String _kMaterialIconsKey = 'fonts/MaterialIcons-Regular.ttf';
List _getMaterialFonts() {
return [{
'family': 'MaterialIcons',
'fonts': [{
'asset': _kMaterialIconsKey
}]
}];
}
List<_Asset> _getMaterialAssets() {
return <_Asset>[
new _Asset(
base: '${ArtifactStore.flutterRoot}/bin/cache/artifacts/material_fonts',
source: 'MaterialIcons-Regular.ttf',
key: _kMaterialIconsKey
)
];
}
Map<_Asset, List<_Asset>> _parseAssets(Map manifestDescriptor, String assetBase) {
Map<_Asset, List<_Asset>> result = <_Asset, List<_Asset>>{};
if (manifestDescriptor == null)
......@@ -70,68 +82,6 @@ Map<_Asset, List<_Asset>> _parseAssets(Map manifestDescriptor, String assetBase)
return result;
}
class _MaterialAsset extends _Asset {
final String name;
final String density;
final String theme;
final int size;
_MaterialAsset(this.name, this.density, this.theme, this.size, String assetBase)
: super(base: assetBase);
String get source {
List<String> parts = name.split('/');
String category = parts[0];
String subtype = parts[1];
return '$category/drawable-$density/ic_${subtype}_${theme}_${size}dp.png';
}
String get key {
List<String> parts = name.split('/');
String category = parts[0];
String subtype = parts[1];
double devicePixelRatio = _kIconDensities[density];
if (devicePixelRatio == 1.0)
return '$category/ic_${subtype}_${theme}_${size}dp.png';
else
return '$category/${devicePixelRatio}x/ic_${subtype}_${theme}_${size}dp.png';
}
}
Iterable/*<T>*/ _generateValues/*<T>*/(
Map/*<String, T>*/ assetDescriptor,
String key,
Iterable/*<T>*/ defaults
) {
return assetDescriptor.containsKey(key) ? /*<T>*/[assetDescriptor[key]] : defaults;
}
void _accumulateMaterialAssets(Map<_Asset, List<_Asset>> result, Map assetDescriptor, String assetBase) {
String name = assetDescriptor['name'];
for (String theme in _generateValues(assetDescriptor, 'theme', _kThemes)) {
for (int size in _generateValues(assetDescriptor, 'size', _kSizes)) {
_MaterialAsset main = new _MaterialAsset(name, 'mdpi', theme, size, assetBase);
List<_Asset> variants = <_Asset>[];
result[main] = variants;
for (String density in _generateValues(assetDescriptor, 'density', _kIconDensities.keys)) {
if (density == 'mdpi')
continue;
variants.add(new _MaterialAsset(name, density, theme, size, assetBase));
}
}
}
}
Map<_Asset, List<_Asset>> _parseMaterialAssets(Map manifestDescriptor, String assetBase) {
Map<_Asset, List<_Asset>> result = <_Asset, List<_Asset>>{};
if (manifestDescriptor == null || !manifestDescriptor.containsKey('material-design-icons'))
return result;
for (Map assetDescriptor in manifestDescriptor['material-design-icons']) {
_accumulateMaterialAssets(result, assetDescriptor, assetBase);
}
return result;
}
dynamic _loadManifest(String manifestPath) {
if (manifestPath == null || !FileSystemEntity.isFileSync(manifestPath))
return null;
......@@ -160,12 +110,15 @@ ZipEntry _createAssetManifest(Map<_Asset, List<_Asset>> assets) {
return new ZipEntry.fromString('AssetManifest.json', JSON.encode(json));
}
ZipEntry _createFontManifest(Map manifestDescriptor) {
if (manifestDescriptor != null && manifestDescriptor.containsKey('fonts')) {
return new ZipEntry.fromString('FontManifest.json', JSON.encode(manifestDescriptor['fonts']));
} else {
ZipEntry _createFontManifest(Map manifestDescriptor, List additionalFonts) {
List fonts = [];
if (additionalFonts != null)
fonts.addAll(additionalFonts);
if (manifestDescriptor != null && manifestDescriptor.containsKey('fonts'))
fonts.addAll(manifestDescriptor['fonts']);
if (fonts.isEmpty)
return null;
}
return new ZipEntry.fromString('FontManifest.json', JSON.encode(fonts));
}
/// Build the flx in the build/ directory and return `localBundlePath` on success.
......@@ -203,7 +156,6 @@ class DirectoryResult {
Future<int> build(
Toolchain toolchain, {
String materialAssetBasePath: defaultMaterialAssetBasePath,
String mainPath: defaultMainPath,
String manifestPath: defaultManifestPath,
String outputPath: defaultFlxOutputPath,
......@@ -234,7 +186,6 @@ Future<int> build(
manifestDescriptor: manifestDescriptor,
snapshotFile: snapshotFile,
assetBasePath: assetBasePath,
materialAssetBasePath: materialAssetBasePath,
outputPath: outputPath,
privateKeyPath: privateKeyPath
);
......@@ -244,14 +195,14 @@ Future<int> assemble({
Map manifestDescriptor: const {},
File snapshotFile,
String assetBasePath: defaultAssetBasePath,
String materialAssetBasePath: defaultMaterialAssetBasePath,
String outputPath: defaultFlxOutputPath,
String privateKeyPath: defaultPrivateKeyPath
}) async {
printTrace('Building $outputPath');
Map<_Asset, List<_Asset>> assets = _parseAssets(manifestDescriptor, assetBasePath);
assets.addAll(_parseMaterialAssets(manifestDescriptor, materialAssetBasePath));
final bool usesMaterialDesign = manifestDescriptor != null && manifestDescriptor['uses-material-design'] == true;
ZipBuilder zipBuilder = new ZipBuilder();
......@@ -262,21 +213,28 @@ Future<int> assemble({
ZipEntry assetEntry = _createAssetEntry(asset);
if (assetEntry == null)
return 1;
else
zipBuilder.addEntry(assetEntry);
zipBuilder.addEntry(assetEntry);
for (_Asset variant in assets[asset]) {
ZipEntry variantEntry = _createAssetEntry(variant);
if (variantEntry == null)
return 1;
else
zipBuilder.addEntry(variantEntry);
zipBuilder.addEntry(variantEntry);
}
}
if (usesMaterialDesign) {
for (_Asset asset in _getMaterialAssets()) {
ZipEntry assetEntry = _createAssetEntry(asset);
if (assetEntry == null)
return 1;
zipBuilder.addEntry(assetEntry);
}
}
zipBuilder.addEntry(_createAssetManifest(assets));
ZipEntry fontManifest = _createFontManifest(manifestDescriptor);
ZipEntry fontManifest = _createFontManifest(manifestDescriptor, usesMaterialDesign ? _getMaterialFonts() : null);
if (fontManifest != null)
zipBuilder.addEntry(fontManifest);
......
name: {{projectName}}
material-design-icons:
- name: content/add
- name: navigation/arrow_back
- name: navigation/menu
- name: navigation/more_vert
uses-material-design: true
......@@ -44,7 +44,7 @@ class _FlutterDemoState extends State<FlutterDemo> {
onPressed: _incrementCounter,
tooltip: 'Increment',
child: new Icon(
icon: 'content/add'
icon: Icons.add
)
)
);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment