part of '../main.dart'; class EntityIcon extends StatelessWidget { final EdgeInsetsGeometry padding; final double size; final Color color; 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); 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 Widget build(BuildContext context) { final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper; return Padding( padding: padding, child: buildIcon( entityWrapper, color ?? EntityColor.stateColor(entityWrapper.entity.state) ), ); } }