From 31438c5081e8ee5b520787a6e64b9372ec678886 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Thu, 4 Jan 2024 20:13:01 -0500 Subject: Configurable units fixes Notable changes: - Add pressure unit to the units model. - Add tire pressure unit configuration page under settings. - Rework the VSS client, provider, and the associated handling in the vehicle and audio state providers to make the signal updating code reusable for processing the result of VAL API get commands. - Add logic to get the initial values of the used VSS signals so the initial application state looks sane in demo scenarios. - Add VSS signal support to the units provider so that changes will be pushed out for e.g. IC use. - Fix pressure unit use in various widgets. - Fix up range calculation for dashboard to correctly account for units and the incoming VSS value being in meters. - Fix some unit naming inconsistencies around capitalization. Bug-AGL: SPEC-5031, SPEC-5032 Change-Id: I33ac735dfbe35283bd30c92aa157cbdb7af1837c Signed-off-by: Scott Murray --- .../units/distance/distance_unit_screen.dart | 11 +- .../units/pressure/pressure_unit_screen.dart | 121 +++++++++++++++++++++ .../settings_screens/units/units_screen.dart | 16 ++- 3 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 lib/presentation/screens/settings/settings_screens/units/pressure/pressure_unit_screen.dart (limited to 'lib/presentation/screens/settings/settings_screens') diff --git a/lib/presentation/screens/settings/settings_screens/units/distance/distance_unit_screen.dart b/lib/presentation/screens/settings/settings_screens/units/distance/distance_unit_screen.dart index 3e9c135..3d84604 100644 --- a/lib/presentation/screens/settings/settings_screens/units/distance/distance_unit_screen.dart +++ b/lib/presentation/screens/settings/settings_screens/units/distance/distance_unit_screen.dart @@ -11,7 +11,6 @@ class DistanceUnitPage extends ConsumerWidget { ref.watch(unitStateProvider.select((unit) => unit.distanceUnit)); return Scaffold( - body: Column( children: [ CommonTitle( @@ -48,13 +47,14 @@ class DistanceUnitPage extends ConsumerWidget { contentPadding: const EdgeInsets.symmetric( horizontal: 16.0, vertical: 40.0), leading: Text( - 'Kilometers', + 'kilometers', style: Theme.of(context).textTheme.titleMedium, ), //title: Text(widget.title), //enabled: isSwitchOn, trailing: unit == DistanceUnit.kilometers - ? const Icon(Icons.done, + ? const Icon( + Icons.done, color: AGLDemoColors.periwinkleColor, size: 48, ) @@ -90,13 +90,14 @@ class DistanceUnitPage extends ConsumerWidget { contentPadding: const EdgeInsets.symmetric( horizontal: 16.0, vertical: 40.0), leading: Text( - 'Miles', + 'miles', style: Theme.of(context).textTheme.titleMedium, ), //title: Text(widget.title), //enabled: isSwitchOn, trailing: unit == DistanceUnit.miles - ? const Icon(Icons.done, + ? const Icon( + Icons.done, color: AGLDemoColors.periwinkleColor, size: 48, ) diff --git a/lib/presentation/screens/settings/settings_screens/units/pressure/pressure_unit_screen.dart b/lib/presentation/screens/settings/settings_screens/units/pressure/pressure_unit_screen.dart new file mode 100644 index 0000000..5be8a05 --- /dev/null +++ b/lib/presentation/screens/settings/settings_screens/units/pressure/pressure_unit_screen.dart @@ -0,0 +1,121 @@ +import 'package:flutter_ics_homescreen/export.dart'; + +class PressureUnitPage extends ConsumerWidget { + const PressureUnitPage({super.key}); + + static Page page() => + const MaterialPage(child: PressureUnitPage()); + @override + Widget build(BuildContext context, WidgetRef ref) { + final unit = + ref.watch(unitStateProvider.select((unit) => unit.pressureUnit)); + + return Scaffold( + body: Column( + children: [ + CommonTitle( + title: 'Pressure', + hasBackButton: true, + onPressed: () { + context.flow().update((state) => AppState.units); + }, + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 0, horizontal: 144), + child: ListView( + children: [ + Container( + height: 130, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + stops: unit == PressureUnit.kilopascals + ? [0, 0.01, 0.8] + : [0.1, 1], + colors: unit == PressureUnit.kilopascals + ? [ + Colors.white, + Colors.blue, + const Color.fromARGB(16, 41, 98, 255) + ] + : [Colors.black, Colors.black12]), + ), + child: ListTile( + minVerticalPadding: 0.0, + contentPadding: const EdgeInsets.symmetric( + horizontal: 16.0, vertical: 40.0), + leading: Text( + 'kilopascals', + style: Theme.of(context).textTheme.titleMedium, + ), + //title: Text(widget.title), + //enabled: isSwitchOn, + trailing: unit == PressureUnit.kilopascals + ? const Icon( + Icons.done, + color: AGLDemoColors.periwinkleColor, + size: 48, + ) + : null, + onTap: () { + ref + .read(unitStateProvider.notifier) + .setPressureUnit(PressureUnit.kilopascals); + }), + ), + const SizedBox( + height: 5, + ), + Container( + height: 130, + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + stops: unit == PressureUnit.psi + ? [0, 0.01, 0.8] + : [0.1, 1], + colors: unit == PressureUnit.psi + ? [ + Colors.white, + Colors.blue, + const Color.fromARGB(16, 41, 98, 255) + ] + : [Colors.black, Colors.black12]), + ), + child: ListTile( + minVerticalPadding: 0.0, + contentPadding: const EdgeInsets.symmetric( + horizontal: 16.0, vertical: 40.0), + leading: Text( + 'PSI', + style: Theme.of(context).textTheme.titleMedium, + ), + //title: Text(widget.title), + //enabled: isSwitchOn, + trailing: unit == PressureUnit.psi + ? const Icon( + Icons.done, + color: AGLDemoColors.periwinkleColor, + size: 38, + ) + : null, + + onTap: () { + ref + .read(unitStateProvider.notifier) + .setPressureUnit(PressureUnit.psi); + }, + ), + ), + ], + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/presentation/screens/settings/settings_screens/units/units_screen.dart b/lib/presentation/screens/settings/settings_screens/units/units_screen.dart index 1c6e37c..fde7505 100644 --- a/lib/presentation/screens/settings/settings_screens/units/units_screen.dart +++ b/lib/presentation/screens/settings/settings_screens/units/units_screen.dart @@ -30,8 +30,8 @@ class UnitsPage extends ConsumerWidget { icon: Icons.calendar_month_outlined, title: 'Distance', unitName: unit.distanceUnit == DistanceUnit.kilometers - ? 'Kilometers' - : 'Miles', + ? 'kilometers' + : 'miles', hasSwich: false, voidCallback: () async { context @@ -50,6 +50,18 @@ class UnitsPage extends ConsumerWidget { .flow() .update((next) => AppState.tempUnit); }), + UnitsTile( + icon: Icons.straighten, + title: 'Pressure', + unitName: unit.pressureUnit == PressureUnit.kilopascals + ? 'kilopascals' + : 'PSI', + hasSwich: true, + voidCallback: () { + context + .flow() + .update((next) => AppState.pressureUnit); + }), ], ), ), -- cgit 1.2.3-korg