diff options
author | Lisandro Pérez Meyer <lpmeyer@ics.com> | 2023-12-14 13:24:42 -0300 |
---|---|---|
committer | Lisandro Pérez Meyer <lpmeyer@ics.com> | 2023-12-14 13:46:12 -0300 |
commit | dda6c8502a3fa1e50654c4cca934b4b846bbca98 (patch) | |
tree | fae219109b6fa5155ad8440354324d9522954498 /lib/presentation/screens/dashboard | |
parent | 71d46d03850653c0229c678de197c6f94fceb477 (diff) |
Hybrid animation from env variable
This commit changes central hybrid animation on dashboard screen.
For now we can set from env randomHybridAnimation variable.
If true animation should be switching randomly. If false just
setting proper hybrid mode based on speed and RPM value.
Also increase childLocks touch target
Original from: Dominik Wawrzonek <dwawrzonek@ics.com>
Bug-AGL: SPEC-4971
Change-Id: I71f09c63bd1bfeda174f92feafc58019c23d07cb
Signed-off-by: Lisandro Pérez Meyer <lpmeyer@ics.com>
Diffstat (limited to 'lib/presentation/screens/dashboard')
4 files changed, 112 insertions, 85 deletions
diff --git a/lib/presentation/screens/dashboard/widgets/child_lock.dart b/lib/presentation/screens/dashboard/widgets/child_lock.dart index b8701d7..c495fca 100644 --- a/lib/presentation/screens/dashboard/widgets/child_lock.dart +++ b/lib/presentation/screens/dashboard/widgets/child_lock.dart @@ -16,33 +16,41 @@ class ChildLockLeft extends ConsumerWidget { debugPrint('Tapped child lock left'); ref.read(vehicleProvider.notifier).setChildLock(side: 'left'); }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - const Text( - 'Child Lock', - style: TextStyle( - fontSize: 26, // Set the font size to 26 - ), - ), - Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Icon( - isChildLockActiveLeft ? Icons.lock : Icons.lock_open, - color: isChildLockActiveLeft ? Colors.white : Colors.redAccent, - size: 16, + child: Container( + height: 120, + width: 150, + color: Colors.transparent, + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'Child Lock', + style: TextStyle( + fontSize: 26, // Set the font size to 26 ), - Text( - isChildLockActiveLeft ? 'Activated' : 'Unlocked', - style: TextStyle( - color: isChildLockActiveLeft ? Colors.white : Colors.redAccent, - fontSize: 26, // Set the font size to 26 + ), + Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Icon( + isChildLockActiveLeft ? Icons.lock : Icons.lock_open, + color: + isChildLockActiveLeft ? Colors.white : Colors.redAccent, + size: 16, ), - ), - ], - ), - ], + Text( + isChildLockActiveLeft ? 'Activated' : 'Unlocked', + style: TextStyle( + color: + isChildLockActiveLeft ? Colors.white : Colors.redAccent, + fontSize: 26, // Set the font size to 26 + ), + ), + ], + ), + ], + ), ), ); } @@ -63,33 +71,42 @@ class ChildLockRight extends ConsumerWidget { debugPrint('Tapped child lock right'); ref.read(vehicleProvider.notifier).setChildLock(side: 'right'); }, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Text( - 'Child Lock', - style: TextStyle( - fontSize: 26, // Set the font size to 26 + child: Container( + height: 120, + width: 150, + color: Colors.transparent, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'Child Lock', + style: TextStyle( + fontSize: 26, // Set the font size to 26 + ), ), - ), - Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - children: [ - Text( - isChildLockActiveRight ? 'Activated' : 'Unlocked', - style: TextStyle( - color: isChildLockActiveRight ? Colors.white : Colors.redAccent, - fontSize: 26, // Set the font size to 26 + Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Text( + isChildLockActiveRight ? 'Activated' : 'Unlocked', + style: TextStyle( + color: isChildLockActiveRight + ? Colors.white + : Colors.redAccent, + fontSize: 26, // Set the font size to 26 + ), ), - ), - Icon( - isChildLockActiveRight ? Icons.lock : Icons.lock_open, - color: isChildLockActiveRight ? Colors.white : Colors.redAccent, - size: 16, - ), - ], - ), - ], + Icon( + isChildLockActiveRight ? Icons.lock : Icons.lock_open, + color: + isChildLockActiveRight ? Colors.white : Colors.redAccent, + size: 16, + ), + ], + ), + ], + ), ), ); } diff --git a/lib/presentation/screens/dashboard/widgets/dashboard_content.dart b/lib/presentation/screens/dashboard/widgets/dashboard_content.dart index 74f0d2a..28cf944 100644 --- a/lib/presentation/screens/dashboard/widgets/dashboard_content.dart +++ b/lib/presentation/screens/dashboard/widgets/dashboard_content.dart @@ -1,3 +1,4 @@ +import 'dart:async'; import 'dart:math'; import 'package:flutter_ics_homescreen/export.dart'; @@ -14,6 +15,7 @@ class DashBoardState extends ConsumerState<DashBoard> late AnimationController _animationController; late Animation<double> _animation; static bool _isAnimationPlayed = false; + late Timer timer; @override void initState() { @@ -36,11 +38,21 @@ class DashBoardState extends ConsumerState<DashBoard> _isAnimationPlayed = true; }); } + + if (randomHybridAnimation) { + timer = Timer.periodic(const Duration(seconds: 5), (timer) { + Random random = Random(); + int randomState = random.nextInt(4); + var hybridState = HybridState.values[randomState]; + ref.read(hybridStateProvider.notifier).setHybridState(hybridState); + }); + } } @override void dispose() { _animationController.dispose(); + timer.cancel(); super.dispose(); } @@ -58,11 +70,11 @@ class DashBoardState extends ConsumerState<DashBoard> Widget fadeContent = FadeTransition( opacity: _animation, - child: Column( + child: const Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.center, children: <Widget>[ - const Row( + Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, //mainAxisSize: MainAxisSize.max, children: [ @@ -71,24 +83,15 @@ class DashBoardState extends ConsumerState<DashBoard> FuelProgressIndicator(), ], ), - GestureDetector( - onTap: () { - Random random = Random(); - int randomState = random.nextInt(4); - var hybridState = HybridState.values[randomState]; - ref - .read(hybridtateProvider.notifier) - .setHybridState(hybridState); - }, - child: const HybridModel()), - const Row( + HybridModel(), + Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ TemperatureWidget(), RangeWidget(), ], ), - const CarStatus(), + CarStatus(), ], )); diff --git a/lib/presentation/screens/dashboard/widgets/hybrid/hybrid.dart b/lib/presentation/screens/dashboard/widgets/hybrid/hybrid.dart index b6844de..6badf62 100644 --- a/lib/presentation/screens/dashboard/widgets/hybrid/hybrid.dart +++ b/lib/presentation/screens/dashboard/widgets/hybrid/hybrid.dart @@ -21,7 +21,7 @@ class TopArrow extends StatelessWidget { return Align( alignment: const Alignment(0, -0.75), child: Consumer(builder: (context, ref, child) { - final state = ref.watch(hybridtateProvider.select((hybrid) => hybrid)); + final state = ref.watch(hybridStateProvider.select((hybrid) => hybrid)); Widget? widget; switch (state.topArrowState) { case ArrowState.blue: @@ -56,7 +56,7 @@ class LeftArrow extends StatelessWidget { return Align( alignment: const Alignment(-0.7, 0.5), child: Consumer(builder: (context, ref, child) { - final state = ref.watch(hybridtateProvider.select((hybrid) => hybrid)); + final state = ref.watch(hybridStateProvider.select((hybrid) => hybrid)); Widget? widget; switch (state.leftArrowState) { case ArrowState.blue: @@ -92,7 +92,7 @@ class RightArrow extends StatelessWidget { return Align( alignment: const Alignment(0.70, 0.5), child: Consumer(builder: (context, ref, child) { - final state = ref.watch(hybridtateProvider.select((hybrid) => hybrid)); + final state = ref.watch(hybridStateProvider.select((hybrid) => hybrid)); Widget? widget; switch (state.rightArrowState) { @@ -131,7 +131,7 @@ class BatteryHybrid extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final batteryState = - ref.watch(hybridtateProvider.select((hybrid) => hybrid.batteryState)); + ref.watch(hybridStateProvider.select((hybrid) => hybrid.batteryState)); return Align( alignment: const Alignment(0, 0.8), child: SvgPicture.asset( diff --git a/lib/presentation/screens/dashboard/widgets/hybrid_mode.dart b/lib/presentation/screens/dashboard/widgets/hybrid_mode.dart index 9a657b8..f5f1286 100644 --- a/lib/presentation/screens/dashboard/widgets/hybrid_mode.dart +++ b/lib/presentation/screens/dashboard/widgets/hybrid_mode.dart @@ -1,29 +1,36 @@ import 'package:flutter_ics_homescreen/export.dart'; -class HybridModel extends StatefulWidget { +class HybridModel extends ConsumerStatefulWidget { const HybridModel({super.key}); @override - State<HybridModel> createState() => _HybridModelState(); + HybridModelState createState() => HybridModelState(); } -class _HybridModelState extends State<HybridModel> { +class HybridModelState extends ConsumerState<HybridModel> { + @override Widget build(BuildContext context) { - - return GestureDetector( - child: const SizedBox( - width: 500, - height: 500, - child: Stack( - children: [ - HybridBackround(), - TopArrow(), - LeftArrow(), - RightArrow(), - BatteryHybrid(), - ], - ), + if (!randomHybridAnimation) { + ref.listen<Vehicle>(vehicleProvider, (Vehicle? previous, Vehicle next) { + ref.watch(hybridStateProvider.notifier).updateHybridState( + next.speed, + next.engineSpeed, + false); //TODO get brake value and improve state logic + }); + } + + return const SizedBox( + width: 500, + height: 500, + child: Stack( + children: [ + HybridBackround(), + TopArrow(), + LeftArrow(), + RightArrow(), + BatteryHybrid(), + ], ), ); } |