summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLisandro Pérez Meyer <lpmeyer@ics.com>2023-12-14 13:24:42 -0300
committerLisandro Pérez Meyer <lpmeyer@ics.com>2023-12-14 13:46:12 -0300
commitdda6c8502a3fa1e50654c4cca934b4b846bbca98 (patch)
treefae219109b6fa5155ad8440354324d9522954498
parent71d46d03850653c0229c678de197c6f94fceb477 (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>
-rw-r--r--lib/core/constants/constants.dart1
-rw-r--r--lib/data/data_providers/app_provider.dart4
-rw-r--r--lib/data/data_providers/hybrid_notifier.dart45
-rw-r--r--lib/presentation/screens/dashboard/widgets/child_lock.dart117
-rw-r--r--lib/presentation/screens/dashboard/widgets/dashboard_content.dart31
-rw-r--r--lib/presentation/screens/dashboard/widgets/hybrid/hybrid.dart8
-rw-r--r--lib/presentation/screens/dashboard/widgets/hybrid_mode.dart41
7 files changed, 132 insertions, 115 deletions
diff --git a/lib/core/constants/constants.dart b/lib/core/constants/constants.dart
index 5d79b5a..03c1f8a 100644
--- a/lib/core/constants/constants.dart
+++ b/lib/core/constants/constants.dart
@@ -10,6 +10,7 @@ const maxRpm = 8000;
final GlobalKey<ScaffoldState> homeScaffoldKey = GlobalKey();
const debugDisplay = bool.fromEnvironment('DEBUG_DISPLAY');
const disableBkgAnimation = bool.fromEnvironment('DISABLE_BKG_ANIMATION');
+const randomHybridAnimation = bool.fromEnvironment('RANDOM_HYBRID_ANIMATION');
diff --git a/lib/data/data_providers/app_provider.dart b/lib/data/data_providers/app_provider.dart
index f6fb1ad..fb0a447 100644
--- a/lib/data/data_providers/app_provider.dart
+++ b/lib/data/data_providers/app_provider.dart
@@ -54,7 +54,8 @@ final usersProvider = StateNotifierProvider<UsersNotifier, Users>((ref) {
return UsersNotifier(Users.initial());
});
-final hybridtateProvider = StateNotifierProvider<HybridNotifier, Hybrid>((ref) {
+final hybridStateProvider =
+ StateNotifierProvider<HybridNotifier, Hybrid>((ref) {
return HybridNotifier(const Hybrid.initial());
});
@@ -62,3 +63,4 @@ final currentTimeProvider =
StateNotifierProvider<CurrentTimeNotifier, DateTime>((ref) {
return CurrentTimeNotifier();
});
+
diff --git a/lib/data/data_providers/hybrid_notifier.dart b/lib/data/data_providers/hybrid_notifier.dart
index fd16a68..3668f61 100644
--- a/lib/data/data_providers/hybrid_notifier.dart
+++ b/lib/data/data_providers/hybrid_notifier.dart
@@ -43,7 +43,7 @@ class HybridNotifier extends StateNotifier<Hybrid> {
state = state.copyWith(hybridState: hybridState);
}
- void updateHybridState() {
+ void updateHybridState(double speed, double engineSpeed, bool brake) {
// Variable to store the current state
HybridState currentState = state.hybridState;
@@ -56,38 +56,25 @@ class HybridNotifier extends StateNotifier<Hybrid> {
// Variable for storing the average value of RPM
double avgRpm = 0.0;
- // Variable to store the brake value state
- bool brake = false;
-
- // Collect 10 samples
- for (int i = 0; i < 10; i++) {
- // Get the current values for speed, engine rpm and brake status
-
- // speed = vehicleProvider();
- // rpm = _rpmFromServer();
- // brake = _brakeFromServer();
-
- // Calculate the average speed value
- // avgSpeed = (avgSpeed * (i + 1) + speed) / (i + 2);
-
- // Calculate the average engine rpm
- // avgRpm = (avgRpm * (i + 1) + rpm) / (i + 2);
+
+ if (speed == 0 && engineSpeed == 0) {
+ // Set idle state.
+ currentState = HybridState.idle;
+ } else if (engineSpeed > 0 && speed > 0) {
+ // Set stan na engine output state..
+ currentState = HybridState.engineOutput;
+ } else if (speed < 0 && brake) {
+ // Set regenerative breaking state
+ currentState = HybridState.regenerativeBreaking;
+ } else if (speed > 0 && engineSpeed <= 0) {
+ // Set battery output state
+ currentState = HybridState.baterryOutput;
}
- // define new state
- // if (avgSpeed == 0 && avgRpm == 0) {
- // currentState = HybridState.idle;
- // } else if (avgRpm > 0 && avgSpeed > 0) {
- // currentState = HybridState.engineOutput;
- // } else if (avgRpm == 0 && brake) {
- // currentState = HybridState.regenerativeBreaking;
- // } else if (avgSpeed > 0 && avgRpm <= avgSpeed) {
- // currentState = HybridState.baterryOutput;
- // }
-
// Update hybrid state
if (currentState != previousState) {
- state = state.copyWith(hybridState: currentState);
+ //state = state.copyWith(hybridState: currentState);
+ setHybridState(currentState);
}
}
}
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(),
+ ],
),
);
}