From f9b2d7d84cac3b95e326bd9deb3b485e5a274dc7 Mon Sep 17 00:00:00 2001 From: Yegor Vialov Date: Tue, 2 Jun 2020 21:36:45 +0000 Subject: [PATCH] Fix light card with wrong domain entity. Show custom cards if there is entitites --- lib/cards/card.class.dart | 14 +++++++++++++- lib/cards/error_card.dart | 21 +++++++++++++++++---- lib/cards/unsupported_card.dart | 2 +- lib/cards/widgets/card_wrapper.widget.dart | 4 +++- 4 files changed, 34 insertions(+), 7 deletions(-) diff --git a/lib/cards/card.class.dart b/lib/cards/card.class.dart index e97a9f6..5d73f8d 100644 --- a/lib/cards/card.class.dart +++ b/lib/cards/card.class.dart @@ -90,6 +90,12 @@ class CardData { return BadgesData(rawData); break; default: + if (rawData.containsKey('entity')) { + rawData['entities'] = [rawData['entity']]; + } + if (rawData.containsKey('entities') && rawData['entities'] is List) { + return EntitiesCardData(rawData); + } return CardData(null); } } catch (error, stacktrace) { @@ -374,7 +380,13 @@ class LightCardData extends CardData { @override Widget buildCardWidget() { - return LightCard(card: this); + if (this.entity != null && this.entity.entity is LightEntity) { + return LightCard(card: this); + } + return ErrorCard( + errorText: 'Specify an entity from within the light domain.', + showReportButton: false, + ); } LightCardData(rawData) : super(rawData) { diff --git a/lib/cards/error_card.dart b/lib/cards/error_card.dart index 58d3a12..ea2410c 100644 --- a/lib/cards/error_card.dart +++ b/lib/cards/error_card.dart @@ -2,12 +2,21 @@ part of '../main.dart'; class ErrorCard extends StatelessWidget { final ErrorCardData card; + final String errorText; + final bool showReportButton; - const ErrorCard({Key key, this.card}) : super(key: key); + const ErrorCard({Key key, this.card, this.errorText, this.showReportButton: true}) : super(key: key); @override Widget build(BuildContext context) { + String error; + if (errorText == null) { + error = 'There was an error showing ${card?.type}'; + } else { + error = errorText; + } return CardWrapper( + color: Theme.of(context).errorColor, child: Padding( padding: EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, Sizes.rowPadding, Sizes.rightWidgetPadding, Sizes.rowPadding), child: Column( @@ -15,21 +24,25 @@ class ErrorCard extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( - 'There was an error rendering card: ${card.type}. Please copy card config to clipboard and report this issue. Thanks!', + error, textAlign: TextAlign.center, ), + card != null ? RaisedButton( onPressed: () { Clipboard.setData(new ClipboardData(text: card.cardConfig)); }, child: Text('Copy card config'), - ), + ) : + Container(width: 0, height: 0), + showReportButton ? RaisedButton( onPressed: () { Launcher.launchURLInBrowser("https://github.com/estevez-dev/ha_client/issues/new?assignees=&labels=&template=bug_report.md&title="); }, child: Text('Report issue'), - ) + ) : + Container(width: 0, height: 0) ], ), ) diff --git a/lib/cards/unsupported_card.dart b/lib/cards/unsupported_card.dart index 78bb604..c3b2e5d 100644 --- a/lib/cards/unsupported_card.dart +++ b/lib/cards/unsupported_card.dart @@ -7,6 +7,6 @@ class UnsupportedCard extends StatelessWidget { @override Widget build(BuildContext context) { - return Container(); + return Container(height: 20); } } \ No newline at end of file diff --git a/lib/cards/widgets/card_wrapper.widget.dart b/lib/cards/widgets/card_wrapper.widget.dart index 978a4b1..4a9221a 100644 --- a/lib/cards/widgets/card_wrapper.widget.dart +++ b/lib/cards/widgets/card_wrapper.widget.dart @@ -4,12 +4,14 @@ class CardWrapper extends StatelessWidget { final Widget child; final EdgeInsets padding; + final Color color; - const CardWrapper({Key key, this.child, this.padding: const EdgeInsets.all(0)}) : super(key: key); + const CardWrapper({Key key, this.child, this.color, this.padding: const EdgeInsets.all(0)}) : super(key: key); @override Widget build(BuildContext context) { return Card( + color: color, child: Padding( padding: padding, child: child