From 1dcc7686582c0354dcbe5556896aa8dab895f4ea Mon Sep 17 00:00:00 2001
From: Florian Schindler <florianschndlr@gmail.com>
Date: Tue, 20 Jun 2023 19:40:20 +0200
Subject: [PATCH] bug fix onboarding

fixed a bug where the onboarding would also be displayed on the second visit
---
 trackeroo/lib/app.dart                              |  6 +++---
 trackeroo/lib/frontend/views/onboarding_view.dart   |  7 +++++++
 .../lib/logic/{services => models}/app_state.dart   |  0
 .../lib/logic/services/app_state_controller.dart    | 13 +++++++++++++
 trackeroo/lib/logic/services/locator.dart           |  8 +++++---
 5 files changed, 28 insertions(+), 6 deletions(-)
 rename trackeroo/lib/logic/{services => models}/app_state.dart (100%)
 create mode 100644 trackeroo/lib/logic/services/app_state_controller.dart

diff --git a/trackeroo/lib/app.dart b/trackeroo/lib/app.dart
index 733fb99..1588070 100644
--- a/trackeroo/lib/app.dart
+++ b/trackeroo/lib/app.dart
@@ -2,13 +2,13 @@ import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:trackeroo/app_scaffold.dart';
 import 'package:trackeroo/frontend/views/onboarding_view.dart';
-import 'package:trackeroo/logic/services/app_state.dart';
+import 'package:trackeroo/logic/services/app_state_controller.dart';
 import 'package:trackeroo/logic/services/locator.dart';
 
 class MyApp extends StatelessWidget {
   MyApp({super.key});
 
-  final AppState appState = locator.get<AppState>();
+  final AppStateController appStateController = locator.get<AppStateController>();
 
   // This widget is the root of your application.
   @override
@@ -45,7 +45,7 @@ class MyApp extends StatelessWidget {
               useMaterial3: true,
               // textTheme: GoogleFonts.rubikTextTheme(ThemeData.dark().textTheme)
             ),
-            home: appState.isFirstOpening ? const OnboardingView() : const AppScaffold(),
+            home: appStateController.appState.isFirstOpening ? const OnboardingView() : const AppScaffold(),
           );
         }
       ),
diff --git a/trackeroo/lib/frontend/views/onboarding_view.dart b/trackeroo/lib/frontend/views/onboarding_view.dart
index 4ba8b61..629224e 100644
--- a/trackeroo/lib/frontend/views/onboarding_view.dart
+++ b/trackeroo/lib/frontend/views/onboarding_view.dart
@@ -5,6 +5,8 @@ import 'package:trackeroo/frontend/utils/onboarding/ob_details.dart';
 import 'package:trackeroo/frontend/utils/onboarding/ob_home.dart';
 import 'package:trackeroo/frontend/utils/onboarding/ob_welcome.dart';
 import 'package:trackeroo/frontend/utils/onboarding/ob_trackeroo.dart';
+import 'package:trackeroo/logic/services/app_state_controller.dart';
+import 'package:trackeroo/logic/services/locator.dart';
 
 class OnboardingView extends StatefulWidget {
   const OnboardingView({super.key});
@@ -15,6 +17,7 @@ class OnboardingView extends StatefulWidget {
 
 class _OnboardingViewState extends State<OnboardingView> {
   final controller = PageController();
+  final AppStateController appStateController = locator.get<AppStateController>();
 
   int pageIndex = 0;
 
@@ -48,6 +51,8 @@ class _OnboardingViewState extends State<OnboardingView> {
           children: [
             IconButton(
               onPressed: () {
+                appStateController.appState.isFirstOpening = false;
+                appStateController.safeAppState();
                 Navigator.of(context).popUntil((route) => route.isFirst);
                 Navigator.pushReplacement(
                   context,
@@ -80,6 +85,8 @@ class _OnboardingViewState extends State<OnboardingView> {
             IconButton(
               onPressed: () {
                 if(pageIndex == 4) {
+                  appStateController.appState.isFirstOpening = false;
+                  appStateController.safeAppState();
                   Navigator.of(context).popUntil((route) => route.isFirst);
                   Navigator.pushReplacement(
                     context,
diff --git a/trackeroo/lib/logic/services/app_state.dart b/trackeroo/lib/logic/models/app_state.dart
similarity index 100%
rename from trackeroo/lib/logic/services/app_state.dart
rename to trackeroo/lib/logic/models/app_state.dart
diff --git a/trackeroo/lib/logic/services/app_state_controller.dart b/trackeroo/lib/logic/services/app_state_controller.dart
new file mode 100644
index 0000000..fe6ba8e
--- /dev/null
+++ b/trackeroo/lib/logic/services/app_state_controller.dart
@@ -0,0 +1,13 @@
+import 'package:hive/hive.dart';
+import 'package:trackeroo/logic/models/app_state.dart';
+
+class AppStateController {
+  AppStateController({required this.appStateBox, required this.appState});
+
+  Box<dynamic> appStateBox;
+  AppState appState;
+
+  void safeAppState() {
+    appStateBox.put('is_first_opening', appState.isFirstOpening);
+  }
+}
diff --git a/trackeroo/lib/logic/services/locator.dart b/trackeroo/lib/logic/services/locator.dart
index bcc04d5..d39aa6d 100644
--- a/trackeroo/lib/logic/services/locator.dart
+++ b/trackeroo/lib/logic/services/locator.dart
@@ -4,7 +4,8 @@ import 'package:hive/hive.dart';
 import 'package:get_it/get_it.dart';
 
 import 'package:trackeroo/logic/models/category.dart';
-import 'package:trackeroo/logic/services/app_state.dart';
+import 'package:trackeroo/logic/models/app_state.dart';
+import 'package:trackeroo/logic/services/app_state_controller.dart';
 import 'package:trackeroo/logic/services/categories_controller.dart';
 
 final locator = GetIt.instance;
@@ -14,9 +15,10 @@ Future<void> setupLocatorService() async {
   var appStateBox = await Hive.openBox('app_state_box');
   Map<dynamic, dynamic> appStateMap = appStateBox.toMap();
   AppState appState = AppState(
-    isFirstOpening: appStateMap['isFirstOpening'] ?? true
+    isFirstOpening: appStateMap['is_first_opening'] ?? true
   );
-  locator.registerLazySingleton<AppState>(() => appState);
+  AppStateController appStateController = AppStateController(appStateBox: appStateBox, appState: appState);
+  locator.registerLazySingleton<AppStateController>(() => appStateController);
 
   // load categories from box and safe to list, make list available in get_it
   var categoriesBox = await Hive.openBox('categories_box');
-- 
GitLab