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;
|
EntityWrapper get entity => entities.isNotEmpty ? entities[0] : null;
|
||||||
|
|
||||||
factory CardData.parse(Map<String, dynamic> rawData) {
|
factory CardData.parse(Map<String, dynamic> rawData) {
|
||||||
|
try {
|
||||||
switch (rawData['type']) {
|
switch (rawData['type']) {
|
||||||
case CardType.ENTITIES:
|
case CardType.ENTITIES:
|
||||||
return EntitiesCardData(rawData);
|
return EntitiesCardData(rawData);
|
||||||
@ -64,13 +65,24 @@ class CardData {
|
|||||||
}
|
}
|
||||||
return CardData(rawData);
|
return CardData(rawData);
|
||||||
}
|
}
|
||||||
|
} catch (error) {
|
||||||
|
Logger.e('Error parsing card: $error');
|
||||||
|
return ErrorCardData(rawData);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CardData(Map<String, dynamic> rawData) {
|
CardData(Map<String, dynamic> rawData) {
|
||||||
|
if (rawData != null) {
|
||||||
type = rawData['type'] ?? CardType.ENTITIES;
|
type = rawData['type'] ?? CardType.ENTITIES;
|
||||||
conditions = rawData['conditions'] ?? [];
|
conditions = rawData['conditions'] ?? [];
|
||||||
showEmpty = rawData['show_empty'] ?? true;
|
showEmpty = rawData['show_empty'] ?? true;
|
||||||
stateFilter = rawData['state_filter'] ?? [];
|
stateFilter = rawData['state_filter'] ?? [];
|
||||||
|
} else {
|
||||||
|
type = CardType.UNKNOWN;
|
||||||
|
conditions = [];
|
||||||
|
showEmpty = true;
|
||||||
|
stateFilter = [];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Widget buildCardWidget() {
|
Widget buildCardWidget() {
|
||||||
@ -288,7 +300,7 @@ class ButtonCardData extends CardData {
|
|||||||
ButtonCardData(Map<String, dynamic> rawData) : super(rawData) {
|
ButtonCardData(Map<String, dynamic> rawData) : super(rawData) {
|
||||||
//Parsing card data
|
//Parsing card data
|
||||||
name = rawData['name'];
|
name = rawData['name'];
|
||||||
icon = rawData['icon'];
|
icon = rawData['icondd'].replace('d','');
|
||||||
showName = rawData['show_name'] ?? true;
|
showName = rawData['show_name'] ?? true;
|
||||||
showIcon = rawData['show_icon'] ?? true;
|
showIcon = rawData['show_icon'] ?? true;
|
||||||
stateColor = rawData['state_color'] ?? 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 MARKDOWN = "markdown";
|
||||||
static const LIGHT = "light";
|
static const LIGHT = "light";
|
||||||
static const ENTITY_FILTER = "entity-filter";
|
static const ENTITY_FILTER = "entity-filter";
|
||||||
|
static const UNKNOWN = "unknown";
|
||||||
}
|
}
|
||||||
|
|
||||||
class Sizes {
|
class Sizes {
|
||||||
|
@ -142,6 +142,7 @@ part 'cards/horizontal_srack_card.dart';
|
|||||||
part 'cards/markdown_card.dart';
|
part 'cards/markdown_card.dart';
|
||||||
part 'cards/media_control_card.dart';
|
part 'cards/media_control_card.dart';
|
||||||
part 'cards/unsupported_card.dart';
|
part 'cards/unsupported_card.dart';
|
||||||
|
part 'cards/error_card.dart';
|
||||||
part 'cards/vertical_stack_card.dart';
|
part 'cards/vertical_stack_card.dart';
|
||||||
part 'cards/glance_card.dart';
|
part 'cards/glance_card.dart';
|
||||||
part 'pages/play_media.page.dart';
|
part 'pages/play_media.page.dart';
|
||||||
|
Reference in New Issue
Block a user