diff --git a/lib/core/constants/my_constants.dart b/lib/core/constants/my_constants.dart index 76b8d54..09e197e 100644 --- a/lib/core/constants/my_constants.dart +++ b/lib/core/constants/my_constants.dart @@ -10,4 +10,5 @@ class MyConstants { static const String extractCompleted = 'EXTRACT_COMPLETED'; static const String selectLanguage = 'SELECT_LANGUAGE'; static const String firstLanguagePage = 'FIRST_LANGUAGE_PAGE'; + static const String currentLevel = 'CURRENT_LEVEL'; } \ No newline at end of file diff --git a/lib/features/level/presentation/bloc/level_bloc.dart b/lib/features/level/presentation/bloc/level_bloc.dart index 93374b5..2cb4c92 100644 --- a/lib/features/level/presentation/bloc/level_bloc.dart +++ b/lib/features/level/presentation/bloc/level_bloc.dart @@ -2,14 +2,17 @@ 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/params/level_params.dart'; import 'package:hadi_hoda_flutter/core/routers/my_routes.dart'; import 'package:hadi_hoda_flutter/core/status/base_status.dart'; +import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart'; import 'package:hadi_hoda_flutter/features/level/domain/entity/level_location.dart'; import 'package:hadi_hoda_flutter/features/level/domain/usecases/get_levels_usecase.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_event.dart'; import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.dart'; +import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart'; class LevelBloc extends Bloc { /// ------------constructor------------ @@ -17,6 +20,7 @@ class LevelBloc extends Bloc { this._getLeveslUseCase, ) : super(const LevelState()) { on(_getLevelListEvent); + on(_startScrollEvent); } @override @@ -76,6 +80,21 @@ class LevelBloc extends Bloc { context.pop(); } + LevelType getLevelType(int index) { + final int currentLevel = int.parse(LocalStorage + .readData(key: MyConstants.currentLevel) + .isEmpty ? '1' : LocalStorage + .readData(key: MyConstants.currentLevel)); + + if (index < currentLevel) { + return LevelType.finished; + } else if (index == currentLevel) { + return LevelType.current; + } else { + return LevelType.unFinished; + } + } + /// ------------Api Calls------------ FutureOr _getLevelListEvent(GetLevelListEvent event, Emitter emit) async { @@ -90,16 +109,37 @@ class LevelBloc extends Bloc { getLevelStatus: const BaseComplete(''), chooseLevel: data.first, )); - await Future.delayed(Duration(milliseconds: 500), () { - scrollController.animateTo( - scrollController.position.maxScrollExtent, - duration: Duration(seconds: 500), - curve: Curves.easeInOut, - ); - }); + add(StartScrollEvent()); }, (error) {}, ); }); } + + FutureOr _startScrollEvent( + StartScrollEvent event, + Emitter emit, + ) async { + final int currentLevel = int.parse(LocalStorage + .readData(key: MyConstants.currentLevel) + .isEmpty ? '1' : LocalStorage + .readData(key: MyConstants.currentLevel)); + + await Future.delayed(const Duration(seconds: 1)); + if (scrollController.hasClients) { + if(currentLevel < 9){ + scrollController.animateTo( + scrollController.position.maxScrollExtent, + duration: const Duration(milliseconds: 500), // Note: 500 seconds is very long. + curve: Curves.easeInOut, + ); + } else if( currentLevel > 8 && currentLevel < 14){ + scrollController.animateTo( + scrollController.position.maxScrollExtent / 2, + duration: const Duration(milliseconds: 500), // Note: 500 seconds is very long. + curve: Curves.easeInOut, + ); + } + } + } } diff --git a/lib/features/level/presentation/bloc/level_event.dart b/lib/features/level/presentation/bloc/level_event.dart index 6f9020c..d081e54 100644 --- a/lib/features/level/presentation/bloc/level_event.dart +++ b/lib/features/level/presentation/bloc/level_event.dart @@ -5,6 +5,7 @@ sealed class LevelEvent { } class GetLevelListEvent extends LevelEvent {} +class StartScrollEvent 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 1c53899..d971070 100644 --- a/lib/features/level/presentation/ui/level_page.dart +++ b/lib/features/level/presentation/ui/level_page.dart @@ -110,9 +110,8 @@ class LevelPage extends StatelessWidget { child: LevelWidget( index: context.read().topLocationList[index].index ?? 0, level: context.read().top12LevelList[index], - onTap: (LevelEntity level) { - - }, + type: context.read().getLevelType(index + 9), + onTap: (LevelEntity level) {}, ), ), ), @@ -144,10 +143,8 @@ class LevelPage extends StatelessWidget { child: LevelWidget( index: context.read().bottomLocationList[index].index ?? 0, level: context.read().bottom8LevelList[index], - type: index == 0 ? LevelType.current : LevelType.unFinished, - onTap: (LevelEntity level) { - - }, + type: context.read().getLevelType(index + 1), + onTap: (LevelEntity level) {}, ), ), ),