From 8a0d5581d9e6a67ed707558aa7d33286765245be Mon Sep 17 00:00:00 2001 From: estevez Date: Tue, 2 Oct 2018 23:10:40 +0300 Subject: [PATCH] Resolves #111: Assumed state --- lib/entity_class/button_entity.class.dart | 4 ++-- lib/entity_class/datetime_entity.class.dart | 8 ++++---- lib/entity_class/entity.class.dart | 4 +++- lib/entity_class/select_entity.class.dart | 4 ++-- lib/entity_class/slider_entity.class.dart | 4 ++-- lib/entity_class/switch_entity.class.dart | 17 +++++++++++------ lib/entity_class/text_entity.class.dart | 4 ++-- 7 files changed, 26 insertions(+), 19 deletions(-) diff --git a/lib/entity_class/button_entity.class.dart b/lib/entity_class/button_entity.class.dart index 5727afc..71aba7b 100644 --- a/lib/entity_class/button_entity.class.dart +++ b/lib/entity_class/button_entity.class.dart @@ -3,7 +3,7 @@ part of '../main.dart'; class _ButtonEntityWidgetState extends _EntityWidgetState { @override - void sendNewState(newValue) { + void setNewState(newValue) { eventBus.fire(new ServiceCallEvent(widget.entity.domain, "turn_on", widget.entity.entityId, null)); } @@ -11,7 +11,7 @@ class _ButtonEntityWidgetState extends _EntityWidgetState { Widget _buildActionWidget(bool inCard, BuildContext context) { return FlatButton( onPressed: (() { - sendNewState(null); + setNewState(null); }), child: Text( "EXECUTE", diff --git a/lib/entity_class/datetime_entity.class.dart b/lib/entity_class/datetime_entity.class.dart index 74da02e..5edac78 100644 --- a/lib/entity_class/datetime_entity.class.dart +++ b/lib/entity_class/datetime_entity.class.dart @@ -28,7 +28,7 @@ class _DateTimeEntityWidgetState extends _EntityWidgetState { } @override - void sendNewState(newValue) { + void setNewState(newValue) { eventBus.fire(new ServiceCallEvent(widget.entity.domain, "set_datetime", widget.entity.entityId, newValue)); } @@ -56,17 +56,17 @@ class _DateTimeEntityWidgetState extends _EntityWidgetState { if (date != null) { if (hasTime) { _showTimePicker(context).then((time){ - sendNewState({"date": "${formatDate(date, [yyyy, '-', mm, '-', dd])}", "time": "${formatDate(DateTime(1970, 1, 1, time.hour, time.minute), [HH, ':', nn])}"}); + setNewState({"date": "${formatDate(date, [yyyy, '-', mm, '-', dd])}", "time": "${formatDate(DateTime(1970, 1, 1, time.hour, time.minute), [HH, ':', nn])}"}); }); } else { - sendNewState({"date": "${formatDate(date, [yyyy, '-', mm, '-', dd])}"}); + setNewState({"date": "${formatDate(date, [yyyy, '-', mm, '-', dd])}"}); } } }); } else if (hasTime) { _showTimePicker(context).then((time){ if (time != null) { - sendNewState({"time": "${formatDate(DateTime(1970, 1, 1, time.hour, time.minute), [HH, ':', nn])}"}); + setNewState({"time": "${formatDate(DateTime(1970, 1, 1, time.hour, time.minute), [HH, ':', nn])}"}); } }); } else { diff --git a/lib/entity_class/entity.class.dart b/lib/entity_class/entity.class.dart index 5dd198a..7908b96 100644 --- a/lib/entity_class/entity.class.dart +++ b/lib/entity_class/entity.class.dart @@ -22,6 +22,7 @@ class Entity { String _domain; String _entityId; String _state; + String assumedState; DateTime _lastUpdated; String get displayName => @@ -52,6 +53,7 @@ class Entity { _domain = rawData["entity_id"].split(".")[0]; _entityId = rawData["entity_id"]; _state = rawData["state"]; + assumedState = _state; _lastUpdated = DateTime.tryParse(rawData["last_updated"]); } @@ -179,7 +181,7 @@ class _EntityWidgetState extends State { eventBus.fire(new ShowEntityPageEvent(widget.entity)); } - void sendNewState(newState) { + void setNewState(newState) { return; } diff --git a/lib/entity_class/select_entity.class.dart b/lib/entity_class/select_entity.class.dart index 0a91044..99d6ef1 100644 --- a/lib/entity_class/select_entity.class.dart +++ b/lib/entity_class/select_entity.class.dart @@ -4,7 +4,7 @@ class _SelectEntityWidgetState extends _EntityWidgetState { List _listOptions = []; @override - void sendNewState(newValue) { + void setNewState(newValue) { eventBus.fire(new ServiceCallEvent(widget.entity.domain, "select_option", widget.entity.entityId, {"option": "$newValue"})); } @@ -28,7 +28,7 @@ class _SelectEntityWidgetState extends _EntityWidgetState { ); }).toList(), onChanged: (_) { - sendNewState(_); + setNewState(_); }, ), ); diff --git a/lib/entity_class/slider_entity.class.dart b/lib/entity_class/slider_entity.class.dart index fc18525..76a5df6 100644 --- a/lib/entity_class/slider_entity.class.dart +++ b/lib/entity_class/slider_entity.class.dart @@ -14,7 +14,7 @@ class _SliderEntityWidgetState extends _EntityWidgetState { } @override - void sendNewState(newValue) { + void setNewState(newValue) { eventBus.fire(new ServiceCallEvent(widget.entity.domain, "set_value", widget.entity.entityId, {"value": "${newValue.toString()}"})); } @@ -46,7 +46,7 @@ class _SliderEntityWidgetState extends _EntityWidgetState { (value.roundToDouble() / _multiplier).toString(), true));*/ }, onChangeEnd: (value) { - sendNewState(value.roundToDouble() / _multiplier); + setNewState(value.roundToDouble() / _multiplier); }, ), ), diff --git a/lib/entity_class/switch_entity.class.dart b/lib/entity_class/switch_entity.class.dart index 959730b..b0359fc 100644 --- a/lib/entity_class/switch_entity.class.dart +++ b/lib/entity_class/switch_entity.class.dart @@ -8,7 +8,15 @@ class _SwitchEntityWidgetState extends _EntityWidgetState { } @override - void sendNewState(newValue) { + void setNewState(newValue) { + setState(() { + widget.entity.assumedState = newValue ? 'on' : 'off'; + }); + Timer(Duration(seconds: 2), (){ + setState(() { + widget.entity.assumedState = widget.entity.state; + }); + }); eventBus.fire(new ServiceCallEvent( widget.entity.domain, (newValue as bool) ? "turn_on" : "turn_off", widget.entity.entityId, null)); } @@ -16,12 +24,9 @@ class _SwitchEntityWidgetState extends _EntityWidgetState { @override Widget _buildActionWidget(bool inCard, BuildContext context) { return Switch( - value: widget.entity.isOn, + value: widget.entity.assumedState == 'on', onChanged: ((switchState) { - sendNewState(switchState); - setState(() { - widget.entity.state = switchState ? 'on' : 'off'; - }); + setNewState(switchState); }), ); } diff --git a/lib/entity_class/text_entity.class.dart b/lib/entity_class/text_entity.class.dart index cc739f1..e98a118 100644 --- a/lib/entity_class/text_entity.class.dart +++ b/lib/entity_class/text_entity.class.dart @@ -19,7 +19,7 @@ class _TextEntityWidgetState extends _EntityWidgetState { } @override - void sendNewState(newValue) { + void setNewState(newValue) { if (validate(newValue)) { eventBus.fire(new ServiceCallEvent(widget.entity.domain, "set_value", widget.entity.entityId, {"value": "$newValue"})); @@ -43,7 +43,7 @@ class _TextEntityWidgetState extends _EntityWidgetState { void _focusListener() { if (!_focusNode.hasFocus && (_tmpValue != widget.entity.state)) { - sendNewState(_tmpValue); + setNewState(_tmpValue); } }