mirror of
https://github.com/flutter/flutter.git
synced 2026-02-20 02:29:02 +08:00
Icon should use an enum rather than an int for size
Material design icons are defined to work at specific sizes: 18, 24, 36, 48. The current API doesn't reflect that and just takes a size int. If an invalid size is chosen an error is printed to the console and no icon shows up. Fixes #1816
This commit is contained in:
parent
02a1ebabd7
commit
eeea4ab7c7
@ -20,7 +20,7 @@ class Field extends StatelessComponent {
|
||||
return new Row(<Widget>[
|
||||
new Padding(
|
||||
padding: const EdgeDims.symmetric(horizontal: 16.0),
|
||||
child: new Icon(type: icon, size: 24)
|
||||
child: new Icon(type: icon)
|
||||
),
|
||||
new Flexible(
|
||||
child: new Input(
|
||||
@ -43,7 +43,7 @@ class AddressBookHome extends StatelessComponent {
|
||||
|
||||
Widget buildFloatingActionButton(BuildContext context) {
|
||||
return new FloatingActionButton(
|
||||
child: new Icon(type: 'image/photo_camera', size: 24),
|
||||
child: new Icon(type: 'image/photo_camera'),
|
||||
backgroundColor: Theme.of(context).accentColor
|
||||
);
|
||||
}
|
||||
|
||||
@ -200,7 +200,7 @@ class FeedFragmentState extends State<FeedFragment> {
|
||||
switch (_fitnessMode) {
|
||||
case FitnessMode.feed:
|
||||
return new FloatingActionButton(
|
||||
child: new Icon(type: 'content/add', size: 24),
|
||||
child: new Icon(type: 'content/add'),
|
||||
onPressed: _handleActionButtonPressed
|
||||
);
|
||||
case FitnessMode.chart:
|
||||
|
||||
@ -254,7 +254,7 @@ class StockHomeState extends State<StockHome> {
|
||||
|
||||
Widget buildFloatingActionButton() {
|
||||
return new FloatingActionButton(
|
||||
child: new Icon(type: 'content/add', size: 24),
|
||||
child: new Icon(type: 'content/add'),
|
||||
backgroundColor: Colors.redAccent[200],
|
||||
onPressed: _handleStockPurchased
|
||||
);
|
||||
|
||||
@ -63,7 +63,7 @@ Future showStockMenu({BuildContext context, bool autorefresh, ValueChanged<bool>
|
||||
child: new Row(<Widget>[
|
||||
new Icon(
|
||||
type: 'device/dvr',
|
||||
size: 18
|
||||
size: IconSize.s18
|
||||
),
|
||||
new Container(
|
||||
width: 8.0
|
||||
|
||||
@ -289,7 +289,7 @@ class CardCollectionState extends State<CardCollection> {
|
||||
child: new Container(
|
||||
height: cardModel.height,
|
||||
padding: const EdgeDims.all(8.0),
|
||||
child: _editable ?
|
||||
child: _editable ?
|
||||
new Center(
|
||||
child: new Input(
|
||||
key: new GlobalObjectKey(cardModel),
|
||||
@ -329,11 +329,11 @@ class CardCollectionState extends State<CardCollection> {
|
||||
backgroundMessage = "Unsupported dismissDirection";
|
||||
}
|
||||
|
||||
Widget leftArrowIcon = new Icon(type: 'navigation/arrow_back', size: 36);
|
||||
Widget leftArrowIcon = new Icon(type: 'navigation/arrow_back', size: IconSize.s36);
|
||||
if (_dismissDirection == DismissDirection.right)
|
||||
leftArrowIcon = new Opacity(opacity: 0.1, child: leftArrowIcon);
|
||||
|
||||
Widget rightArrowIcon = new Icon(type: 'navigation/arrow_forward', size: 36);
|
||||
Widget rightArrowIcon = new Icon(type: 'navigation/arrow_forward', size: IconSize.s36);
|
||||
if (_dismissDirection == DismissDirection.left)
|
||||
rightArrowIcon = new Opacity(opacity: 0.1, child: rightArrowIcon);
|
||||
|
||||
|
||||
@ -49,7 +49,6 @@ class DrawerItem extends StatelessComponent {
|
||||
padding: const EdgeDims.symmetric(horizontal: 16.0),
|
||||
child: new Icon(
|
||||
type: icon,
|
||||
size: 24,
|
||||
colorFilter: _getColorFilter(themeData)
|
||||
)
|
||||
)
|
||||
|
||||
@ -244,7 +244,7 @@ class DropdownButton<T> extends StatelessComponent {
|
||||
alignment: const FractionalOffset(0.5, 0.0)
|
||||
),
|
||||
new Container(
|
||||
child: new Icon(type: 'navigation/arrow_drop_down', size: 36),
|
||||
child: new Icon(type: 'navigation/arrow_drop_down', size: IconSize.s36),
|
||||
padding: const EdgeDims.only(top: 6.0)
|
||||
)
|
||||
])
|
||||
|
||||
@ -8,10 +8,24 @@ import 'theme.dart';
|
||||
import 'icon_theme.dart';
|
||||
import 'icon_theme_data.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,
|
||||
this.size: IconSize.s24,
|
||||
this.type: '',
|
||||
this.color,
|
||||
this.colorFilter
|
||||
@ -20,7 +34,7 @@ class Icon extends StatelessComponent {
|
||||
assert(type != null);
|
||||
}
|
||||
|
||||
final int size;
|
||||
final IconSize size;
|
||||
final String type;
|
||||
final IconThemeColor color;
|
||||
final ColorFilter colorFilter;
|
||||
@ -55,10 +69,11 @@ class Icon extends StatelessComponent {
|
||||
// Should we use the ios images on ios?
|
||||
String density = 'drawable-xxhdpi';
|
||||
String colorSuffix = _getColorSuffix(context);
|
||||
int iconSize = _kIconSize[size];
|
||||
return new AssetImage(
|
||||
name: '$category/$density/ic_${subtype}_${colorSuffix}_${size}dp.png',
|
||||
width: size.toDouble(),
|
||||
height: size.toDouble(),
|
||||
name: '$category/$density/ic_${subtype}_${colorSuffix}_${iconSize}dp.png',
|
||||
width: iconSize.toDouble(),
|
||||
height: iconSize.toDouble(),
|
||||
colorFilter: colorFilter
|
||||
);
|
||||
}
|
||||
|
||||
@ -28,7 +28,6 @@ class IconButton extends StatelessComponent {
|
||||
padding: const EdgeDims.all(8.0),
|
||||
child: new Icon(
|
||||
type: icon,
|
||||
size: 24,
|
||||
color: color,
|
||||
colorFilter: colorFilter
|
||||
)
|
||||
|
||||
@ -27,7 +27,6 @@ const double _kTabIndicatorHeight = 2.0;
|
||||
const double _kMinTabWidth = 72.0;
|
||||
const double _kMaxTabWidth = 264.0;
|
||||
const EdgeDims _kTabLabelPadding = const EdgeDims.symmetric(horizontal: 12.0);
|
||||
const int _kTabIconSize = 24;
|
||||
const double _kTabBarScrollDrag = 0.025;
|
||||
const Duration _kTabBarScroll = const Duration(milliseconds: 200);
|
||||
|
||||
@ -321,7 +320,7 @@ class Tab extends StatelessComponent {
|
||||
assert(label.icon != null);
|
||||
Color iconColor = selected ? selectedColor : color;
|
||||
ColorFilter filter = new ColorFilter.mode(iconColor, TransferMode.srcATop);
|
||||
return new Icon(type: label.icon, size: _kTabIconSize, colorFilter: filter);
|
||||
return new Icon(type: label.icon, colorFilter: filter);
|
||||
}
|
||||
|
||||
Widget build(BuildContext context) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user