diff options
author | Scott Murray <scott.murray@konsulko.com> | 2022-12-24 15:30:10 -0500 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2022-12-29 01:22:55 -0500 |
commit | fe23ca5ecdabd698917c4e84915151fc32cb335e (patch) | |
tree | e9cad647d01f546107dfa820363a80c48e33c6e2 /lib/widgets | |
parent | 467221c592123125d6439871f02ef5e9ca0fe777 (diff) |
Rework temperature controls
Rework the temperature controls to use NumberPicker widgets so they
function more like a user would expect. The associated Riverpod
providers have been updated to track the temperature value directly,
and some minor layout tweaks have also been made.
Bug-AGL: SPEC-4644
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: I069e0bd53c79d73cc7a60045309efdfeb9409fbc
Diffstat (limited to 'lib/widgets')
-rw-r--r-- | lib/widgets/Right_climate.dart | 115 | ||||
-rw-r--r-- | lib/widgets/left_climate.dart | 144 | ||||
-rw-r--r-- | lib/widgets/right_climate.dart | 65 | ||||
-rw-r--r-- | lib/widgets/slider.dart | 49 |
4 files changed, 163 insertions, 210 deletions
diff --git a/lib/widgets/Right_climate.dart b/lib/widgets/Right_climate.dart deleted file mode 100644 index d47a659..0000000 --- a/lib/widgets/Right_climate.dart +++ /dev/null @@ -1,115 +0,0 @@ - -// SPDX-License-Identifier: Apache-2.0 - - -import 'dart:io'; - -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; -import 'package:flutter_hvac/kuksa-server/vehicle_methods.dart'; -import 'package:flutter_hvac/provider.dart'; -import 'package:flutter_hvac/size.dart'; - -class ScrollContainerRight extends ConsumerWidget { - WebSocket socket; - ScrollContainerRight({Key? key, required this.socket}) : super(key: key); - - List<int> mylist = [ - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32, - ]; - - - final ItemScrollController itemScrollController = ItemScrollController(); - final ItemPositionsListener itemPositionsListener = - ItemPositionsListener.create(); - - @override - Widget build(BuildContext context, ref) { - int val = ref.watch(RightSlider).toInt(); - - VISS.set(socket,ref, 'Vehicle.Cabin.HVAC.Station.Row1.Right.Temperature', - mylist[val].toString()); - VISS.set(socket, ref,'Vehicle.Cabin.HVAC.Station.Row2.Right.Temperature', - mylist[val].toString()); - - if (itemScrollController.isAttached) { - itemScrollController.scrollTo( - index: val.toInt()+2, - duration: Duration(milliseconds: 500), - curve: Curves.easeInOutCubic, - alignment: 1); - } - - - return SingleChildScrollView( - child: SizedBox( - height: SizeConfig.screenHeight*0.30, - width: SizeConfig.screenWidth*0.25, - child: AnimatedContainer( - // color: Colors.red, - duration: Duration(milliseconds: 300), - decoration: BoxDecoration( - border: Border.all( - color: Colors.white, - width: 2, - ), - borderRadius: BorderRadius.circular(12), - ), - child: ScrollablePositionedList.builder( - physics: NeverScrollableScrollPhysics(), - scrollDirection: Axis.vertical, - itemCount: mylist.length, - itemScrollController: itemScrollController, - itemPositionsListener: itemPositionsListener, - itemBuilder: (context, index) { - return Container( - decoration: BoxDecoration( - - gradient: index == val - ? RadialGradient( - colors: [Colors.white54, Colors.black], radius: SizeConfig.safeBlockVertical*0.7) - : null, - ), - child: ListTile( - subtitle: Center( - child: Text( - '' + mylist[index].toString() + '°', - style: index == val ? TextStyle( - color: Colors.lightBlueAccent, - fontWeight: FontWeight.w700, - fontSize: SizeConfig.fontsize*4, - ):TextStyle( - color: Colors.white54, - fontWeight: FontWeight.w700, - fontSize: SizeConfig.fontsize*4, - ), - ), - ), - - minVerticalPadding: 5, - - ), - ); - }), - ), - ), - ); - } -} diff --git a/lib/widgets/left_climate.dart b/lib/widgets/left_climate.dart index 2fb30a0..b45eb0b 100644 --- a/lib/widgets/left_climate.dart +++ b/lib/widgets/left_climate.dart @@ -1,112 +1,66 @@ // SPDX-License-Identifier: Apache-2.0 +import 'dart:io'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:scrollable_positioned_list/scrollable_positioned_list.dart'; import 'package:flutter_hvac/provider.dart'; -import 'dart:io'; +import 'package:numberpicker/numberpicker.dart'; import '../kuksa-server/vehicle_methods.dart'; import '../size.dart'; -class ScrollContainerLeft extends ConsumerWidget { - WebSocket socket; - ScrollContainerLeft({Key? key, required this.socket}) : super(key: key); - - List<int> mylist = [ - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26, - 27, - 28, - 29, - 30, - 31, - 32 - ]; +class LeftClimateScrollWidget extends ConsumerWidget { + LeftClimateScrollWidget({Key? key, required this.socket}) : super(key: key); + WebSocket socket; - final ItemScrollController itemScrollController = ItemScrollController(); - final ItemPositionsListener itemPositionsListener = - ItemPositionsListener.create(); @override Widget build(BuildContext context, ref) { - int val = ref.watch(LeftSlider).toInt(); + final int _selectedTemp = ref.watch(LeftClimateTempProvider); - VISS.set(socket,ref, 'Vehicle.Cabin.HVAC.Station.Row1.Left.Temperature', - mylist[val].toString()); - VISS.set(socket,ref, 'Vehicle.Cabin.HVAC.Station.Row2.Left.Temperature', - mylist[val].toString()); - - - if (itemScrollController.isAttached) { - itemScrollController.scrollTo( - index: val.toInt() + 2, - duration: Duration(milliseconds: 500), - curve: Curves.easeInOutCubic, - alignment: 1); - } - - return SingleChildScrollView( - child: SizedBox( - height: SizeConfig.screenHeight*0.30, - width: SizeConfig.screenWidth*0.25, - child: AnimatedContainer( - // color: Colors.red, - duration: Duration(milliseconds: 500), - decoration: BoxDecoration( - border: Border.all( - color: Colors.white, - width: 2, + return SizedBox( + width: SizeConfig.screenWidth * 0.25, + height: SizeConfig.screenHeight * 0.30, + child: Container( + //color: Colors.red, + decoration: BoxDecoration( + border: Border.all( + color: Colors.white, + width: 2, + ), + borderRadius: BorderRadius.circular(12), ), - borderRadius: BorderRadius.circular(12), - ), - child: ScrollablePositionedList.builder( - physics: NeverScrollableScrollPhysics(), - scrollDirection: Axis.vertical, - itemCount: mylist.length, - itemScrollController: itemScrollController, - itemPositionsListener: itemPositionsListener, - itemBuilder: (context, index) { - return Container( - decoration: BoxDecoration( - - gradient: index == val - ? RadialGradient( - colors: [Colors.white54, Colors.black], radius: SizeConfig.safeBlockVertical*0.7) - : null, - ), - child: ListTile( - subtitle: Center( - child: Text( - '' + mylist[index].toString() + '°', - style: index == val ? TextStyle( - color: Colors.lightBlueAccent, - fontWeight: FontWeight.w700, - fontSize: SizeConfig.fontsize*4, - ):TextStyle( - color: Colors.white54, - fontWeight: FontWeight.w700, - fontSize: SizeConfig.fontsize*4, - ), - ), - ), - // tileColor: Colors.red, - minVerticalPadding: 5, - // selectedTileColor: , - ), - ); - }), - ), - ), - ); + child: NumberPicker( + minValue: 16, + maxValue: 33, + itemHeight: 100, + itemCount: 5, + value: _selectedTemp, + textMapper: (value) { + return value.toString() + '°'; + }, + onChanged: (value) { + ref.read(LeftClimateTempProvider.notifier).update(value); + VISS.set( + socket, + ref, + 'Vehicle.Cabin.HVAC.Station.Row1.Left.Temperature', + value.toString()); + VISS.set( + socket, + ref, + 'Vehicle.Cabin.HVAC.Station.Row2.Left.Temperature', + value.toString()); + }, + selectedTextStyle: TextStyle( + color: Colors.lightBlueAccent, + fontWeight: FontWeight.w700, + fontSize: SizeConfig.fontsize * 4, + ), + textStyle: TextStyle( + color: Colors.white54, + fontWeight: FontWeight.w700, + fontSize: SizeConfig.fontsize * 4, + )))); } } diff --git a/lib/widgets/right_climate.dart b/lib/widgets/right_climate.dart new file mode 100644 index 0000000..590b511 --- /dev/null +++ b/lib/widgets/right_climate.dart @@ -0,0 +1,65 @@ +// SPDX-License-Identifier: Apache-2.0 + +import 'dart:io'; +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_hvac/provider.dart'; +import 'package:numberpicker/numberpicker.dart'; + +import '../kuksa-server/vehicle_methods.dart'; +import '../size.dart'; + +class RightClimateScrollWidget extends ConsumerWidget { + RightClimateScrollWidget({Key? key, required this.socket}) : super(key: key); + + WebSocket socket; + + @override + Widget build(BuildContext context, ref) { + final int _selectedTemp = ref.watch(RightClimateTempProvider); + + return SizedBox( + width: SizeConfig.screenWidth * 0.25, + height: SizeConfig.screenHeight * 0.30, + child: Container( + decoration: BoxDecoration( + border: Border.all( + color: Colors.white, + width: 2, + ), + borderRadius: BorderRadius.circular(12), + ), + child: NumberPicker( + minValue: 16, + maxValue: 33, + itemHeight: 100, + itemCount: 5, + value: _selectedTemp, + textMapper: (value) { + return value.toString() + '°'; + }, + onChanged: (value) { + ref.read(RightClimateTempProvider.notifier).update(value); + VISS.set( + socket, + ref, + 'Vehicle.Cabin.HVAC.Station.Row1.Right.Temperature', + value.toString()); + VISS.set( + socket, + ref, + 'Vehicle.Cabin.HVAC.Station.Row2.Right.Temperature', + value.toString()); + }, + selectedTextStyle: TextStyle( + color: Colors.lightBlueAccent, + fontWeight: FontWeight.w700, + fontSize: SizeConfig.fontsize * 4, + ), + textStyle: TextStyle( + color: Colors.white54, + fontWeight: FontWeight.w700, + fontSize: SizeConfig.fontsize * 4, + )))); + } +} diff --git a/lib/widgets/slider.dart b/lib/widgets/slider.dart new file mode 100644 index 0000000..f8bd459 --- /dev/null +++ b/lib/widgets/slider.dart @@ -0,0 +1,49 @@ +// SPDX-License-Identifier: Apache-2.0 + +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_hvac/provider.dart'; + +import '../kuksa-server/vehicle_methods.dart'; +import '../size.dart'; + +class SliderControl extends ConsumerWidget { + WebSocket socket; + SliderControl({Key? key, required this.socket}) : super(key: key); + + @override + Widget build(BuildContext context, ref) { + return SizedBox( + height: SizeConfig.safeBlockVertical * 2, + width: SizeConfig.screenWidth * 0.5, + child: Slider( + value: ref.watch(fanSpeedProvider).toDouble(), + onChanged: (value) { + ref.read(fanSpeedProvider.notifier).update(value.toInt()); + VISS.set(socket, ref, 'Vehicle.Cabin.HVAC.Station.Row1.Left.FanSpeed', + value.toInt().toString()); + VISS.set( + socket, + ref, + 'Vehicle.Cabin.HVAC.Station.Row1.Right.FanSpeed', + value.toInt().toString()); + VISS.set(socket, ref, 'Vehicle.Cabin.HVAC.Station.Row2.Left.FanSpeed', + value.toInt().toString()); + VISS.set( + socket, + ref, + 'Vehicle.Cabin.HVAC.Station.Row2.Right.FanSpeed', + value.toInt().toString()); + }, + min: 0, + max: 100, + activeColor: Colors.green, + inactiveColor: Colors.white70, + thumbColor: Colors.grey, + label: 'Fan Speed', + ), + ); + } +} |