summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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(),
+ ],
),
);
}