From c9c85a45ce017f9779a3559f350ad617228d9a78 Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Wed, 29 Oct 2025 10:46:44 +0330 Subject: [PATCH] add: intro middleware --- lib/core/constants/my_constants.dart | 1 + lib/core/middlewares/my_middlewares.dart | 12 +++++++++++- lib/core/routers/my_routes.dart | 1 + lib/features/home/presentation/bloc/home_bloc.dart | 2 +- lib/features/intro/presentation/bloc/intro_bloc.dart | 9 +++++++-- 5 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lib/core/constants/my_constants.dart b/lib/core/constants/my_constants.dart index f1fb0c4..f06985f 100644 --- a/lib/core/constants/my_constants.dart +++ b/lib/core/constants/my_constants.dart @@ -15,5 +15,6 @@ class MyConstants { static const String currentLevel = 'CURRENT_LEVEL'; static const String mainAudioService = 'MAIN_AUDIO_SERVICE'; static const String effectAudioService = 'EFFECT_AUDIO_SERVICE'; + static const String firstIntro = 'FIRST_INTRO'; static const double mainAudioVolume = 0.3; } \ No newline at end of file diff --git a/lib/core/middlewares/my_middlewares.dart b/lib/core/middlewares/my_middlewares.dart index 40972de..b903036 100644 --- a/lib/core/middlewares/my_middlewares.dart +++ b/lib/core/middlewares/my_middlewares.dart @@ -11,7 +11,7 @@ class MyMiddlewares { const MyMiddlewares._internal(); factory MyMiddlewares() => _i; - static FutureOr splash(BuildContext context, GoRouterState state) { + static FutureOr splash(BuildContext context, GoRouterState state) { final String? firstDownload = LocalStorage.readData( key: MyConstants.firstDownload); if (firstDownload != 'true') { @@ -20,4 +20,14 @@ class MyMiddlewares { return null; } } + + static FutureOr intro(BuildContext context, GoRouterState state) { + final String? firstIntro = LocalStorage.readData( + key: MyConstants.firstIntro); + if (firstIntro == 'true') { + return Routes.levelPage; + } else { + return null; + } + } } diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart index 0c25651..900366f 100644 --- a/lib/core/routers/my_routes.dart +++ b/lib/core/routers/my_routes.dart @@ -47,6 +47,7 @@ GoRouter get appPages => GoRouter( GoRoute( name: Routes.introPage, path: Routes.introPage, + redirect: MyMiddlewares.intro, builder: (context, state) => BlocProvider( create: (context) => IntroBloc(), child: const IntroPage(), diff --git a/lib/features/home/presentation/bloc/home_bloc.dart b/lib/features/home/presentation/bloc/home_bloc.dart index 339e1e5..8b2daeb 100644 --- a/lib/features/home/presentation/bloc/home_bloc.dart +++ b/lib/features/home/presentation/bloc/home_bloc.dart @@ -45,7 +45,7 @@ class HomeBloc extends Bloc { orElse: () => TotalDataEntity(), ); if (findData.levels?.isNotEmpty ?? false) { - context.pushNamed(Routes.levelPage); + context.pushNamed(Routes.introPage); } else { context.goNamed(Routes.downloadPage); } diff --git a/lib/features/intro/presentation/bloc/intro_bloc.dart b/lib/features/intro/presentation/bloc/intro_bloc.dart index 127197b..8f446c0 100644 --- a/lib/features/intro/presentation/bloc/intro_bloc.dart +++ b/lib/features/intro/presentation/bloc/intro_bloc.dart @@ -3,8 +3,10 @@ import 'dart:async'; import 'package:bloc/bloc.dart'; import 'package:flutter/cupertino.dart'; import 'package:go_router/go_router.dart'; +import 'package:hadi_hoda_flutter/core/constants/my_constants.dart'; import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; import 'package:hadi_hoda_flutter/core/utils/context_provider.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart'; import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_state.dart'; import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_1_screen.dart'; @@ -33,8 +35,11 @@ class IntroBloc extends Bloc { /// ------------Controllers------------ /// ------------Functions------------ - void goToLevelPage(){ - ContextProvider.context.go(Routes.levelPage); + Future goToLevelPage() async { + await LocalStorage.saveData(key: MyConstants.firstIntro, value: 'true'); + if (ContextProvider.context.mounted) { + ContextProvider.context.replaceNamed(Routes.levelPage); + } } /// ------------Api Calls------------