diff options
Diffstat (limited to 'lib/vehicle-signals')
-rw-r--r-- | lib/vehicle-signals/intial_connection.dart | 38 | ||||
-rw-r--r-- | lib/vehicle-signals/onBoarding_page.dart | 61 | ||||
-rw-r--r-- | lib/vehicle-signals/vehicle_config.dart | 39 | ||||
-rw-r--r-- | lib/vehicle-signals/vehicle_methods.dart | 183 | ||||
-rw-r--r-- | lib/vehicle-signals/vss_client.dart | 113 | ||||
-rw-r--r-- | lib/vehicle-signals/vss_path.dart (renamed from lib/vehicle-signals/vehicle_server_path.dart) | 0 | ||||
-rw-r--r-- | lib/vehicle-signals/vss_provider.dart | 147 | ||||
-rw-r--r-- | lib/vehicle-signals/vss_signal_providers.dart (renamed from lib/vehicle-signals/vss_providers.dart) | 32 |
8 files changed, 275 insertions, 338 deletions
diff --git a/lib/vehicle-signals/intial_connection.dart b/lib/vehicle-signals/intial_connection.dart deleted file mode 100644 index 8e79979..0000000 --- a/lib/vehicle-signals/intial_connection.dart +++ /dev/null @@ -1,38 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -import 'dart:io'; -import 'package:dashboard_app/vehicle-signals/vehicle_config.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -import 'onBoarding_page.dart'; - -class InitialScreen extends ConsumerWidget { - InitialScreen({Key? key, required this.client}) : super(key: key); - final HttpClient client; - late WebSocket socket; - - @override - Widget build(BuildContext context, ref) { - final sockConnect = ref.watch(sockConnectprovider(client)); - - return sockConnect.when( - data: (socket) { - this.socket = socket; - this.socket.pingInterval = const Duration(seconds: 2); - return OnBoardingPage(client: client, socket: this.socket); - }, - error: (e, stk) { - print(e); - ref.refresh(sockConnectprovider(client)); - return const Scaffold( - backgroundColor: Colors.black, - body: Center(child: Text('error',style: TextStyle(color: Colors.white),)), - ); - }, - loading: () => const Scaffold( - backgroundColor: Colors.black, - body: Center(child: Text('loading',style: TextStyle(color: Colors.white))), - ), - ); - } -}
\ No newline at end of file diff --git a/lib/vehicle-signals/onBoarding_page.dart b/lib/vehicle-signals/onBoarding_page.dart deleted file mode 100644 index 6009c54..0000000 --- a/lib/vehicle-signals/onBoarding_page.dart +++ /dev/null @@ -1,61 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -import 'dart:async'; -import 'dart:io'; - -import 'package:dashboard_app/vehicle-signals/vehicle_config.dart'; -import 'package:dashboard_app/vehicle-signals/vehicle_methods.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -import '../HomePage.dart'; - -class OnBoardingPage extends ConsumerStatefulWidget { - const OnBoardingPage({Key? key, required this.client, required this.socket}) - : super(key: key); - final WebSocket socket; - final HttpClient client; - - @override - ConsumerState<OnBoardingPage> createState() => _OnBoardingPageState(); -} - -class _OnBoardingPageState extends ConsumerState<OnBoardingPage> { - late Timer _timer; - - - @override - void initState() { - super.initState(); - VISS.init(widget.socket,ref); - _timer = Timer.periodic(const Duration(seconds: 2), (timer) { - - if (widget.socket.readyState == 3) { - ref.refresh(sockConnectprovider(widget.client)); - } - }); - WidgetsBinding.instance.addPostFrameCallback((timeStamp) { - widget.socket.listen( - (data) { - VISS.parseData(ref, data); - - }, - onError: (e, stk) { - print(e.toString()); - ref.refresh(sockConnectprovider(widget.client)); - }, - ); - }); - } - - @override - void dispose() { - super.dispose(); - _timer.cancel(); - widget.socket.close(786887, "Connection lost with server!"); - } - - @override - Widget build(BuildContext context) { - return const HomePage(); - } -}
\ No newline at end of file diff --git a/lib/vehicle-signals/vehicle_config.dart b/lib/vehicle-signals/vehicle_config.dart deleted file mode 100644 index 59682c4..0000000 --- a/lib/vehicle-signals/vehicle_config.dart +++ /dev/null @@ -1,39 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -import 'dart:convert'; -import 'dart:io'; - -import 'package:dashboard_app/config.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; -import 'package:http/http.dart' as http; - - - -final sockConnectprovider = FutureProvider.family<WebSocket, HttpClient>( - (ref, client) => connect(client,ref)); - - - -Future<HttpClient> initializeClient() async { - - - SecurityContext ctx = SecurityContext.defaultContext; - - HttpClient client = HttpClient(context: ctx) - ..findProxy = null - ..badCertificateCallback = (cert, host, port) { - return true; - }; - return client; -} - - - -Future<WebSocket> connect(HttpClient client, ref) async { - final config = ref.read(ConfigStateprovider); - WebSocket socket = await WebSocket.connect( - "wss://${config.hostname}:${config.port}", - customClient: client); - return socket; -} - - diff --git a/lib/vehicle-signals/vehicle_methods.dart b/lib/vehicle-signals/vehicle_methods.dart deleted file mode 100644 index 8259450..0000000 --- a/lib/vehicle-signals/vehicle_methods.dart +++ /dev/null @@ -1,183 +0,0 @@ -// SPDX-License-Identifier: Apache-2.0 -import 'dart:convert'; -import 'dart:io'; - -import 'package:dashboard_app/vehicle-signals/vss_providers.dart'; -import 'package:dashboard_app/vehicle-signals/vehicle_server_path.dart'; -import 'package:dashboard_app/config.dart'; -import 'package:flutter_riverpod/flutter_riverpod.dart'; - -class VISS { - static const requestId = "test-id"; - static void init(WebSocket socket, WidgetRef ref) { - authorize(socket, ref); - subscribe(socket, ref, VSSPath.vehicleSpeed); - subscribe(socket, ref, VSSPath.vehicleEngineSpeed); - subscribe(socket, ref, VSSPath.vehicleFuelLevel); - subscribe(socket, ref, VSSPath.vehicleFrontLeftTire); - subscribe(socket, ref, VSSPath.vehicleFrontRightTire); - subscribe(socket, ref, VSSPath.vehicleRearLeftTire); - subscribe(socket, ref, VSSPath.vehicleRearRightTire); - subscribe(socket, ref, VSSPath.vehicleIsChildLockActiveLeft); - subscribe(socket, ref, VSSPath.vehicleIsChildLockActiveRight); - subscribe(socket, ref, VSSPath.vehicleFuelRate); - subscribe(socket, ref, VSSPath.vehicleInsideTemperature); - subscribe(socket, ref, VSSPath.vehicleOutsideTemperature); - } - - static void update(WebSocket socket, WidgetRef ref) { - get(socket, ref, VSSPath.vehicleSpeed); - get(socket, ref, VSSPath.vehicleEngineSpeed); - get(socket, ref, VSSPath.vehicleFuelLevel); - get(socket, ref, VSSPath.vehicleOutsideTemperature); - get(socket, ref, VSSPath.vehicleFrontLeftTire); - get(socket, ref, VSSPath.vehicleFrontRightTire); - get(socket, ref, VSSPath.vehicleRearLeftTire); - get(socket, ref, VSSPath.vehicleRearRightTire); - get(socket, ref, VSSPath.vehicleIsChildLockActiveLeft); - get(socket, ref, VSSPath.vehicleIsChildLockActiveRight); - get(socket, ref, VSSPath.vehicleFuelRate); - get(socket, ref, VSSPath.vehicleInsideTemperature); - } - - static void authorize(WebSocket socket, WidgetRef ref) { - final config = ref.read(ConfigStateprovider); - - Map<String, dynamic> map = { - "action": "authorize", - "tokens": config.kuksaAuthToken, - "requestId": requestId - }; - socket.add(jsonEncode(map)); - } - - static void get(WebSocket socket, WidgetRef ref, String path) { - final config = ref.read(ConfigStateprovider); - - Map<String, dynamic> map = { - "action": "get", - "tokens": config.kuksaAuthToken, - "path": path, - "requestId": requestId - }; - socket.add(jsonEncode(map)); - } - - static void set(WebSocket socket, WidgetRef ref, String path, String value) { - final config = ref.read(ConfigStateprovider); - Map<String, dynamic> map = { - "action": "set", - "tokens": config.kuksaAuthToken, - "path": path, - "requestId": requestId, - "value": value - }; - socket.add(jsonEncode(map)); - } - - static void subscribe(WebSocket socket, WidgetRef ref, String path) { - final config = ref.read(ConfigStateprovider); - - Map<String, dynamic> map = { - "action": "subscribe", - "tokens": config.kuksaAuthToken, - "path": path, - "requestId": requestId - }; - socket.add(jsonEncode(map)); - } - - static void parseData(WidgetRef ref, String data) { - Map<String, dynamic> dataMap = jsonDecode(data); - if (dataMap["action"] == "subscription" || dataMap["action"] == "get") { - if (dataMap.containsKey("data")) { - if ((dataMap["data"] as Map<String, dynamic>).containsKey("dp") && - (dataMap["data"] as Map<String, dynamic>).containsKey("path")) { - String path = dataMap["data"]["path"]; - Map<String, dynamic> dp = dataMap["data"]["dp"]; - if (dp.containsKey("value")) { - if (dp["value"] != "---") { - switch (path) { - case VSSPath.vehicleSpeed: - ref - .read(vehicleSignalSpeedProvider.notifier) - .update(speed: dp["value"]); - break; - case VSSPath.vehicleEngineSpeed: - ref - .read(vehicleSignalEngineSpeedProvider.notifier) - .update(speed: dp["value"].toDouble()); - break; - case VSSPath.vehicleFuelLevel: - ref - .read(vehicleSignalFuelLevelProvider.notifier) - .update(level: dp["value"]); - break; - case VSSPath.vehicleFuelRate: - ref - .read(vehicleSignalFuelRateProvider.notifier) - .update(rate: dp["value"]); - break; - case VSSPath.vehicleFrontLeftTire: - ref - .read(vehicleSignalFrontLeftTirePressureProvider.notifier) - .update(pressure: dp["value"]); - break; - case VSSPath.vehicleFrontRightTire: - ref - .read( - vehicleSignalFrontRightTirePressureProvider.notifier) - .update(pressure: dp["value"]); - break; - case VSSPath.vehicleRearLeftTire: - ref - .read(vehicleSignalRearLeftTirePressureProvider.notifier) - .update(pressure: dp["value"]); - break; - case VSSPath.vehicleRearRightTire: - ref - .read(vehicleSignalRearRightTirePressureProvider.notifier) - .update(pressure: dp["value"]); - break; - case VSSPath.vehicleIsChildLockActiveLeft: - ref - .read(vehicleSignalLeftChildLockActiveProvider.notifier) - .update(engaged: dp["value"]); - break; - case VSSPath.vehicleIsChildLockActiveRight: - ref - .read(vehicleSignalRightChildLockActiveProvider.notifier) - .update(engaged: dp["value"]); - break; - case VSSPath.vehicleInsideTemperature: - ref - .read(vehicleSignalInsideTempProvider.notifier) - .update(temp: dp["value"]); - break; - case VSSPath.vehicleOutsideTemperature: - ref - .read(vehicleSignalOutsideTempProvider.notifier) - .update(temp: dp["value"]); - break; - default: - print("$path Not Available yet!"); - } - } else { - print("ERROR:Value not available yet! Set Value of $path"); - } - } else { - print("ERROR:'value': Key not found!"); - } - } else if ((!dataMap["data"] as Map<String, dynamic>) - .containsKey("path")) { - print("ERROR:'path':key not found !"); - } else if ((dataMap["data"] as Map<String, dynamic>) - .containsKey("dp")) { - print("ERROR:'dp':key not found !"); - } - } else { - print("ERROR:'data':key not found!"); - } - } - } -} diff --git a/lib/vehicle-signals/vss_client.dart b/lib/vehicle-signals/vss_client.dart new file mode 100644 index 0000000..ed79e99 --- /dev/null +++ b/lib/vehicle-signals/vss_client.dart @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: Apache-2.0 +import 'dart:io'; +import 'package:meta/meta.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:grpc/grpc.dart'; +import 'package:dashboard_app/generated/kuksa/val/v1/val.pbgrpc.dart'; +import 'package:dashboard_app/generated/kuksa/val/v1/types.pb.dart'; +import 'package:dashboard_app/config.dart'; + +abstract class VssClient { + final KuksaConfig config; + final ClientChannel channel; + final VALClient stub; + final Ref ref; + + // Extenders will likely override this + final List<String> signals = []; + + VssClient({required this.config, required this.channel, required this.stub, required this.ref}); + + // Abstract method extenders must implement + void handleSignalUpdates(EntryUpdate update); + + void run() async { + if (signals.isEmpty) + return; + + var request = SubscribeRequest(); + for (var i = 0; i < signals.length; i++) { + var entry = SubscribeEntry(); + entry.path = signals[i]; + entry.fields.add(Field.FIELD_PATH); + entry.fields.add(Field.FIELD_VALUE); + request.entries.add(entry); + } + + try { + Map<String, String> metadata = {}; + if (config.authorization.isNotEmpty) { + metadata = {'authorization': "Bearer ${config.authorization}" }; + } + var responseStream = stub.subscribe(request, options: CallOptions(metadata: metadata)); + await for (var response in responseStream) { + for (var update in response.updates) { + if (!(update.hasEntry() && update.entry.hasPath())) + continue; + handleSignalUpdates(update); + } + } + } catch (e) { + print(e); + } + } + + void setUint32(String path, int value, [bool actuator = true]) async { + var dp = Datapoint() + ..uint32 = value; + set(path, dp, actuator); + } + + void setInt32(String path, int value, [bool actuator = true]) async { + var dp = Datapoint() + ..int32 = value; + set(path, dp, actuator); + } + + void setBool(String path, bool value, [bool actuator = true]) async { + var dp = Datapoint() + ..bool_12 = value; + set(path, dp, actuator); + } + + void setString(String path, String value, [bool actuator = true]) async { + var dp = Datapoint() + ..string = value; + set(path, dp, actuator); + } + + void setFloat(String path, double value, [bool actuator = true]) async { + var dp = Datapoint() + ..float = value; + set(path, dp, actuator); + } + + void setDouble(String path, double value, [bool actuator = true]) async { + var dp = Datapoint() + ..double_18 = value; + set(path, dp, actuator); + } + + void set(String path, Datapoint dp, bool actuator) async { + var entry = DataEntry() + ..path = path; + var update = EntryUpdate(); + if (actuator) { + entry.actuatorTarget = dp; + update.fields.add(Field.FIELD_ACTUATOR_TARGET); + } else { + entry.value = dp; + update.fields.add(Field.FIELD_VALUE); + } + update.entry = entry; + var request = SetRequest(); + request.updates.add(update); + Map<String, String> metadata = {}; + if (config.authorization.isNotEmpty) { + metadata = {'authorization': "Bearer ${config.authorization}" }; + } + await stub.set(request, options: CallOptions(metadata: metadata)); + } + +} diff --git a/lib/vehicle-signals/vehicle_server_path.dart b/lib/vehicle-signals/vss_path.dart index 822e304..822e304 100644 --- a/lib/vehicle-signals/vehicle_server_path.dart +++ b/lib/vehicle-signals/vss_path.dart diff --git a/lib/vehicle-signals/vss_provider.dart b/lib/vehicle-signals/vss_provider.dart new file mode 100644 index 0000000..c3724ca --- /dev/null +++ b/lib/vehicle-signals/vss_provider.dart @@ -0,0 +1,147 @@ +// SPDX-License-Identifier: Apache-2.0 +import 'dart:io'; +import 'package:meta/meta.dart'; +import 'package:flutter/foundation.dart'; +import 'package:flutter_riverpod/flutter_riverpod.dart'; +import 'package:grpc/grpc.dart'; +import 'package:dashboard_app/generated/kuksa/val/v1/val.pbgrpc.dart'; +import 'package:dashboard_app/generated/kuksa/val/v1/types.pb.dart'; +import 'package:dashboard_app/config.dart'; +import 'package:dashboard_app/vehicle-signals/vss_client.dart'; +import 'package:dashboard_app/vehicle-signals/vss_path.dart'; +import 'package:dashboard_app/vehicle-signals/vss_signal_providers.dart'; + +class DashboardVssClient extends VssClient { + @override + final List<String> signals = [ + VSSPath.vehicleSpeed, + VSSPath.vehicleEngineSpeed, + VSSPath.vehicleFuelLevel, + VSSPath.vehicleFrontLeftTire, + VSSPath.vehicleFrontRightTire, + VSSPath.vehicleRearLeftTire, + VSSPath.vehicleRearRightTire, + VSSPath.vehicleIsChildLockActiveLeft, + VSSPath.vehicleIsChildLockActiveRight, + VSSPath.vehicleFuelRate, + VSSPath.vehicleInsideTemperature, + VSSPath.vehicleOutsideTemperature + ]; + + DashboardVssClient({required super.config, required super.channel, required super.stub, required super.ref}); + + @override + void handleSignalUpdates(EntryUpdate update) { + switch (update.entry.path) { + case VSSPath.vehicleSpeed: + if (update.entry.value.hasFloat()) { + ref + .read(vehicleSignalSpeedProvider.notifier) + .update(speed: update.entry.value.float); + } + break; + case VSSPath.vehicleEngineSpeed: + if (update.entry.value.hasFloat()) { + ref + .read(vehicleSignalEngineSpeedProvider.notifier) + .update(speed: update.entry.value.float); + } + break; + case VSSPath.vehicleFuelLevel: + if (update.entry.value.hasUint32()) { + ref + .read(vehicleSignalFuelLevelProvider.notifier) + .update(level: update.entry.value.uint32); + } + break; + case VSSPath.vehicleFuelRate: + if (update.entry.value.hasFloat()) { + ref + .read(vehicleSignalFuelRateProvider.notifier) + .update(rate: update.entry.value.float); + } + break; + case VSSPath.vehicleFrontLeftTire: + if (update.entry.value.hasUint32()) { + ref + .read(vehicleSignalFrontLeftTirePressureProvider.notifier) + .update(pressure: update.entry.value.uint32); + } + break; + case VSSPath.vehicleFrontRightTire: + if (update.entry.value.hasUint32()) { + ref + .read(vehicleSignalFrontRightTirePressureProvider.notifier) + .update(pressure: update.entry.value.uint32); + } + break; + case VSSPath.vehicleRearLeftTire: + if (update.entry.value.hasUint32()) { + ref + .read(vehicleSignalRearLeftTirePressureProvider.notifier) + .update(pressure: update.entry.value.uint32); + } + break; + case VSSPath.vehicleRearRightTire: + if (update.entry.value.hasUint32()) { + ref + .read(vehicleSignalRearRightTirePressureProvider.notifier) + .update(pressure: update.entry.value.uint32); + } + break; + case VSSPath.vehicleIsChildLockActiveLeft: + if (update.entry.value.hasBool_12()) { + ref + .read(vehicleSignalLeftChildLockActiveProvider.notifier) + .update(engaged: update.entry.value.bool_12); + } + break; + case VSSPath.vehicleIsChildLockActiveRight: + if (update.entry.value.hasBool_12()) { + ref + .read(vehicleSignalRightChildLockActiveProvider.notifier) + .update(engaged: update.entry.value.bool_12); + } + break; + case VSSPath.vehicleInsideTemperature: + if (update.entry.value.hasFloat()) { + ref + .read(vehicleSignalInsideTempProvider.notifier) + .update(temp: update.entry.value.float); + } + break; + case VSSPath.vehicleOutsideTemperature: + if (update.entry.value.hasFloat()) { + ref + .read(vehicleSignalOutsideTempProvider.notifier) + .update(temp: update.entry.value.float); + } + break; + default: + print("ERROR: Unexpected path ${update.entry.path}"); + break; + } + } +} + +final vssClientProvider = Provider((ref) { + var config = ref.read(kuksaConfigProvider); + debugPrint("Using ${config.hostname}:${config.port}"); + ChannelCredentials creds; + if (config.use_tls && config.ca_certificate.isNotEmpty) { + print("Using TLS"); + if (config.tls_server_name.isNotEmpty) + creds = ChannelCredentials.secure(certificates: config.ca_certificate, authority: config.tls_server_name); + else + creds = ChannelCredentials.secure(certificates: config.ca_certificate); + } else { + creds = ChannelCredentials.insecure(); + } + final channel = ClientChannel(config.hostname, + port: config.port, + options: ChannelOptions(credentials: creds)); + + final stub = VALClient(channel); + + return DashboardVssClient(config: config, channel: channel, stub: stub, ref: ref); +}); diff --git a/lib/vehicle-signals/vss_providers.dart b/lib/vehicle-signals/vss_signal_providers.dart index 6900bdc..7c48dc3 100644 --- a/lib/vehicle-signals/vss_providers.dart +++ b/lib/vehicle-signals/vss_signal_providers.dart @@ -1,6 +1,4 @@ // SPDX-License-Identifier: Apache-2.0 -//import 'dart:ffi'; -//import 'dart:io'; import 'package:meta/meta.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; @@ -68,9 +66,9 @@ final vehicleSignalEngineSpeedProvider = StateNotifierProvider< class VehicleSignalFuelLevel { const VehicleSignalFuelLevel({required this.level}); - final double level; + final int level; - VehicleSignalFuelLevel copyWith({double? level}) { + VehicleSignalFuelLevel copyWith({int? level}) { return VehicleSignalFuelLevel(level: level ?? this.level); } } @@ -82,7 +80,7 @@ class VehicleSignalFuelLevelNotifier static final VehicleSignalFuelLevel _initialValue = VehicleSignalFuelLevel(level: 90); - void update({double? level}) { + void update({int? level}) { state = state.copyWith(level: level); } } @@ -128,9 +126,9 @@ final vehicleSignalFuelRateProvider = class VehicleSignalFrontLeftTirePressure { const VehicleSignalFrontLeftTirePressure({required this.pressure}); - final double pressure; + final int pressure; - VehicleSignalFrontLeftTirePressure copyWith({double? pressure}) { + VehicleSignalFrontLeftTirePressure copyWith({int? pressure}) { return VehicleSignalFrontLeftTirePressure( pressure: pressure ?? this.pressure); } @@ -143,7 +141,7 @@ class VehicleSignalFrontLeftTirePressureNotifier static final VehicleSignalFrontLeftTirePressure _initialValue = VehicleSignalFrontLeftTirePressure(pressure: 32); - void update({double? pressure}) { + void update({int? pressure}) { state = state.copyWith(pressure: pressure); } } @@ -160,9 +158,9 @@ final vehicleSignalFrontLeftTirePressureProvider = StateNotifierProvider< class VehicleSignalFrontRightTirePressure { const VehicleSignalFrontRightTirePressure({required this.pressure}); - final double pressure; + final int pressure; - VehicleSignalFrontRightTirePressure copyWith({double? pressure}) { + VehicleSignalFrontRightTirePressure copyWith({int? pressure}) { return VehicleSignalFrontRightTirePressure( pressure: pressure ?? this.pressure); } @@ -175,7 +173,7 @@ class VehicleSignalFrontRightTirePressureNotifier static final VehicleSignalFrontRightTirePressure _initialValue = VehicleSignalFrontRightTirePressure(pressure: 32); - void update({double? pressure}) { + void update({int? pressure}) { state = state.copyWith(pressure: pressure); } } @@ -192,9 +190,9 @@ final vehicleSignalFrontRightTirePressureProvider = StateNotifierProvider< class VehicleSignalRearLeftTirePressure { const VehicleSignalRearLeftTirePressure({required this.pressure}); - final double pressure; + final int pressure; - VehicleSignalRearLeftTirePressure copyWith({double? pressure}) { + VehicleSignalRearLeftTirePressure copyWith({int? pressure}) { return VehicleSignalRearLeftTirePressure( pressure: pressure ?? this.pressure); } @@ -207,7 +205,7 @@ class VehicleSignalRearLeftTirePressureNotifier static final VehicleSignalRearLeftTirePressure _initialValue = VehicleSignalRearLeftTirePressure(pressure: 33); - void update({double? pressure}) { + void update({int? pressure}) { state = state.copyWith(pressure: pressure); } } @@ -224,9 +222,9 @@ final vehicleSignalRearLeftTirePressureProvider = StateNotifierProvider< class VehicleSignalRearRightTirePressure { const VehicleSignalRearRightTirePressure({required this.pressure}); - final double pressure; + final int pressure; - VehicleSignalRearRightTirePressure copyWith({double? pressure}) { + VehicleSignalRearRightTirePressure copyWith({int? pressure}) { return VehicleSignalRearRightTirePressure( pressure: pressure ?? this.pressure); } @@ -239,7 +237,7 @@ class VehicleSignalRearRightTirePressureNotifier static final VehicleSignalRearRightTirePressure _initialValue = VehicleSignalRearRightTirePressure(pressure: 34); - void update({double? pressure}) { + void update({int? pressure}) { state = state.copyWith(pressure: pressure); } } |