WIP #308 Move entity icon generation into EntityIcon widget

This commit is contained in:
estevez-dev
2019-02-21 16:32:55 +02:00
parent 24f80feeee
commit eb7d17d147
6 changed files with 70 additions and 20 deletions

View File

@ -22,7 +22,7 @@ class ButtonEntityContainer extends StatelessWidget {
fit: BoxFit.fitHeight, fit: BoxFit.fitHeight,
child: EntityIcon( child: EntityIcon(
padding: EdgeInsets.fromLTRB(2.0, 6.0, 2.0, 2.0), padding: EdgeInsets.fromLTRB(2.0, 6.0, 2.0, 2.0),
iconSize: Sizes.iconSize, size: Sizes.iconSize,
) )
), ),
), ),

View File

@ -27,14 +27,20 @@ class BadgeWidget extends StatelessWidget {
case "media_player": case "media_player":
case "binary_sensor": case "binary_sensor":
{ {
badgeIcon = MaterialDesignIcons.createIconWidgetFromEntityData( badgeIcon = EntityIcon(
entityModel.entityWrapper, iconSize, Colors.black); padding: EdgeInsets.all(0.0),
size: iconSize,
color: Colors.black
);
break; break;
} }
case "device_tracker": case "device_tracker":
{ {
badgeIcon = MaterialDesignIcons.createIconWidgetFromEntityData( badgeIcon = EntityIcon(
entityModel.entityWrapper, iconSize, Colors.black); padding: EdgeInsets.all(0.0),
size: iconSize,
color: Colors.black
);
onBadgeTextValue = entityModel.entityWrapper.entity.state; onBadgeTextValue = entityModel.entityWrapper.entity.state;
break; break;
} }

View File

@ -3,20 +3,64 @@ part of '../main.dart';
class EntityIcon extends StatelessWidget { class EntityIcon extends StatelessWidget {
final EdgeInsetsGeometry padding; final EdgeInsetsGeometry padding;
final double iconSize; final double size;
final Color color;
const EntityIcon({Key key, this.iconSize: Sizes.iconSize, this.padding: const EdgeInsets.fromLTRB( const EntityIcon({Key key, this.color, this.size: Sizes.iconSize, this.padding: const EdgeInsets.fromLTRB(
Sizes.leftWidgetPadding, 0.0, 12.0, 0.0)}) : super(key: key); Sizes.leftWidgetPadding, 0.0, 12.0, 0.0)}) : super(key: key);
int getDefaultIconByEntityId(String entityId, String deviceClass, String state) {
String domain = entityId.split(".")[0];
String iconNameByDomain = MaterialDesignIcons.defaultIconsByDomains["$domain.$state"] ?? MaterialDesignIcons.defaultIconsByDomains["$domain"];
String iconNameByDeviceClass;
if (deviceClass != null) {
iconNameByDeviceClass = MaterialDesignIcons.defaultIconsByDeviceClass["$domain.$deviceClass.$state"] ?? MaterialDesignIcons.defaultIconsByDeviceClass["$domain.$deviceClass"];
}
String iconName = iconNameByDeviceClass ?? iconNameByDomain;
if (iconName != null) {
return MaterialDesignIcons.iconsDataMap[iconName] ?? 0;
} else {
return 0;
}
}
Widget buildIcon(EntityWrapper data, Color color) {
if (data == null) {
return null;
}
if (data.entity.entityPicture != null) {
return CircleAvatar(
radius: size/2,
backgroundColor: Colors.white,
backgroundImage: CachedNetworkImageProvider(
"$homeAssistantWebHost${data.entity.entityPicture}",
),
);
} else {
String iconName = data.icon;
int iconCode = 0;
if (iconName.length > 0) {
iconCode = MaterialDesignIcons.getIconCodeByIconName(iconName);
} else {
iconCode = getDefaultIconByEntityId(data.entity.entityId,
data.entity.deviceClass, data.entity.state); //
}
return Icon(
IconData(iconCode, fontFamily: 'Material Design Icons'),
size: size,
color: color,
);
}
}
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper; final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper;
return Padding( return Padding(
padding: padding, padding: padding,
child: MaterialDesignIcons.createIconWidgetFromEntityData( child: buildIcon(
entityWrapper, entityWrapper,
iconSize, color ?? EntityColor.stateColor(entityWrapper.entity.state)
EntityColor.stateColor(entityWrapper.entity.state)
), ),
); );
} }

View File

@ -35,7 +35,7 @@ class GlanceEntityContainer extends StatelessWidget {
result.add( result.add(
EntityIcon( EntityIcon(
padding: EdgeInsets.all(0.0), padding: EdgeInsets.all(0.0),
iconSize: iconSize, size: iconSize,
) )
); );
if (!nameInTheBottom) { if (!nameInTheBottom) {

View File

@ -1,7 +1,7 @@
part of 'main.dart'; part of 'main.dart';
class MaterialDesignIcons { class MaterialDesignIcons {
static Map _defaultIconsByDomains = { static final Map defaultIconsByDomains = {
"light": "mdi:lightbulb", "light": "mdi:lightbulb",
"switch": "mdi:flash", "switch": "mdi:flash",
"binary_sensor": "mdi:checkbox-blank-circle-outline", "binary_sensor": "mdi:checkbox-blank-circle-outline",
@ -34,7 +34,7 @@ class MaterialDesignIcons {
"alarm_control_panel" : "mdi:bell" "alarm_control_panel" : "mdi:bell"
}; };
static Map _defaultIconsByDeviceClass = { static final Map defaultIconsByDeviceClass = {
//"binary_sensor.battery": "mdi:", //TODO //"binary_sensor.battery": "mdi:", //TODO
"binary_sensor.cold.on": "mdi:snowflake", "binary_sensor.cold.on": "mdi:snowflake",
"binary_sensor.cold.off": "mdi:thermometer", "binary_sensor.cold.off": "mdi:thermometer",
@ -92,7 +92,7 @@ class MaterialDesignIcons {
"cover.window.closing": "mdi:window-open", "cover.window.closing": "mdi:window-open",
"cover.window.opening": "mdi:window-open", "cover.window.opening": "mdi:window-open",
}; };
static Map _iconsDataMap = { static final Map iconsDataMap = {
"mdi:access-point": 0xf002, "mdi:access-point": 0xf002,
"mdi:access-point-network": 0xf003, "mdi:access-point-network": 0xf003,
"mdi:account": 0xf004, "mdi:account": 0xf004,
@ -2890,7 +2890,7 @@ class MaterialDesignIcons {
"mdi:blank": 0xf68c "mdi:blank": 0xf68c
}; };
static Widget createIconWidgetFromEntityData(EntityWrapper data, double size, Color color) { /*static Widget createIconWidgetFromEntityData(EntityWrapper data, double size, Color color) {
if (data == null) { if (data == null) {
return null; return null;
} }
@ -2921,7 +2921,7 @@ class MaterialDesignIcons {
color: color, color: color,
); );
} }
} }*/
static IconData createIconDataFromIconCode(int code) { static IconData createIconDataFromIconCode(int code) {
return IconData(code, fontFamily: 'Material Design Icons'); return IconData(code, fontFamily: 'Material Design Icons');
@ -2932,10 +2932,10 @@ class MaterialDesignIcons {
} }
static int getIconCodeByIconName(String name) { static int getIconCodeByIconName(String name) {
return _iconsDataMap[name] ?? 0; return iconsDataMap[name] ?? 0;
} }
static int getDefaultIconByEntityId(String entityId, String deviceClass, String state) { /*static int getDefaultIconByEntityId(String entityId, String deviceClass, String state) {
String domain = entityId.split(".")[0]; String domain = entityId.split(".")[0];
String iconNameByDomain = _defaultIconsByDomains["$domain.$state"] ?? _defaultIconsByDomains["$domain"]; String iconNameByDomain = _defaultIconsByDomains["$domain.$state"] ?? _defaultIconsByDomains["$domain"];
String iconNameByDeviceClass; String iconNameByDeviceClass;
@ -2948,6 +2948,6 @@ class MaterialDesignIcons {
} else { } else {
return 0; return 0;
} }
} }*/
} }

View File

@ -149,7 +149,7 @@ class CardWidget extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end,
children: [ children: [
EntityIcon( EntityIcon(
iconSize: 50.0, size: 50.0,
), ),
Container( Container(
width: 26.0, width: 26.0,