diff --git a/lib/entity_class/entity.class.dart b/lib/entity_class/entity.class.dart index 3e2c2fb..cb98473 100644 --- a/lib/entity_class/entity.class.dart +++ b/lib/entity_class/entity.class.dart @@ -77,20 +77,15 @@ class Entity { } Widget buildDefaultWidget(BuildContext context) { - return EntityModel( - entity: this, - child: DefaultEntityContainer( - state: _buildStatePart(context) - ), - handleTap: true, + return DefaultEntityContainer( + state: _buildStatePart(context) ); } - Widget buildGlanceWidget(BuildContext context) { - return EntityModel( - entity: this, - child: GlanceEntityContainer(), - handleTap: true, + Widget buildGlanceWidget(BuildContext context, bool showName, bool showState) { + return GlanceEntityContainer( + showName: showName, + showState: showState, ); } @@ -111,7 +106,7 @@ class Entity { Widget buildEntityPageWidget(BuildContext context) { return EntityModel( - entity: this, + entity: EntityWrapper(entity: this), child: EntityPageContainer(children: [ DefaultEntityContainer(state: _buildStatePartForPage(context)), LastUpdatedWidget(), @@ -133,7 +128,7 @@ class Entity { Widget buildBadgeWidget(BuildContext context) { return EntityModel( - entity: this, + entity: EntityWrapper(entity: this), child: BadgeWidget(), handleTap: true, ); diff --git a/lib/entity_class/entity_wrapper.class.dart b/lib/entity_class/entity_wrapper.class.dart new file mode 100644 index 0000000..feb8a16 --- /dev/null +++ b/lib/entity_class/entity_wrapper.class.dart @@ -0,0 +1,14 @@ +part of '../main.dart'; + +class EntityWrapper { + + String displayName; + String icon; + Entity entity; + + EntityWrapper({this.entity, String icon, String displayName}) { + this.icon = icon ?? entity.icon; + this.displayName = displayName ?? entity.displayName; + } + +} \ No newline at end of file diff --git a/lib/entity_widgets/badge.dart b/lib/entity_widgets/badge.dart index d4bfd89..dca850a 100644 --- a/lib/entity_widgets/badge.dart +++ b/lib/entity_widgets/badge.dart @@ -7,12 +7,12 @@ class BadgeWidget extends StatelessWidget { double iconSize = 26.0; Widget badgeIcon; String onBadgeTextValue; - Color iconColor = EntityColor.badgeColors[entityModel.entity.domain] ?? + Color iconColor = EntityColor.badgeColors[entityModel.entity.entity.domain] ?? EntityColor.badgeColors["default"]; - switch (entityModel.entity.domain) { + switch (entityModel.entity.entity.domain) { case "sun": { - badgeIcon = entityModel.entity.state == "below_horizon" + badgeIcon = entityModel.entity.entity.state == "below_horizon" ? Icon( MaterialDesignIcons.createIconDataFromIconCode(0xf0dc), size: iconSize, @@ -25,10 +25,10 @@ class BadgeWidget extends StatelessWidget { } case "sensor": { - onBadgeTextValue = entityModel.entity.unitOfMeasurement; + onBadgeTextValue = entityModel.entity.entity.unitOfMeasurement; badgeIcon = Center( child: Text( - "${entityModel.entity.state}", + "${entityModel.entity.entity.state}", overflow: TextOverflow.fade, softWrap: false, textAlign: TextAlign.center, @@ -41,7 +41,7 @@ class BadgeWidget extends StatelessWidget { { badgeIcon = MaterialDesignIcons.createIconWidgetFromEntityData( entityModel.entity, iconSize, Colors.black); - onBadgeTextValue = entityModel.entity.state; + onBadgeTextValue = entityModel.entity.entity.state; break; } default: @@ -120,6 +120,6 @@ class BadgeWidget extends StatelessWidget { ], ), onTap: () => - eventBus.fire(new ShowEntityPageEvent(entityModel.entity))); + eventBus.fire(new ShowEntityPageEvent(entityModel.entity.entity))); } } \ No newline at end of file diff --git a/lib/entity_widgets/controls/climate_controls.dart b/lib/entity_widgets/controls/climate_controls.dart index 6657aa8..aad2226 100644 --- a/lib/entity_widgets/controls/climate_controls.dart +++ b/lib/entity_widgets/controls/climate_controls.dart @@ -165,7 +165,7 @@ class _ClimateControlWidgetState extends State { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final ClimateEntity entity = entityModel.entity; + final ClimateEntity entity = entityModel.entity.entity; if (_changedHere) { _showPending = (_tmpTemperature != entity.temperature); _changedHere = false; diff --git a/lib/entity_widgets/controls/cover_controls.dart b/lib/entity_widgets/controls/cover_controls.dart index 7c1b83d..af5e6d9 100644 --- a/lib/entity_widgets/controls/cover_controls.dart +++ b/lib/entity_widgets/controls/cover_controls.dart @@ -38,7 +38,7 @@ class _CoverControlWidgetState extends State { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final CoverEntity entity = entityModel.entity; + final CoverEntity entity = entityModel.entity.entity; if (_changedHere) { _changedHere = false; } else { @@ -152,7 +152,7 @@ class CoverTiltControlsWidget extends StatelessWidget { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final CoverEntity entity = entityModel.entity; + final CoverEntity entity = entityModel.entity.entity; List buttons = []; if (entity.supportOpenTilt) { buttons.add(IconButton( diff --git a/lib/entity_widgets/controls/light_controls.dart b/lib/entity_widgets/controls/light_controls.dart index c73b52c..e999d63 100644 --- a/lib/entity_widgets/controls/light_controls.dart +++ b/lib/entity_widgets/controls/light_controls.dart @@ -80,7 +80,7 @@ class _LightControlsWidgetState extends State { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final LightEntity entity = entityModel.entity; + final LightEntity entity = entityModel.entity.entity; if (!_changedHere) { _resetState(entity); } else { diff --git a/lib/entity_widgets/controls/media_player_widget.dart b/lib/entity_widgets/controls/media_player_widget.dart index f3b3155..ea03b2d 100644 --- a/lib/entity_widgets/controls/media_player_widget.dart +++ b/lib/entity_widgets/controls/media_player_widget.dart @@ -28,7 +28,7 @@ class MediaPlayerWidget extends StatelessWidget { @override Widget build(BuildContext context) { final EntityModel entityModel = EntityModel.of(context); - final MediaPlayerEntity entity = entityModel.entity; + final MediaPlayerEntity entity = entityModel.entity.entity; return Column( children: [ Stack( @@ -229,7 +229,7 @@ class _MediaPlayerProgressWidgetState extends State { @override Widget build(BuildContext context) { final EntityModel entityModel = EntityModel.of(context); - final MediaPlayerEntity entity = entityModel.entity; + final MediaPlayerEntity entity = entityModel.entity.entity; double progress; try { DateTime lastUpdated = DateTime.parse( diff --git a/lib/entity_widgets/controls/slider_controls.dart b/lib/entity_widgets/controls/slider_controls.dart index 96db556..813201c 100644 --- a/lib/entity_widgets/controls/slider_controls.dart +++ b/lib/entity_widgets/controls/slider_controls.dart @@ -25,7 +25,7 @@ class _SliderControlsWidgetState extends State { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final SliderEntity entity = entityModel.entity; + final SliderEntity entity = entityModel.entity.entity; if (entity.valueStep < 1) { _multiplier = 10; } else if (entity.valueStep < 0.1) { diff --git a/lib/entity_widgets/entity_attributes_list.dart b/lib/entity_widgets/entity_attributes_list.dart index 12a9c29..d2d2011 100644 --- a/lib/entity_widgets/entity_attributes_list.dart +++ b/lib/entity_widgets/entity_attributes_list.dart @@ -7,14 +7,14 @@ class EntityAttributesList extends StatelessWidget { Widget build(BuildContext context) { final entityModel = EntityModel.of(context); List attrs = []; - if ((entityModel.entity.attributesToShow == null) || - (entityModel.entity.attributesToShow.contains("all"))) { - entityModel.entity.attributes.forEach((name, value) { + if ((entityModel.entity.entity.attributesToShow == null) || + (entityModel.entity.entity.attributesToShow.contains("all"))) { + entityModel.entity.entity.attributes.forEach((name, value) { attrs.add(_buildSingleAttribute("$name", "$value")); }); } else { - entityModel.entity.attributesToShow.forEach((String attr) { - String attrValue = entityModel.entity.getAttribute("$attr"); + entityModel.entity.entity.attributesToShow.forEach((String attr) { + String attrValue = entityModel.entity.entity.getAttribute("$attr"); if (attrValue != null) { attrs.add( _buildSingleAttribute("$attr", "$attrValue")); diff --git a/lib/entity_widgets/entity_icon.dart b/lib/entity_widgets/entity_icon.dart index 4ea4395..7d78a84 100644 --- a/lib/entity_widgets/entity_icon.dart +++ b/lib/entity_widgets/entity_icon.dart @@ -17,11 +17,11 @@ class EntityIcon extends StatelessWidget { child: MaterialDesignIcons.createIconWidgetFromEntityData( entityModel.entity, iconSize, - EntityColor.stateColor(entityModel.entity.state) + EntityColor.stateColor(entityModel.entity.entity.state) ), ), onTap: () => entityModel.handleTap - ? eventBus.fire(new ShowEntityPageEvent(entityModel.entity)) + ? eventBus.fire(new ShowEntityPageEvent(entityModel.entity.entity)) : null, ); } diff --git a/lib/entity_widgets/entity_name.dart b/lib/entity_widgets/entity_name.dart index 63e6de1..1d7a1a7 100644 --- a/lib/entity_widgets/entity_name.dart +++ b/lib/entity_widgets/entity_name.dart @@ -26,7 +26,7 @@ class EntityName extends StatelessWidget { ), onTap: () => entityModel.handleTap - ? eventBus.fire(new ShowEntityPageEvent(entityModel.entity)) + ? eventBus.fire(new ShowEntityPageEvent(entityModel.entity.entity)) : null, ); } diff --git a/lib/entity_widgets/glance_entity_container.dart b/lib/entity_widgets/glance_entity_container.dart index a4cb952..cdfc01b 100644 --- a/lib/entity_widgets/glance_entity_container.dart +++ b/lib/entity_widgets/glance_entity_container.dart @@ -1,34 +1,42 @@ part of '../main.dart'; class GlanceEntityContainer extends StatelessWidget { + + final bool showName; + final bool showState; + GlanceEntityContainer({ - Key key, + Key key, @required this.showName, @required this.showState, }) : super(key: key); @override Widget build(BuildContext context) { + List result = []; + if (showName) { + result.add(EntityName( + padding: EdgeInsets.only(bottom: Sizes.rowPadding), + textOverflow: TextOverflow.ellipsis, + wordsWrap: false, + textAlign: TextAlign.center, + fontSize: Sizes.smallFontSize, + )); + } + result.add(EntityIcon( + padding: EdgeInsets.all(0.0), + iconSize: Sizes.largeIconSize, + )); + if (showState) { + result.add(SimpleEntityState( + textAlign: TextAlign.center, + expanded: false, + padding: EdgeInsets.only(top: Sizes.rowPadding), + )); + } return Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, - children: [ - EntityName( - padding: EdgeInsets.only(bottom: Sizes.rowPadding), - textOverflow: TextOverflow.ellipsis, - wordsWrap: false, - textAlign: TextAlign.center, - fontSize: Sizes.smallFontSize, - ), - EntityIcon( - padding: EdgeInsets.all(0.0), - iconSize: Sizes.largeIconSize, - ), - SimpleEntityState( - textAlign: TextAlign.center, - expanded: false, - padding: EdgeInsets.only(top: Sizes.rowPadding), - ) - ], + children: result, ); } } \ No newline at end of file diff --git a/lib/entity_widgets/history_chart/entity_history.dart b/lib/entity_widgets/history_chart/entity_history.dart index 0a6bfb1..6dc6e7d 100644 --- a/lib/entity_widgets/history_chart/entity_history.dart +++ b/lib/entity_widgets/history_chart/entity_history.dart @@ -65,7 +65,7 @@ class _EntityHistoryWidgetState extends State { Widget build(BuildContext context) { final HomeAssistantModel homeAssistantModel = HomeAssistantModel.of(context); final EntityModel entityModel = EntityModel.of(context); - final Entity entity = entityModel.entity; + final Entity entity = entityModel.entity.entity; if (!_needToUpdateHistory) { _needToUpdateHistory = true; } else { diff --git a/lib/entity_widgets/last_updated.dart b/lib/entity_widgets/last_updated.dart index 51db486..bdccd16 100644 --- a/lib/entity_widgets/last_updated.dart +++ b/lib/entity_widgets/last_updated.dart @@ -8,7 +8,7 @@ class LastUpdatedWidget extends StatelessWidget { padding: EdgeInsets.fromLTRB( Sizes.leftWidgetPadding, 0.0, 0.0, 0.0), child: Text( - '${entityModel.entity.lastUpdated}', + '${entityModel.entity.entity.lastUpdated}', textAlign: TextAlign.left, style: TextStyle( fontSize: Sizes.smallFontSize, color: Colors.black26), diff --git a/lib/entity_widgets/model_widgets.dart b/lib/entity_widgets/model_widgets.dart index 06fad2c..c7e9a94 100644 --- a/lib/entity_widgets/model_widgets.dart +++ b/lib/entity_widgets/model_widgets.dart @@ -8,7 +8,7 @@ class EntityModel extends InheritedWidget { @required Widget child, }) : super(key: key, child: child); - final Entity entity; + final EntityWrapper entity; final bool handleTap; static EntityModel of(BuildContext context) { diff --git a/lib/entity_widgets/state/button_state.dart b/lib/entity_widgets/state/button_state.dart index 7c85a37..bbb87c5 100644 --- a/lib/entity_widgets/state/button_state.dart +++ b/lib/entity_widgets/state/button_state.dart @@ -13,7 +13,7 @@ class ButtonStateWidget extends StatelessWidget { height: 34.0, child: FlatButton( onPressed: (() { - _setNewState(entityModel.entity); + _setNewState(entityModel.entity.entity); }), child: Text( "EXECUTE", diff --git a/lib/entity_widgets/state/climate_state.dart b/lib/entity_widgets/state/climate_state.dart index 987753f..7139f03 100644 --- a/lib/entity_widgets/state/climate_state.dart +++ b/lib/entity_widgets/state/climate_state.dart @@ -4,7 +4,7 @@ class ClimateStateWidget extends StatelessWidget { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final ClimateEntity entity = entityModel.entity; + final ClimateEntity entity = entityModel.entity.entity; String targetTemp = "-"; if ((entity.supportTargetTemperature) && (entity.temperature != null)) { targetTemp = "${entity.temperature}"; diff --git a/lib/entity_widgets/state/cover_state.dart b/lib/entity_widgets/state/cover_state.dart index 8c27607..37a7681 100644 --- a/lib/entity_widgets/state/cover_state.dart +++ b/lib/entity_widgets/state/cover_state.dart @@ -19,7 +19,7 @@ class CoverStateWidget extends StatelessWidget { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final CoverEntity entity = entityModel.entity; + final CoverEntity entity = entityModel.entity.entity; List buttons = []; if (entity.supportOpen) { buttons.add(IconButton( diff --git a/lib/entity_widgets/state/date_time_state.dart b/lib/entity_widgets/state/date_time_state.dart index 5c5d5cf..d438df3 100644 --- a/lib/entity_widgets/state/date_time_state.dart +++ b/lib/entity_widgets/state/date_time_state.dart @@ -4,7 +4,7 @@ class DateTimeStateWidget extends StatelessWidget { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final DateTimeEntity entity = entityModel.entity; + final DateTimeEntity entity = entityModel.entity.entity; return Padding( padding: EdgeInsets.fromLTRB(0.0, 0.0, Sizes.rightWidgetPadding, 0.0), child: GestureDetector( diff --git a/lib/entity_widgets/state/select_state.dart b/lib/entity_widgets/state/select_state.dart index 0f15457..680ed00 100644 --- a/lib/entity_widgets/state/select_state.dart +++ b/lib/entity_widgets/state/select_state.dart @@ -18,7 +18,7 @@ class _SelectStateWidgetState extends State { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final SelectEntity entity = entityModel.entity; + final SelectEntity entity = entityModel.entity.entity; Widget ctrl; if (entity.listOptions.isNotEmpty) { ctrl = DropdownButton( diff --git a/lib/entity_widgets/state/simple_state.dart b/lib/entity_widgets/state/simple_state.dart index a56e00c..e03ea8d 100644 --- a/lib/entity_widgets/state/simple_state.dart +++ b/lib/entity_widgets/state/simple_state.dart @@ -15,7 +15,7 @@ class SimpleEntityState extends StatelessWidget { padding: padding, child: GestureDetector( child: Text( - "${entityModel.entity.state}${entityModel.entity.unitOfMeasurement}", + "${entityModel.entity.entity.state}${entityModel.entity.entity.unitOfMeasurement}", textAlign: textAlign, maxLines: 4, overflow: TextOverflow.ellipsis, @@ -24,7 +24,7 @@ class SimpleEntityState extends StatelessWidget { fontSize: Sizes.stateFontSize, )), onTap: () => entityModel.handleTap - ? eventBus.fire(new ShowEntityPageEvent(entityModel.entity)) + ? eventBus.fire(new ShowEntityPageEvent(entityModel.entity.entity)) : null, ) ); diff --git a/lib/entity_widgets/state/switch_state.dart b/lib/entity_widgets/state/switch_state.dart index d3e2baa..82ff6a9 100644 --- a/lib/entity_widgets/state/switch_state.dart +++ b/lib/entity_widgets/state/switch_state.dart @@ -34,7 +34,7 @@ class _SwitchStateWidgetState extends State { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final entity = entityModel.entity; + final entity = entityModel.entity.entity; if (!updatedHere) { newState = entity.state; } else { diff --git a/lib/entity_widgets/state/text_input_state.dart b/lib/entity_widgets/state/text_input_state.dart index 0a06e9c..3695f8a 100644 --- a/lib/entity_widgets/state/text_input_state.dart +++ b/lib/entity_widgets/state/text_input_state.dart @@ -55,7 +55,7 @@ class _TextInputStateWidgetState extends State { @override Widget build(BuildContext context) { final entityModel = EntityModel.of(context); - final TextEntity entity = entityModel.entity; + final TextEntity entity = entityModel.entity.entity; _entityState = entity.state; _entityDomain = entity.domain; _entityId = entity.entityId; diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index f676bdf..ffc763c 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -413,20 +413,42 @@ class HomeAssistant { name: rawCard["title"], type: rawCard['type'], columnsCount: rawCard['columns'] ?? 4, + showName: rawCard['show_name'] ?? true, + showState: rawCard['show_state'] ?? true, ); rawCard["entities"]?.forEach((rawEntity) { if (rawEntity is String) { if (entities.isExist(rawEntity)) { - card.entities.add(entities.get(rawEntity)); + card.entities.add(EntityWrapper(entity: entities.get(rawEntity))); } } else { if (entities.isExist(rawEntity["entity"])) { - card.entities.add(entities.get(rawEntity["entity"])); + card.entities.add( + EntityWrapper( + entity: entities.get(rawEntity["entity"]), + displayName: rawEntity["name"], + icon: rawEntity["icon"] + ) + ); } } }); if (rawCard["entity"] != null) { - card.linkedEntity = entities.get(rawCard["entity"]); + var en = rawCard["entity"]; + if (en is String) { + if (entities.isExist(en)) { + card.linkedEntity = EntityWrapper(entity: entities.get(en)); + } + } else { + if (entities.isExist(en["entity"])) { + card.linkedEntity = EntityWrapper( + entity: entities.get(en["entity"]), + icon: en["icon"], + displayName: en["name"] + ); + } + } + } result.add(card); } diff --git a/lib/main.dart b/lib/main.dart index 5a73395..e91c43e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -17,6 +17,7 @@ import 'package:charts_flutter/flutter.dart' as charts; part 'entity_class/const.dart'; part 'entity_class/entity.class.dart'; +part 'entity_class/entity_wrapper.class.dart'; part 'entity_class/switch_entity.class.dart'; part 'entity_class/button_entity.class.dart'; part 'entity_class/text_entity.class.dart'; @@ -80,7 +81,7 @@ part 'ui_widgets/card_header_widget.dart'; EventBus eventBus = new EventBus(); const String appName = "HA Client"; -const appVersion = "0.3.8 internal build 64"; +const appVersion = "0.3.8-65"; String homeAssistantWebHost; @@ -480,7 +481,6 @@ class _MainPageState extends State with WidgetsBindingObserver { headerSliverBuilder: (BuildContext context, bool innerBoxIsScrolled) { return [ SliverAppBar( - //expandedHeight: 100.0, floating: true, pinned: true, primary: true, @@ -530,6 +530,7 @@ class _MainPageState extends State with WidgetsBindingObserver { if (_homeAssistant.ui == null || _homeAssistant.ui.views == null) { return Scaffold( key: _scaffoldKey, + primary: true, drawer: _buildAppDrawer(), body: _buildScaffoldBody(true) ); diff --git a/lib/mdi.class.dart b/lib/mdi.class.dart index b03230b..e25507b 100644 --- a/lib/mdi.class.dart +++ b/lib/mdi.class.dart @@ -2880,17 +2880,17 @@ class MaterialDesignIcons { "mdi:blank": 0xf68c }; - static Widget createIconWidgetFromEntityData(Entity data, double size, Color color) { + static Widget createIconWidgetFromEntityData(EntityWrapper data, double size, Color color) { if (data == null) { return null; } - if (data.entityPicture != null) { + if (data.entity.entityPicture != null) { if (homeAssistantWebHost != null) { return CircleAvatar( radius: size/2, backgroundColor: Colors.white, backgroundImage: CachedNetworkImageProvider( - "$homeAssistantWebHost${data.entityPicture}", + "$homeAssistantWebHost${data.entity.entityPicture}", ), ); } else { @@ -2902,8 +2902,8 @@ class MaterialDesignIcons { if (iconName.length > 0) { iconCode = getIconCodeByIconName(iconName); } else { - iconCode = getDefaultIconByEntityId(data.entityId, - data.deviceClass, data.state); // + iconCode = getDefaultIconByEntityId(data.entity.entityId, + data.entity.deviceClass, data.entity.state); // } return Icon( IconData(iconCode, fontFamily: 'Material Design Icons'), diff --git a/lib/ui_class/card.class.dart b/lib/ui_class/card.class.dart index 314c3fe..8991bdb 100644 --- a/lib/ui_class/card.class.dart +++ b/lib/ui_class/card.class.dart @@ -1,11 +1,13 @@ part of '../main.dart'; class HACard { - List entities = []; - Entity linkedEntity; + List entities = []; + EntityWrapper linkedEntity; String name; String id; String type; + bool showName; + bool showState; int columnsCount; HACard({ @@ -13,6 +15,8 @@ class HACard { this.id, this.linkedEntity, this.columnsCount: 4, + this.showName: true, + this.showState: true, @required this.type }); diff --git a/lib/ui_class/view.class.dart b/lib/ui_class/view.class.dart index 185e497..b70d12c 100644 --- a/lib/ui_class/view.class.dart +++ b/lib/ui_class/view.class.dart @@ -28,7 +28,7 @@ class HAView { HACard card = HACard( name: e.displayName, id: e.entityId, - linkedEntity: e, + linkedEntity: EntityWrapper(entity: e), type: "media-control" ); cards.add(card); @@ -42,24 +42,24 @@ class HAView { name: entity.domain, type: "entities" ); - card.entities.add(entity); + card.entities.add(EntityWrapper(entity: entity)); autoGeneratedCards.add(card); } else { - autoGeneratedCards.firstWhere((card) => card.id == groupIdToAdd).entities.add(entity); + autoGeneratedCards.firstWhere((card) => card.id == groupIdToAdd).entities.add(EntityWrapper(entity: entity)); } } else { HACard card = HACard( name: entity.displayName, id: entity.entityId, - linkedEntity: entity, + linkedEntity: EntityWrapper(entity: entity), type: "entities" ); - card.entities.addAll(entity.childEntities.where((entity) {return entity.domain != "media_player";})); + card.entities.addAll(entity.childEntities.where((entity) {return entity.domain != "media_player";}).map((e) {return EntityWrapper(entity: entity);})); entity.childEntities.where((entity) {return entity.domain == "media_player";}).forEach((entity){ HACard mediaCard = HACard( name: entity.displayName, id: entity.entityId, - linkedEntity: entity, + linkedEntity: EntityWrapper(entity: entity), type: "media-control" ); cards.add(mediaCard); diff --git a/lib/ui_widgets/entities_card.dart b/lib/ui_widgets/entities_card.dart index 7439892..f2d1a24 100644 --- a/lib/ui_widgets/entities_card.dart +++ b/lib/ui_widgets/entities_card.dart @@ -11,7 +11,7 @@ class EntitiesCardWidget extends StatelessWidget { @override Widget build(BuildContext context) { - if ((card.linkedEntity!= null) && (card.linkedEntity.isHidden)) { + if ((card.linkedEntity!= null) && (card.linkedEntity.entity.isHidden)) { return Container(width: 0.0, height: 0.0,); } List body = []; @@ -24,12 +24,16 @@ class EntitiesCardWidget extends StatelessWidget { List _buildCardBody(BuildContext context) { List result = []; - card.entities.forEach((Entity entity) { - if (!entity.isHidden) { + card.entities.forEach((EntityWrapper entity) { + if (!entity.entity.isHidden) { result.add( Padding( padding: EdgeInsets.fromLTRB(0.0, Sizes.rowPadding, 0.0, Sizes.rowPadding), - child: entity.buildDefaultWidget(context), + child: EntityModel( + entity: entity, + handleTap: true, + child: entity.entity.buildDefaultWidget(context) + ), )); } }); diff --git a/lib/ui_widgets/glance_card.dart b/lib/ui_widgets/glance_card.dart index c202b6b..cfc094f 100644 --- a/lib/ui_widgets/glance_card.dart +++ b/lib/ui_widgets/glance_card.dart @@ -11,7 +11,7 @@ class GlanceCardWidget extends StatelessWidget { @override Widget build(BuildContext context) { - if ((card.linkedEntity!= null) && (card.linkedEntity.isHidden)) { + if ((card.linkedEntity!= null) && (card.linkedEntity.entity.isHidden)) { return Container(width: 0.0, height: 0.0,); } List rows = []; @@ -25,14 +25,18 @@ class GlanceCardWidget extends StatelessWidget { Widget _buildRows(BuildContext context) { List result = []; double width = MediaQuery.of(context).size.width - Sizes.leftWidgetPadding - (2*Sizes.rightWidgetPadding); - List toShow = card.entities.where((entity) {return !entity.isHidden;}).toList(); + List toShow = card.entities.where((entity) {return !entity.entity.isHidden;}).toList(); int columnsCount = toShow.length >= card.columnsCount ? card.columnsCount : toShow.length; - card.entities.forEach((Entity entity) { - if (!entity.isHidden) { + card.entities.forEach((EntityWrapper entity) { + if (!entity.entity.isHidden) { result.add( SizedBox( width: width / columnsCount, - child: entity.buildGlanceWidget(context), + child: EntityModel( + entity: entity, + child: entity.entity.buildGlanceWidget(context, card.showName, card.showState), + handleTap: true + ), ) ); } diff --git a/lib/ui_widgets/media_control_card.dart b/lib/ui_widgets/media_control_card.dart index fa1c26c..79d4f19 100644 --- a/lib/ui_widgets/media_control_card.dart +++ b/lib/ui_widgets/media_control_card.dart @@ -11,7 +11,7 @@ class MediaControlCardWidget extends StatelessWidget { @override Widget build(BuildContext context) { - if ((card.linkedEntity == null) || (card.linkedEntity.isHidden)) { + if ((card.linkedEntity == null) || (card.linkedEntity.entity.isHidden)) { return Container(width: 0.0, height: 0.0,); } diff --git a/lib/ui_widgets/unsupported_card.dart b/lib/ui_widgets/unsupported_card.dart index 3ebd9c2..673cc87 100644 --- a/lib/ui_widgets/unsupported_card.dart +++ b/lib/ui_widgets/unsupported_card.dart @@ -11,7 +11,7 @@ class UnsupportedCardWidget extends StatelessWidget { @override Widget build(BuildContext context) { - if ((card.linkedEntity!= null) && (card.linkedEntity.isHidden)) { + if ((card.linkedEntity!= null) && (card.linkedEntity.entity.isHidden)) { return Container(width: 0.0, height: 0.0,); } List body = []; @@ -32,7 +32,11 @@ class UnsupportedCardWidget extends StatelessWidget { result.addAll([ Padding( padding: EdgeInsets.fromLTRB(0.0, Sizes.rowPadding, 0.0, Sizes.rowPadding), - child: card.linkedEntity.buildDefaultWidget(context), + child: EntityModel( + entity: card.linkedEntity, + handleTap: true, + child: card.linkedEntity.entity.buildDefaultWidget(context) + ), ) ]); } else { diff --git a/pubspec.yaml b/pubspec.yaml index 887c711..1566602 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,7 +1,7 @@ name: hass_client description: Home Assistant Android Client -version: 0.3.8+64 +version: 0.3.8+65 environment: sdk: ">=2.0.0-dev.68.0 <3.0.0"