Handle card rendering errors to show in ui
This commit is contained in:
parent
7d746fd546
commit
bc045344a5
@ -12,6 +12,7 @@ class CardData {
|
||||
EntityWrapper get entity => entities.isNotEmpty ? entities[0] : null;
|
||||
|
||||
factory CardData.parse(Map<String, dynamic> rawData) {
|
||||
try {
|
||||
switch (rawData['type']) {
|
||||
case CardType.ENTITIES:
|
||||
return EntitiesCardData(rawData);
|
||||
@ -64,13 +65,24 @@ class CardData {
|
||||
}
|
||||
return CardData(rawData);
|
||||
}
|
||||
} catch (error) {
|
||||
Logger.e('Error parsing card: $error');
|
||||
return ErrorCardData(rawData);
|
||||
}
|
||||
}
|
||||
|
||||
CardData(Map<String, dynamic> rawData) {
|
||||
if (rawData != null) {
|
||||
type = rawData['type'] ?? CardType.ENTITIES;
|
||||
conditions = rawData['conditions'] ?? [];
|
||||
showEmpty = rawData['show_empty'] ?? true;
|
||||
stateFilter = rawData['state_filter'] ?? [];
|
||||
} else {
|
||||
type = CardType.UNKNOWN;
|
||||
conditions = [];
|
||||
showEmpty = true;
|
||||
stateFilter = [];
|
||||
}
|
||||
}
|
||||
|
||||
Widget buildCardWidget() {
|
||||
@ -288,7 +300,7 @@ class ButtonCardData extends CardData {
|
||||
ButtonCardData(Map<String, dynamic> rawData) : super(rawData) {
|
||||
//Parsing card data
|
||||
name = rawData['name'];
|
||||
icon = rawData['icon'];
|
||||
icon = rawData['icondd'].replace('d','');
|
||||
showName = rawData['show_name'] ?? true;
|
||||
showIcon = rawData['show_icon'] ?? true;
|
||||
stateColor = rawData['state_color'] ?? true;
|
||||
@ -508,3 +520,18 @@ class MediaControlCardData extends CardData {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class ErrorCardData extends CardData {
|
||||
|
||||
String cardConfig;
|
||||
|
||||
@override
|
||||
Widget buildCardWidget() {
|
||||
return ErrorCard(card: this);
|
||||
}
|
||||
|
||||
ErrorCardData(Map<String, dynamic> rawData) : super(rawData) {
|
||||
cardConfig = '$rawData';
|
||||
}
|
||||
|
||||
}
|
||||
|
38
lib/cards/error_card.dart
Normal file
38
lib/cards/error_card.dart
Normal file
@ -0,0 +1,38 @@
|
||||
part of '../main.dart';
|
||||
|
||||
class ErrorCard extends StatelessWidget {
|
||||
final ErrorCardData card;
|
||||
|
||||
const ErrorCard({Key key, this.card}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return CardWrapper(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, Sizes.rowPadding, Sizes.rightWidgetPadding, Sizes.rowPadding),
|
||||
child: Column(
|
||||
mainAxisSize: MainAxisSize.min,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: <Widget>[
|
||||
Text(
|
||||
'There was an error rendering card: ${card.type}. Please copy card config to clipboard and report this issue. Thanks!',
|
||||
textAlign: TextAlign.center,
|
||||
),
|
||||
RaisedButton(
|
||||
onPressed: () {
|
||||
Clipboard.setData(new ClipboardData(text: card.cardConfig));
|
||||
},
|
||||
child: Text('Copy card config'),
|
||||
),
|
||||
RaisedButton(
|
||||
onPressed: () {
|
||||
Launcher.launchURL("https://github.com/estevez-dev/ha_client/issues/new?assignees=&labels=&template=bug_report.md&title=");
|
||||
},
|
||||
child: Text('Report issue'),
|
||||
)
|
||||
],
|
||||
),
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
@ -119,6 +119,7 @@ class CardType {
|
||||
static const MARKDOWN = "markdown";
|
||||
static const LIGHT = "light";
|
||||
static const ENTITY_FILTER = "entity-filter";
|
||||
static const UNKNOWN = "unknown";
|
||||
}
|
||||
|
||||
class Sizes {
|
||||
|
@ -142,6 +142,7 @@ part 'cards/horizontal_srack_card.dart';
|
||||
part 'cards/markdown_card.dart';
|
||||
part 'cards/media_control_card.dart';
|
||||
part 'cards/unsupported_card.dart';
|
||||
part 'cards/error_card.dart';
|
||||
part 'cards/vertical_stack_card.dart';
|
||||
part 'cards/glance_card.dart';
|
||||
part 'pages/play_media.page.dart';
|
||||
|
Reference in New Issue
Block a user