From cb86ea65f570cb77b9939dc287b947cc7c64a3b9 Mon Sep 17 00:00:00 2001 From: AmirrezaChegini Date: Mon, 6 Oct 2025 11:07:58 +0330 Subject: [PATCH] fix: step on level page --- lib/core/routers/my_routes.dart | 2 +- .../data/datasource/level_datasource.dart | 4 +-- .../level/presentation/bloc/level_bloc.dart | 30 +++++++++++++------ .../level/presentation/bloc/level_event.dart | 1 + .../level/presentation/ui/level_page.dart | 26 +++++++--------- .../ui/widgets/hint_level_widget.dart | 9 ++++-- lib/l10n/app_en.arb | 3 +- lib/l10n/app_localizations.dart | 6 ++++ lib/l10n/app_localizations_en.dart | 3 ++ 9 files changed, 53 insertions(+), 31 deletions(-) diff --git a/lib/core/routers/my_routes.dart b/lib/core/routers/my_routes.dart index 2c5c202..1c696a2 100644 --- a/lib/core/routers/my_routes.dart +++ b/lib/core/routers/my_routes.dart @@ -60,7 +60,7 @@ GoRouter get appPages => GoRouter( name: Routes.levelPage, path: Routes.levelPage, builder: (context, state) => BlocProvider( - create: (context) => LevelBloc(locator())..add(GetLevelListEvent()), + create: (context) => LevelBloc(locator())..add(SetCurrentLevelEvent()), child: const LevelPage(), ), ), diff --git a/lib/features/level/data/datasource/level_datasource.dart b/lib/features/level/data/datasource/level_datasource.dart index e3c75fe..a1b6bea 100644 --- a/lib/features/level/data/datasource/level_datasource.dart +++ b/lib/features/level/data/datasource/level_datasource.dart @@ -20,8 +20,8 @@ class LocalLevelDatasourceImpl implements ILevelDatasource { final String selectedLanguage = LocalStorage.readData( key: MyConstants.selectLanguage); final Box levelBox = Hive.box(MyConstants.levelBox); - final TotalDataEntity findData = levelBox.values.singleWhere((e) => - e.code == selectedLanguage, + final TotalDataEntity findData = levelBox.values.singleWhere( + (e) => e.code == selectedLanguage, orElse: () => TotalDataEntity(), ); return findData.levels ?? []; diff --git a/lib/features/level/presentation/bloc/level_bloc.dart b/lib/features/level/presentation/bloc/level_bloc.dart index 2cb4c92..29c071b 100644 --- a/lib/features/level/presentation/bloc/level_bloc.dart +++ b/lib/features/level/presentation/bloc/level_bloc.dart @@ -20,6 +20,7 @@ class LevelBloc extends Bloc { this._getLeveslUseCase, ) : super(const LevelState()) { on(_getLevelListEvent); + on(_setCurrentLevelEvent); on(_startScrollEvent); } @@ -81,10 +82,9 @@ class LevelBloc extends Bloc { } LevelType getLevelType(int index) { - final int currentLevel = int.parse(LocalStorage - .readData(key: MyConstants.currentLevel) - .isEmpty ? '1' : LocalStorage - .readData(key: MyConstants.currentLevel)); + final int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel), + ); if (index < currentLevel) { return LevelType.finished; @@ -98,6 +98,9 @@ class LevelBloc extends Bloc { /// ------------Api Calls------------ FutureOr _getLevelListEvent(GetLevelListEvent event, Emitter emit) async { + final int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel), + ); await _getLeveslUseCase(LevelParams()).then((value) { value.fold( (data) async { @@ -107,7 +110,7 @@ class LevelBloc extends Bloc { } emit(state.copyWith( getLevelStatus: const BaseComplete(''), - chooseLevel: data.first, + chooseLevel: data.singleWhere((e) => e.order == currentLevel), )); add(StartScrollEvent()); }, @@ -120,10 +123,9 @@ class LevelBloc extends Bloc { StartScrollEvent event, Emitter emit, ) async { - final int currentLevel = int.parse(LocalStorage - .readData(key: MyConstants.currentLevel) - .isEmpty ? '1' : LocalStorage - .readData(key: MyConstants.currentLevel)); + final int currentLevel = int.parse( + LocalStorage.readData(key: MyConstants.currentLevel), + ); await Future.delayed(const Duration(seconds: 1)); if (scrollController.hasClients) { @@ -142,4 +144,14 @@ class LevelBloc extends Bloc { } } } + + FutureOr _setCurrentLevelEvent(SetCurrentLevelEvent event, + Emitter emit) async { + final String currentLevel = LocalStorage.readData( + key: MyConstants.currentLevel); + if (currentLevel.isEmpty) { + await LocalStorage.saveData(key: MyConstants.currentLevel, value: '1'); + } + add(GetLevelListEvent()); + } } diff --git a/lib/features/level/presentation/bloc/level_event.dart b/lib/features/level/presentation/bloc/level_event.dart index d081e54..88f0cca 100644 --- a/lib/features/level/presentation/bloc/level_event.dart +++ b/lib/features/level/presentation/bloc/level_event.dart @@ -6,6 +6,7 @@ sealed class LevelEvent { class GetLevelListEvent extends LevelEvent {} class StartScrollEvent extends LevelEvent {} +class SetCurrentLevelEvent extends LevelEvent {} class ChooseLevelEvent extends LevelEvent { final LevelEntity level; const ChooseLevelEvent(this.level); diff --git a/lib/features/level/presentation/ui/level_page.dart b/lib/features/level/presentation/ui/level_page.dart index d971070..d60ba04 100644 --- a/lib/features/level/presentation/ui/level_page.dart +++ b/lib/features/level/presentation/ui/level_page.dart @@ -43,22 +43,16 @@ class LevelPage extends StatelessWidget { buildWhen: (previous, current) => previous.chooseLevel?.id != current.chooseLevel?.id, builder: (context, state) { - if (state.chooseLevel != null) { - return Positioned( - bottom: MediaQuery - .viewPaddingOf(context) - .bottom + MySpaces.s10, - right: MySpaces.s16, - left: MySpaces.s16, - child: HintLevelWidget( - level: state.chooseLevel ?? LevelEntity(), - onTap: (level) => - context.read().goToQuestionPage(context, level), - ), - ); - } else { - return SizedBox.shrink(); - } + return Positioned( + bottom: MediaQuery.viewPaddingOf(context).bottom + MySpaces.s10, + right: MySpaces.s16, + left: MySpaces.s16, + child: HintLevelWidget( + level: state.chooseLevel ?? LevelEntity(), + onTap: (level) => + context.read().goToQuestionPage(context, level), + ), + ); } ); } diff --git a/lib/features/level/presentation/ui/widgets/hint_level_widget.dart b/lib/features/level/presentation/ui/widgets/hint_level_widget.dart index ad98952..c5a95bd 100644 --- a/lib/features/level/presentation/ui/widgets/hint_level_widget.dart +++ b/lib/features/level/presentation/ui/widgets/hint_level_widget.dart @@ -3,12 +3,17 @@ import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; import 'package:hadi_hoda_flutter/core/utils/my_image.dart'; +import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; import 'package:hadi_hoda_flutter/core/widgets/answer_box/styles/text_box.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; class HintLevelWidget extends StatelessWidget { - const HintLevelWidget({super.key, required this.level, this.onTap,}); + const HintLevelWidget({ + super.key, + required this.level, + this.onTap, + }); final LevelEntity level; final Function(LevelEntity level)? onTap; @@ -36,7 +41,7 @@ class HintLevelWidget extends StatelessWidget { spacing: MySpaces.s8, children: [ Text( - 'Step ${level.order ?? 0}', + '${context.translate.step} ${level.order ?? 0}', style: Marhey.bold14.copyWith( color: Color(0xFFD8490B), ), diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index efe6555..f668943 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -9,5 +9,6 @@ "lost_connection": "Lost connection!", "try_again": "Try Again", "connected_to_internet": "You must be connected to the internet to download the initial game data.", - "start": "Start" + "start": "Start", + "step": "Step" } \ No newline at end of file diff --git a/lib/l10n/app_localizations.dart b/lib/l10n/app_localizations.dart index 8edc5d4..a0a0462 100644 --- a/lib/l10n/app_localizations.dart +++ b/lib/l10n/app_localizations.dart @@ -159,6 +159,12 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'Start'** String get start; + + /// No description provided for @step. + /// + /// In en, this message translates to: + /// **'Step'** + String get step; } class _AppLocalizationsDelegate diff --git a/lib/l10n/app_localizations_en.dart b/lib/l10n/app_localizations_en.dart index d43de00..1d2e5f4 100644 --- a/lib/l10n/app_localizations_en.dart +++ b/lib/l10n/app_localizations_en.dart @@ -42,4 +42,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String get start => 'Start'; + + @override + String get step => 'Step'; }