diff --git a/lib/entity_class/entity.class.dart b/lib/entity_class/entity.class.dart index bdaf699..f221429 100644 --- a/lib/entity_class/entity.class.dart +++ b/lib/entity_class/entity.class.dart @@ -91,13 +91,6 @@ class Entity { ); } - Widget buildGlanceWidget(BuildContext context, bool showName, bool showState) { - return GlanceEntityContainer( - showName: showName, - showState: showState, - ); - } - Widget _buildStatePart(BuildContext context) { return SimpleEntityState(); } diff --git a/lib/entity_widgets/glance_entity_container.dart b/lib/entity_widgets/glance_entity_container.dart index b4293ae..cac22ec 100644 --- a/lib/entity_widgets/glance_entity_container.dart +++ b/lib/entity_widgets/glance_entity_container.dart @@ -4,51 +4,97 @@ class GlanceEntityContainer extends StatelessWidget { final bool showName; final bool showState; + final bool nameInTheBottom; + final double iconSize; + final double nameFontSize; + final bool expanded; GlanceEntityContainer({ - Key key, @required this.showName, @required this.showState, + Key key, + @required this.showName, + @required this.showState, + this.nameInTheBottom: false, + this.iconSize: Sizes.iconSize, + this.nameFontSize: Sizes.smallFontSize, + this.expanded: false }) : super(key: key); @override Widget build(BuildContext context) { final EntityWrapper entityWrapper = EntityModel.of(context).entityWrapper; List result = []; - if (showName) { + if (!nameInTheBottom) { + if (showName) { + result.add(EntityName( + padding: EdgeInsets.only(bottom: Sizes.rowPadding), + textOverflow: TextOverflow.ellipsis, + wordsWrap: false, + textAlign: TextAlign.center, + fontSize: nameFontSize, + )); + } + } else { + if (showState) { + result.add(SimpleEntityState( + textAlign: TextAlign.center, + expanded: false, + padding: EdgeInsets.only(top: Sizes.rowPadding), + )); + } + } + result.add( + EntityIcon( + padding: EdgeInsets.all(0.0), + iconSize: iconSize, + ) + ); + if (!nameInTheBottom) { + if (showState) { + result.add(SimpleEntityState( + textAlign: TextAlign.center, + expanded: false, + padding: EdgeInsets.only(top: Sizes.rowPadding), + )); + } + } else { result.add(EntityName( padding: EdgeInsets.only(bottom: Sizes.rowPadding), textOverflow: TextOverflow.ellipsis, wordsWrap: false, textAlign: TextAlign.center, - fontSize: Sizes.smallFontSize, + fontSize: nameFontSize, )); } - result.add( - EntityIcon( - padding: EdgeInsets.all(0.0), - iconSize: Sizes.iconSize, - ) - ); - if (showState) { - result.add(SimpleEntityState( - textAlign: TextAlign.center, - expanded: false, - padding: EdgeInsets.only(top: Sizes.rowPadding), - )); - } - return Center( - child: InkResponse( - child: ConstrainedBox( - constraints: BoxConstraints(minWidth: Sizes.iconSize*2), + + if (expanded) { + return Container( + child: InkWell( child: Column( mainAxisSize: MainAxisSize.min, //mainAxisAlignment: MainAxisAlignment.start, //crossAxisAlignment: CrossAxisAlignment.center, children: result, ), + onTap: () => entityWrapper.handleTap(), + onLongPress: () => entityWrapper.handleHold(), ), - onTap: () => entityWrapper.handleTap(), - onLongPress: () => entityWrapper.handleHold(), - ), - ); + ); + } else { + return Center( + child: InkResponse( + child: ConstrainedBox( + constraints: BoxConstraints(minWidth: Sizes.iconSize * 2), + child: Column( + mainAxisSize: MainAxisSize.min, + //mainAxisAlignment: MainAxisAlignment.start, + //crossAxisAlignment: CrossAxisAlignment.center, + children: result, + ), + ), + onTap: () => entityWrapper.handleTap(), + onLongPress: () => entityWrapper.handleHold(), + ), + ); + } } } \ No newline at end of file diff --git a/lib/home_assistant.class.dart b/lib/home_assistant.class.dart index 0de81c1..d868805 100644 --- a/lib/home_assistant.class.dart +++ b/lib/home_assistant.class.dart @@ -433,7 +433,7 @@ class HomeAssistant { } else { HACard card = HACard( id: "card", - name: rawCard["title"], + name: rawCard["title"] ?? rawCard["name"], type: rawCard['type'], columnsCount: rawCard['columns'] ?? 4, showName: rawCard['show_name'] ?? true, diff --git a/lib/main.dart b/lib/main.dart index 3533ae8..678960f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -80,6 +80,7 @@ part 'ui_class/sizes_class.dart'; part 'ui_widgets/view.dart'; part 'ui_widgets/entities_card.dart'; part 'ui_widgets/glance_card.dart'; +part 'ui_widgets/entity_button_card.dart'; part 'ui_widgets/unsupported_card.dart'; part 'ui_widgets/media_control_card.dart'; part 'ui_widgets/card_header_widget.dart'; diff --git a/lib/ui_class/card.class.dart b/lib/ui_class/card.class.dart index 71c6e69..b1ef29f 100644 --- a/lib/ui_class/card.class.dart +++ b/lib/ui_class/card.class.dart @@ -41,6 +41,12 @@ class HACard { ); } + case CardType.entityButton: { + return EntityButtonCardWidget( + card: this, + ); + } + case CardType.weatherForecast: case CardType.thermostat: case CardType.sensor: @@ -51,7 +57,6 @@ class HACard { case CardType.map: case CardType.iframe: case CardType.gauge: - case CardType.entityButton: case CardType.conditional: case CardType.alarmPanel: { return UnsupportedCardWidget( diff --git a/lib/ui_class/sizes_class.dart b/lib/ui_class/sizes_class.dart index dda4f6b..12d12f6 100644 --- a/lib/ui_class/sizes_class.dart +++ b/lib/ui_class/sizes_class.dart @@ -5,7 +5,7 @@ class Sizes { static const leftWidgetPadding = 8.0; static const extendedWidgetHeight = 50.0; static const iconSize = 28.0; - static const largeIconSize = 34.0; + static const largeIconSize = 46.0; static const stateFontSize = 15.0; static const nameFontSize = 15.0; static const smallFontSize = 14.0; diff --git a/lib/ui_widgets/entity_button_card.dart b/lib/ui_widgets/entity_button_card.dart new file mode 100644 index 0000000..dbfb025 --- /dev/null +++ b/lib/ui_widgets/entity_button_card.dart @@ -0,0 +1,37 @@ +part of '../main.dart'; + +class EntityButtonCardWidget extends StatelessWidget { + + final HACard card; + + const EntityButtonCardWidget({ + Key key, + this.card + }) : super(key: key); + + @override + Widget build(BuildContext context) { + if (card.linkedEntity!= null && card.linkedEntity.entity.isHidden) { + return Container(width: 0.0, height: 0.0,); + } + card.linkedEntity.displayName = card.name; + return Card( + child: Padding( + padding: EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, Sizes.rowPadding, Sizes.rightWidgetPadding, Sizes.rowPadding), + child: EntityModel( + entityWrapper: card.linkedEntity, + child: GlanceEntityContainer( + showName: true, + showState: false, + nameInTheBottom: true, + iconSize: Sizes.largeIconSize, + nameFontSize: Sizes.nameFontSize, + expanded: true, + ), + handleTap: true + ), + ) + ); + } + +} \ No newline at end of file diff --git a/lib/ui_widgets/glance_card.dart b/lib/ui_widgets/glance_card.dart index dc28cd2..541cdc8 100644 --- a/lib/ui_widgets/glance_card.dart +++ b/lib/ui_widgets/glance_card.dart @@ -33,7 +33,10 @@ class GlanceCardWidget extends StatelessWidget { widthFactor: 1/columnsCount, child: EntityModel( entityWrapper: entity, - child: entity.entity.buildGlanceWidget(context, card.showName, card.showState), + child: GlanceEntityContainer( + showName: card.showName, + showState: card.showState, + ), handleTap: true ), ) diff --git a/pubspec.lock b/pubspec.lock index fd7c2b6..149dcea 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -35,7 +35,7 @@ packages: name: cached_network_image url: "https://pub.dartlang.org" source: hosted - version: "0.5.0+1" + version: "0.5.1" charcode: dependency: transitive description: @@ -83,7 +83,7 @@ packages: description: path: "." ref: HEAD - resolved-ref: c5727795659e886a7db8b39a14e2c8987280fe1f + resolved-ref: e26916e095244a7e5ea61315b030d298d127ed26 url: "https://github.com/MarkOSullivan94/dart_config.git" source: git version: "0.5.0" @@ -126,7 +126,7 @@ packages: name: flutter_launcher_icons url: "https://pub.dartlang.org" source: hosted - version: "0.6.1" + version: "0.7.0" flutter_test: dependency: "direct dev" description: flutter @@ -327,5 +327,5 @@ packages: source: hosted version: "2.1.15" sdks: - dart: ">=2.0.0 <=2.1.0-dev.9.3.flutter-9c07fb64c4" + dart: ">=2.0.0 <3.0.0" flutter: ">=0.5.6 <2.0.0"