summaryrefslogtreecommitdiffstats
path: root/lib/widgets/left_climate.dart
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 06:34:45 +0000
commitd9c46db74ab0947ae50a47f1aa1a95cadd1020e8 (patch)
treee9cad647d01f546107dfa820363a80c48e33c6e2 /lib/widgets/left_climate.dart
parentb730a26f42117a50d308c50444d3bbb3f0aaa20c (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/left_climate.dart')
-rw-r--r--lib/widgets/left_climate.dart144
1 files changed, 49 insertions, 95 deletions
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,
+ ))));
}
}