summaryrefslogtreecommitdiffstats
path: root/lib/widgets
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2022-12-24 15:30:10 -0500
committerScott Murray <scott.murray@konsulko.com>2022-12-29 01:22:55 -0500
commitfe23ca5ecdabd698917c4e84915151fc32cb335e (patch)
treee9cad647d01f546107dfa820363a80c48e33c6e2 /lib/widgets
parent467221c592123125d6439871f02ef5e9ca0fe777 (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.dart115
-rw-r--r--lib/widgets/left_climate.dart144
-rw-r--r--lib/widgets/right_climate.dart65
-rw-r--r--lib/widgets/slider.dart49
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',
+ ),
+ );
+ }
+}