summaryrefslogtreecommitdiffstats
path: root/lib/widgets
diff options
context:
space:
mode:
authorScott Murray <scott.murray@konsulko.com>2022-12-31 00:34:31 -0500
committerScott Murray <scott.murray@konsulko.com>2022-12-31 06:50:16 +0000
commit9ba227f63a5f83055910b502ca90bb523950c77b (patch)
treee8dc553cf3b9264c4081f1bb76a95dd7be2f5afc /lib/widgets
parent7e9b0b78a48b4fb26996d67a07277f86b69e18ed (diff)
Rework Riverpod provider usage
Replace the single Riverpod provider for all vehicle signals with separate ones for each required signal used directly in the widgets that require them. This is more in line with recommended Riverpod practice, and should avoids driving full widget tree rebuilds on every signal received. Bug-AGL: SPEC-4660 Signed-off-by: Scott Murray <scott.murray@konsulko.com> Change-Id: Ibe1ff26f8cd95cbe9cbb477feaf31c9f4919bf6a
Diffstat (limited to 'lib/widgets')
-rw-r--r--lib/widgets/child_lock.dart26
-rw-r--r--lib/widgets/fuel_and_speed.dart44
-rw-r--r--lib/widgets/weather.dart29
3 files changed, 50 insertions, 49 deletions
diff --git a/lib/widgets/child_lock.dart b/lib/widgets/child_lock.dart
index c2efb0d..0de2350 100644
--- a/lib/widgets/child_lock.dart
+++ b/lib/widgets/child_lock.dart
@@ -1,21 +1,21 @@
// SPDX-License-Identifier: Apache-2.0
-import 'package:dashboard_app/size.dart';
-import 'package:flutter/src/foundation/key.dart';
-import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/material.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:dashboard_app/size.dart';
+import '../vehicle-signals/vss_providers.dart';
-class ChildLockStatus extends StatelessWidget {
- bool isChildLockActiveLeft;
- bool isChildLockActiveRight;
- ChildLockStatus(
- {Key? key,
- required this.isChildLockActiveLeft,
- required this.isChildLockActiveRight})
- : super(key: key);
+class ChildLockStatus extends ConsumerWidget {
+ ChildLockStatus({Key? key}) : super(key: key);
@override
- Widget build(BuildContext context) {
- return isChildLockActiveLeft && isChildLockActiveRight
+ Widget build(BuildContext context, WidgetRef ref) {
+ final vehicleLeftChildLockActive =
+ ref.watch(vehicleSignalLeftChildLockActiveProvider);
+ final vehicleRightChildLockActive =
+ ref.watch(vehicleSignalRightChildLockActiveProvider);
+
+ return vehicleLeftChildLockActive.engaged &&
+ vehicleRightChildLockActive.engaged
? Column(
children: [
Text(
diff --git a/lib/widgets/fuel_and_speed.dart b/lib/widgets/fuel_and_speed.dart
index d5dd902..4e898e4 100644
--- a/lib/widgets/fuel_and_speed.dart
+++ b/lib/widgets/fuel_and_speed.dart
@@ -1,19 +1,18 @@
// SPDX-License-Identifier: Apache-2.0
-import 'package:dashboard_app/size.dart';
-import 'package:flutter/src/foundation/key.dart';
-import 'package:flutter/src/widgets/framework.dart';
import 'package:flutter/material.dart';
import 'package:percent_indicator/circular_percent_indicator.dart';
import 'package:percent_indicator/linear_percent_indicator.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:dashboard_app/size.dart';
+import '../vehicle-signals/vss_providers.dart';
-class SpeedAndFuel extends StatelessWidget {
- double fuel;
- double speed;
- SpeedAndFuel({Key? key, required this.fuel, required this.speed})
- : super(key: key);
+class SpeedAndFuel extends ConsumerWidget {
+ SpeedAndFuel({Key? key}) : super(key: key);
@override
- Widget build(BuildContext context) {
+ Widget build(BuildContext context, WidgetRef ref) {
+ final vehicleSpeed = ref.watch(vehicleSignalSpeedProvider);
+ final vehicleFuelLevel = ref.watch(vehicleSignalFuelLevelProvider);
double width = MediaQuery.of(context).size.width;
return SizedBox(
width: width * 0.4,
@@ -22,7 +21,7 @@ class SpeedAndFuel extends StatelessWidget {
children: [
CircularPercentIndicator(
radius: SizeConfig.fontsize * 1.6,
- percent: speed / 300,
+ percent: vehicleSpeed.speed / 300,
lineWidth: SizeConfig.fontsize / 2,
backgroundColor: Color.fromARGB(255, 176, 213, 195),
progressColor: Colors.lightBlueAccent,
@@ -30,7 +29,7 @@ class SpeedAndFuel extends StatelessWidget {
circularStrokeCap: CircularStrokeCap.round,
animateFromLastPercent: true,
center: Text(
- speed.toInt().toString(),
+ vehicleSpeed.speed.toInt().toString(),
style: SizeConfig.smallnormalfont,
),
footer: Text(
@@ -40,19 +39,19 @@ class SpeedAndFuel extends StatelessWidget {
),
CircularPercentIndicator(
radius: SizeConfig.fontsize * 1.6,
- percent: fuel / 100,
+ percent: vehicleFuelLevel.level / 100,
lineWidth: SizeConfig.fontsize / 2,
backgroundColor: Colors.lightBlue.shade100,
- progressColor: fuel < 25
+ progressColor: vehicleFuelLevel.level < 25
? Colors.redAccent
- : fuel < 50
+ : vehicleFuelLevel.level < 50
? Colors.orange
: Colors.green,
animation: true,
circularStrokeCap: CircularStrokeCap.round,
animateFromLastPercent: true,
center: Text(
- fuel.toInt().toString() + ' %',
+ vehicleFuelLevel.level.toInt().toString() + ' %',
style: SizeConfig.smallnormalfont,
),
footer: Text(
@@ -66,12 +65,13 @@ class SpeedAndFuel extends StatelessWidget {
}
}
-class Rpm extends StatelessWidget {
- double rpm;
- Rpm({Key? key, required this.rpm}) : super(key: key);
+class Rpm extends ConsumerWidget {
+ Rpm({Key? key}) : super(key: key);
@override
- Widget build(BuildContext context) {
+ Widget build(BuildContext context, WidgetRef ref) {
+ final vehicleEngineSpeed = ref.watch(vehicleSignalEngineSpeedProvider);
+
return SizedBox(
height: SizeConfig.safeBlockVertical * 9,
width: SizeConfig.safeBlockHorizontal * 35,
@@ -90,14 +90,16 @@ class Rpm extends StatelessWidget {
animateFromLastPercent: true,
animation: true,
animationDuration: 500,
- percent: rpm > 9000 ? 9000 : rpm / 9000,
+ percent: vehicleEngineSpeed.speed > 9000
+ ? 9000
+ : vehicleEngineSpeed.speed / 9000,
barRadius: Radius.circular(15),
leading: Text(
'RPM',
style: SizeConfig.smallnormalfont,
),
trailing: Text(
- rpm.toInt().toString(),
+ vehicleEngineSpeed.speed.toInt().toString(),
style: SizeConfig.smallnormalfont2,
),
),
diff --git a/lib/widgets/weather.dart b/lib/widgets/weather.dart
index 0a593cc..73b7014 100644
--- a/lib/widgets/weather.dart
+++ b/lib/widgets/weather.dart
@@ -1,21 +1,17 @@
// SPDX-License-Identifier: Apache-2.0
-import 'package:dashboard_app/size.dart';
-import 'package:flutter/src/foundation/key.dart';
-import 'package:flutter/src/widgets/framework.dart';
-
import 'package:flutter/material.dart';
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:dashboard_app/size.dart';
+import '../vehicle-signals/vss_providers.dart';
-class weather extends StatelessWidget {
- int insideTemperatue;
- int outsideTempearure;
- weather(
- {Key? key,
- required this.insideTemperatue,
- required this.outsideTempearure})
- : super(key: key);
+class Weather extends ConsumerWidget {
+ Weather({Key? key}) : super(key: key);
@override
- Widget build(BuildContext context) {
+ Widget build(BuildContext context, WidgetRef ref) {
+ final vehicleInsideTemp = ref.watch(vehicleSignalInsideTempProvider);
+ final vehicleOutsideTemp = ref.watch(vehicleSignalOutsideTempProvider);
+
return Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(SizeConfig.safeBlockVertical * 2),
@@ -60,7 +56,9 @@ class weather extends StatelessWidget {
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Inside', style: SizeConfig.smallnormalfont2),
- Text(insideTemperatue.toString() + ' \u00B0',
+ Text(
+ vehicleInsideTemp.temp.toInt().toString() +
+ ' \u00B0',
style: SizeConfig.normalfont),
],
),
@@ -75,7 +73,8 @@ class weather extends StatelessWidget {
style: SizeConfig.smallnormalfont2,
),
Text(
- outsideTempearure.toString() + ' \u00B0',
+ vehicleOutsideTemp.temp.toInt().toString() +
+ ' \u00B0',
style: SizeConfig.normalfont,
),
],