Compare commits

...

3 Commits

Author SHA1 Message Date
29ee360ec4 Remove test exception 2020-04-29 07:49:46 +00:00
c0faaafd04 0.8.6 2020-04-29 07:48:05 +00:00
bc045344a5 Handle card rendering errors to show in ui 2020-04-29 07:45:15 +00:00
5 changed files with 123 additions and 56 deletions

View File

@ -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() {
@ -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
View 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'),
)
],
),
)
);
}
}

View File

@ -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 {

View File

@ -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';
@ -155,7 +156,7 @@ EventBus eventBus = new EventBus();
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging(); final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin(); FlutterLocalNotificationsPlugin flutterLocalNotificationsPlugin = new FlutterLocalNotificationsPlugin();
const String appName = "HA Client"; const String appName = "HA Client";
const appVersionNumber = "0.8.5"; const appVersionNumber = "0.8.6";
const appVersionAdd = ""; const appVersionAdd = "";
const appVersion = "$appVersionNumber$appVersionAdd"; const appVersion = "$appVersionNumber$appVersionAdd";

View File

@ -1,7 +1,7 @@
name: hass_client name: hass_client
description: Home Assistant Android Client description: Home Assistant Android Client
version: 0.8.5+896 version: 0.8.6+897
environment: environment: