Skip to content

Commit

Permalink
fix: heat setpoint working
Browse files Browse the repository at this point in the history
  • Loading branch information
Suraj Adhikari committed Feb 16, 2022
1 parent 31c5aba commit be1113f
Showing 1 changed file with 85 additions and 62 deletions.
147 changes: 85 additions & 62 deletions lib/traits/thermostat_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:yonomi_device_widgets/mixins/toast_notifications.dart';
import 'package:yonomi_device_widgets/providers/thermostat_provider.dart';
import 'package:yonomi_device_widgets/ui/widget_style_constants.dart';
import 'package:yonomi_platform_sdk/yonomi-sdk.dart';
import 'package:flutter/src/widgets/framework.dart' as framework;

class ThermostatWidget extends StatelessWidget with ToastNotifications {
final ThermostatProvider _thermostatProvider;
Expand Down Expand Up @@ -43,7 +44,6 @@ class ThermostatWidget extends StatelessWidget with ToastNotifications {
)
],
),
_fanMode(context),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expand All @@ -52,80 +52,45 @@ class ThermostatWidget extends StatelessWidget with ToastNotifications {
)
],
),
_fanMode(context),
],
);
}
}

Widget _setTemperature() {
final currentMode = _thermostatProvider.getModeState;
if (currentMode != AvailableThermostatMode.COOL ||
currentMode != AvailableThermostatMode.HEAT ||
currentMode != AvailableThermostatMode.AUTO) {
if (!(currentMode == AvailableThermostatMode.COOL ||
currentMode == AvailableThermostatMode.HEAT)) {
return Container();
}
final coolTemperatureRange = _thermostatProvider.getCoolTemperatureRange;
final heatTemperatureRange = _thermostatProvider.getHeatTemperatureRange;
final isCool = currentMode == AvailableThermostatMode.COOL;
final temperatureRange = isCool
? _thermostatProvider.getCoolTemperatureRange!
: _thermostatProvider.getHeatTemperatureRange!;
double value = _thermostatProvider.getTargetTemperatureState!;

final coolSlider = Slider(
value: _thermostatProvider.getTargetTemperatureState!,
min: coolTemperatureRange!.min,
max: coolTemperatureRange.max,
divisions: (coolTemperatureRange.max - coolTemperatureRange.min).toInt(),
onChanged: (value) => _thermostatProvider.setPointAction(
_thermostatProvider.deviceDetail!.id, value),
);
if ((value < temperatureRange.min)) {
value = temperatureRange.min;
}

final heatSlider = Slider(
value: _thermostatProvider.getTargetTemperatureState!,
min: heatTemperatureRange!.min,
max: heatTemperatureRange.max,
divisions: (heatTemperatureRange.max - heatTemperatureRange.min).toInt(),
onChanged: (value) => _thermostatProvider.setPointAction(
_thermostatProvider.deviceDetail!.id, value),
);
if ((value > temperatureRange.max)) {
value = temperatureRange.max;
}

final bothSliders = Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Cool',
style: TextStyle(color: _textColor),
),
SizedBox(width: 8.0),
coolSlider,
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Heat',
style: TextStyle(color: _textColor),
),
SizedBox(width: 8.0),
heatSlider,
],
),
],
return TemperatureRangeSlider(
value,
temperatureRange.min,
temperatureRange.max,
isCool,
(value) {
// Add 1s delay
Future.delayed(Duration(seconds: 1), () {
_thermostatProvider.setPointAction(
_thermostatProvider.deviceDetail!.id, value);
});
},
);

final temperatureRange = (currentMode == AvailableThermostatMode.COOL)
? _thermostatProvider.getCoolTemperatureRange
: _thermostatProvider.getHeatTemperatureRange;
final maxRange = temperatureRange?.max;
final minRange = temperatureRange?.min;
if ((maxRange == null || minRange == null) || (maxRange == minRange)) {
return Container();
}
if (currentMode == AvailableThermostatMode.AUTO) {
return bothSliders;
}
return (currentMode == AvailableThermostatMode.COOL)
? coolSlider
: heatSlider;
}

Widget _fanMode(BuildContext context) {
Expand Down Expand Up @@ -335,3 +300,61 @@ class ThermostatWidget extends StatelessWidget with ToastNotifications {
}
}
}

class TemperatureRangeSlider extends StatefulWidget {
late final sliderValue;
late final min;
late final max;
late final isCool;
late final onChangeEnd;

TemperatureRangeSlider(double sliderValue, double min, double max,
bool isCool, void Function(double)? onChangeEnd,
{Key? key})
: super(key: key) {
this.sliderValue = sliderValue;
this.min = min;
this.max = max;
this.isCool = isCool;
this.onChangeEnd = onChangeEnd;
}

@override
framework.State<TemperatureRangeSlider> createState() =>
_TemperatureRangeSlider(sliderValue, min, max, isCool, onChangeEnd);
}

class _TemperatureRangeSlider extends framework.State<TemperatureRangeSlider> {
late double _currentSliderValue;
late final min;
late final max;
late final isCool;
late final onChangeEnd;

_TemperatureRangeSlider(double sliderValue, double min, double max,
bool isCool, void Function(double)? onChangeEnd) {
this._currentSliderValue = sliderValue;
this.min = min;
this.max = max;
this.isCool = isCool;
this.onChangeEnd = onChangeEnd;
}

@override
Widget build(BuildContext context) {
return Slider(
value: _currentSliderValue,
label: _currentSliderValue.round().toString(),
min: min,
max: max,
divisions: 100,
thumbColor: isCool ? Colors.blue : Colors.red,
onChangeEnd: onChangeEnd,
onChanged: (value) {
setState(() {
_currentSliderValue = value;
});
},
);
}
}

0 comments on commit be1113f

Please sign in to comment.