diff options
author | Scott Murray <scott.murray@konsulko.com> | 2023-09-20 12:26:45 -0400 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2023-09-20 12:48:19 -0400 |
commit | 6a853805d2479bf7b111511b1f94907e425c607a (patch) | |
tree | 343a651a5e4a944de525f585eceb752d9ed3840a /lib/home_page.dart | |
parent | 20d76f947ef9d4a9093df0e5ad04476963655173 (diff) |
Rework to use KUKSA.val databroker gRPC API
Rework to move from the WebSocket API with the older KUKSA.val
server to the gRPC "VAL" API of the databroker.
Changes include:
- All VISS WebSocket API code has been removed, and the signal
providers replumbed to be driven by a new VssClient class with
a hvac-specific child class to hold all the gRPC API
handling.
- The generated code for the VAL API and its dependencies has
been checked in under lib/generated, as there still does not
seem to be a good way to generate it during the Flutter build.
- The configuration file is now expected to be "hvac.yaml" instead
of "hvac_config.yaml". The authorization token field name has
been renamed to "authorization", and there are new "use-tls" and
"ca-certificate" configuration fields. TLS is disabled by default
for now, and the default CA certificate is /etc/kuksa.val/CA.pem.
- Bumped minimum SDK version to 2.18 in pubspec.yaml to enable
"super" keyword support. This matches what the version was set
to in flutter-homescreen.
- The Vehicle and VehicleSignals classes have been reworked into
a VehicleAcStatus class + provider, and users have been updated
to use the Riverpod provider select functionality to attempt to
reduce naive over-updating.
- VSS paths have been rationalized to use the definitions in the
VSSPath class so only one location will need to be updated on any
signal name changes.
- Added .gitignore file from flutter-homescreen to keep things
clean in the future.
Bug-AGL: SPEC-4762
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Change-Id: Idbabb54ead52bf38796f264a3c8a270aa170e2cd
Diffstat (limited to 'lib/home_page.dart')
-rw-r--r-- | lib/home_page.dart | 85 |
1 files changed, 39 insertions, 46 deletions
diff --git a/lib/home_page.dart b/lib/home_page.dart index 7b91129..e07a507 100644 --- a/lib/home_page.dart +++ b/lib/home_page.dart @@ -3,6 +3,9 @@ import 'dart:io'; import 'package:flutter/material.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:flutter_hvac/vehicle-signals/vss_client.dart'; +import 'package:flutter_hvac/vehicle-signals/vss_provider.dart'; import 'package:flutter_hvac/Buttons/fresh_air.dart'; import 'package:flutter_svg_provider/flutter_svg_provider.dart'; import 'package:flutter_hvac/Buttons/AC.dart'; @@ -16,9 +19,22 @@ import 'widgets/left_climate.dart'; import 'widgets/right_climate.dart'; import 'widgets/slider.dart'; -class HomePage extends StatelessWidget { - final WebSocket socket; - HomePage({Key? key, required this.socket}) : super(key: key); +class HomePage extends ConsumerStatefulWidget { + const HomePage({Key? key}) : super(key: key); + + @override + _HomePageState createState() => _HomePageState(); +} + +class _HomePageState extends ConsumerState<HomePage> { + late VssClient vss; + + initState() { + vss = ref.read(vssClientProvider); + vss.run(); + + super.initState(); + } @override Widget build(BuildContext context) { @@ -52,10 +68,10 @@ class HomePage extends StatelessWidget { ), ), SizedBox( - height: SizeConfig.screenHeight / 10, - width: SizeConfig.screenWidth / 10, - child: Image.asset('images/left_climate.PNG')), - LeftClimateScrollWidget(socket: socket), + height: SizeConfig.screenHeight / 10, + width: SizeConfig.screenWidth / 10, + child: Image.asset('images/left_climate.PNG')), + LeftClimateScrollWidget(), ], ), Column( @@ -69,10 +85,10 @@ class HomePage extends StatelessWidget { ), ), SizedBox( - height: SizeConfig.screenHeight / 10, - width: SizeConfig.screenWidth / 10, - child: Image.asset('images/right_climate.PNG')), - RightClimateScrollWidget(socket: socket), + height: SizeConfig.screenHeight / 10, + width: SizeConfig.screenWidth / 10, + child: Image.asset('images/right_climate.PNG')), + RightClimateScrollWidget(), ], ), ], @@ -91,9 +107,7 @@ class HomePage extends StatelessWidget { image: Svg('images/fan.svg'), color: Colors.lightBlueAccent, fit: BoxFit.fitWidth)), - SliderControl( - socket: socket, - ), + SliderControl(), ], )), Flexible( @@ -103,64 +117,43 @@ class HomePage extends StatelessWidget { children: [ Column( children: [ - AC( - socket: socket, - serverPath: - 'Vehicle.Cabin.HVAC.IsAirConditioningActive'), + AC(), SizedBox( height: SizeConfig.safeBlockVertical, ), - AcOnFoot( - img: 'images/ac_on_foot.svg', - socket: socket, - ), + AcOnFoot(img: 'images/ac_on_foot.svg'), SizedBox( height: SizeConfig.safeBlockVertical, ), - AcOnFace( - img: 'images/ac_on_face.svg', - socket: socket, - ), + AcOnFace(img: 'images/ac_on_face.svg'), ], ), Row( children: [ - Auto(serverPath: '', socket: socket), + Auto(), SizedBox( width: SizeConfig.safeBlockHorizontal, ), - FreshAir( - serverPath: '', - socket: socket, - img: 'images/wind_in.svg'), + FreshAir(img: 'images/wind_in.svg'), ], ), Column( children: [ CustomButton( - serverPath: - 'Vehicle.Cabin.HVAC.IsRecirculationActive', - socket: socket, - img: 'images/in_out.svg', - type: 'Recirculation'), + img: 'images/in_out.svg', + type: 'Recirculation'), SizedBox( height: SizeConfig.safeBlockVertical, ), CustomButton( - serverPath: - 'Vehicle.Cabin.HVAC.IsRearDefrosterActive', - socket: socket, - img: 'images/rear_ws.svg', - type: 'Rear_defrost'), + img: 'images/rear_ws.svg', + type: 'Rear_defrost'), SizedBox( height: SizeConfig.safeBlockVertical, ), CustomButton( - serverPath: - 'Vehicle.Cabin.HVAC.IsFrontDefrosterActive', - socket: socket, - img: 'images/wind_shield.svg', - type: 'Front_defrost'), + img: 'images/wind_shield.svg', + type: 'Front_defrost'), ], ), ], |