diff options
Diffstat (limited to 'lib/presentation')
7 files changed, 205 insertions, 61 deletions
diff --git a/lib/presentation/router/routes/routes.dart b/lib/presentation/router/routes/routes.dart index 45a1a14..328d495 100644 --- a/lib/presentation/router/routes/routes.dart +++ b/lib/presentation/router/routes/routes.dart @@ -45,6 +45,8 @@ List<Page<dynamic>> onGenerateAppViewPages( return [DistanceUnitPage.page()]; case AppState.tempUnit: return [TemperatureUnitPage.page()]; + case AppState.pressureUnit: + return [PressureUnitPage.page()]; case AppState.clock: return [ClockPage.page()]; case AppState.newProfile: diff --git a/lib/presentation/screens/dashboard/widgets/car_status.dart b/lib/presentation/screens/dashboard/widgets/car_status.dart index b824871..604d404 100644 --- a/lib/presentation/screens/dashboard/widgets/car_status.dart +++ b/lib/presentation/screens/dashboard/widgets/car_status.dart @@ -4,25 +4,13 @@ import 'package:gradient_borders/gradient_borders.dart'; import '../../../../export.dart'; -class CarStatus extends ConsumerStatefulWidget { +class CarStatus extends ConsumerWidget { const CarStatus({super.key}); @override - CarStatusState createState() => CarStatusState(); -} - -class CarStatusState extends ConsumerState<CarStatus> { - @override - void initState() { - super.initState(); - // "ref" can be used in all life-cycles of a StatefulWidget. - //ref.read(counterProvider); - } - - @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef Ref) { return Padding( - padding: const EdgeInsets.fromLTRB(0,0,0,84), + padding: const EdgeInsets.fromLTRB(0, 0, 0, 84), child: SizedBox( height: 440, width: 652, @@ -59,6 +47,18 @@ class LeftCarStatus extends ConsumerWidget { ref.watch(vehicleProvider.select((vehicle) => vehicle.frontLeftTire)); final rearLeftTire = ref.watch(vehicleProvider.select((vehicle) => vehicle.rearLeftTire)); + final unit = + ref.watch(unitStateProvider.select((unit) => unit.pressureUnit)); + + String frontLeftTireString = ""; + String rearLeftTireString = ""; + if (unit == PressureUnit.psi) { + frontLeftTireString = (frontLeftTire * 0.145038).toStringAsFixed(1); + rearLeftTireString = (rearLeftTire * 0.145038).toStringAsFixed(1); + } else { + frontLeftTireString = frontLeftTire.toString(); + rearLeftTireString = rearLeftTire.toString(); + } return Column( mainAxisAlignment: MainAxisAlignment.spaceAround, @@ -67,22 +67,21 @@ class LeftCarStatus extends ConsumerWidget { Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - PSIProgressIndicator(value: frontLeftTire.toDouble()), + TirePressureProgressIndicator(value: frontLeftTire.toDouble()), Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end, children: [ Text( - frontLeftTire.toStringAsFixed(1), + frontLeftTireString, style: GoogleFonts.brunoAce( - textStyle: TextStyle( - color: Colors.white, fontSize: 44), + textStyle: TextStyle(color: Colors.white, fontSize: 44), ), ), SizedBox( width: 5, ), - PSIWidget(), + TirePressureUnitWidget(), ], ), ], @@ -91,22 +90,21 @@ class LeftCarStatus extends ConsumerWidget { Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ - PSIProgressIndicator(value: rearLeftTire.toDouble()), + TirePressureProgressIndicator(value: rearLeftTire.toDouble()), Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.end, children: [ Text( - rearLeftTire.toStringAsFixed(1), + rearLeftTireString, style: GoogleFonts.brunoAce( - textStyle: TextStyle( - color: Colors.white, fontSize: 44), + textStyle: TextStyle(color: Colors.white, fontSize: 44), ), ), SizedBox( width: 5, ), - PSIWidget(), + TirePressureUnitWidget(), ], ), ], @@ -127,6 +125,18 @@ class RightCarStatus extends ConsumerWidget { ref.watch(vehicleProvider.select((vehicle) => vehicle.frontRightTire)); final rearRightTire = ref.watch(vehicleProvider.select((vehicle) => vehicle.rearRightTire)); + final unit = + ref.watch(unitStateProvider.select((unit) => unit.pressureUnit)); + + String frontRightTireString = ""; + String rearRightTireString = ""; + if (unit == PressureUnit.psi) { + frontRightTireString = (frontRightTire * 0.145038).toStringAsFixed(1); + rearRightTireString = (rearRightTire * 0.145038).toStringAsFixed(1); + } else { + frontRightTireString = frontRightTire.toString(); + rearRightTireString = rearRightTire.toString(); + } return Column( mainAxisAlignment: MainAxisAlignment.spaceAround, @@ -134,23 +144,21 @@ class RightCarStatus extends ConsumerWidget { children: [ Column( crossAxisAlignment: CrossAxisAlignment.start, - children: [ - PSIProgressIndicator(value: frontRightTire.toDouble()), + TirePressureProgressIndicator(value: frontRightTire.toDouble()), Row( crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( - frontRightTire.toStringAsFixed(1), + frontRightTireString, style: GoogleFonts.brunoAce( - textStyle: TextStyle( - color: Colors.white, fontSize: 44), + textStyle: TextStyle(color: Colors.white, fontSize: 44), ), ), SizedBox( width: 5, ), - PSIWidget(), + TirePressureUnitWidget(), ], ), ], @@ -159,22 +167,21 @@ class RightCarStatus extends ConsumerWidget { Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - PSIProgressIndicator(value: rearRightTire.toDouble()), + TirePressureProgressIndicator(value: rearRightTire.toDouble()), Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.start, children: [ Text( - rearRightTire.toStringAsFixed(1), + rearRightTireString, style: GoogleFonts.brunoAce( - textStyle: TextStyle( - color: Colors.white, fontSize: 44), + textStyle: TextStyle(color: Colors.white, fontSize: 44), ), ), SizedBox( width: 5, ), - PSIWidget(), + TirePressureUnitWidget(), ], ), ], @@ -184,9 +191,9 @@ class RightCarStatus extends ConsumerWidget { } } -class PSIProgressIndicator extends StatelessWidget { +class TirePressureProgressIndicator extends StatelessWidget { final double value; - const PSIProgressIndicator({ + const TirePressureProgressIndicator({ Key? key, required this.value, // Require the value to be passed }) : super(key: key); @@ -208,7 +215,6 @@ class PSIProgressIndicator extends StatelessWidget { LinearGradient(colors: const [Colors.white30, Colors.white]), ), ), - ), Positioned( left: 3, @@ -231,17 +237,20 @@ class PSIProgressIndicator extends StatelessWidget { } } -class PSIWidget extends StatelessWidget { - const PSIWidget({ +class TirePressureUnitWidget extends ConsumerWidget { + const TirePressureUnitWidget({ super.key, }); @override - Widget build(BuildContext context) { + Widget build(BuildContext context, WidgetRef ref) { + final unit = + ref.watch(unitStateProvider.select((unit) => unit.pressureUnit)); + return Padding( padding: const EdgeInsets.only(left: 4.0, right: 1.0, bottom: 2.0), child: Text( - 'PSI', + unit == PressureUnit.kilopascals ? 'kPa' : 'PSI', style: TextStyle( fontSize: 26, ), diff --git a/lib/presentation/screens/dashboard/widgets/circle_indicator.dart b/lib/presentation/screens/dashboard/widgets/circle_indicator.dart index 6ff3613..e3a3ba5 100644 --- a/lib/presentation/screens/dashboard/widgets/circle_indicator.dart +++ b/lib/presentation/screens/dashboard/widgets/circle_indicator.dart @@ -189,7 +189,7 @@ class SpeedProgressIndicatorState extends ConsumerState<SpeedProgressIndicator> ), Text( - unit == DistanceUnit.kilometers ? 'Km/h' : 'Mph', + unit == DistanceUnit.kilometers ? 'km/h' : 'mph', style: const TextStyle(color: Colors.white, fontSize: 40), ), ], diff --git a/lib/presentation/screens/dashboard/widgets/range.dart b/lib/presentation/screens/dashboard/widgets/range.dart index aea92af..34435ae 100644 --- a/lib/presentation/screens/dashboard/widgets/range.dart +++ b/lib/presentation/screens/dashboard/widgets/range.dart @@ -10,8 +10,12 @@ class RangeWidget extends ConsumerWidget { final range = ref.watch(vehicleProvider.select((vehicle) => vehicle.range)); final unit = ref.watch(unitStateProvider.select((unit) => unit.distanceUnit)); + final rangeString = (unit == DistanceUnit.kilometers) + ? (range / 1000.0).toStringAsFixed(0) + : (range / 1609.0).toStringAsFixed(0); + return Container( - height:130, + height: 130, width: 306, // padding: const EdgeInsets.all(10), decoration: const ShapeDecoration( @@ -54,24 +58,19 @@ class RangeWidget extends ConsumerWidget { ), RichText( text: TextSpan( - - text: '$range', + text: rangeString, style: GoogleFonts.brunoAce( - - textStyle: - const TextStyle( + textStyle: const TextStyle( color: Colors.white, fontSize: 44, ), ), children: <TextSpan>[ TextSpan( - text: - unit == DistanceUnit.kilometers ? ' Km' : ' Mi', + text: unit == DistanceUnit.kilometers ? ' km' : ' mi', style: GoogleFonts.brunoAce( textStyle: const TextStyle( - color: Color(0xFFC1D8FF), - fontSize: 38), + color: Color(0xFFC1D8FF), fontSize: 38), ), ), ]), 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<void> page() => + const MaterialPage<void>(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<AppState>().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 + ? <Color>[ + Colors.white, + Colors.blue, + const Color.fromARGB(16, 41, 98, 255) + ] + : <Color>[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 + ? <Color>[ + Colors.white, + Colors.blue, + const Color.fromARGB(16, 41, 98, 255) + ] + : <Color>[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<AppState>() .update((next) => AppState.tempUnit); }), + UnitsTile( + icon: Icons.straighten, + title: 'Pressure', + unitName: unit.pressureUnit == PressureUnit.kilopascals + ? 'kilopascals' + : 'PSI', + hasSwich: true, + voidCallback: () { + context + .flow<AppState>() + .update((next) => AppState.pressureUnit); + }), ], ), ), |