Browse Source

fix: scroll on level page and get current mission

pull/14/head
AmirrezaChegini 3 days ago
parent
commit
484b35dc43
  1. 1
      lib/core/constants/my_constants.dart
  2. 54
      lib/features/level/presentation/bloc/level_bloc.dart
  3. 1
      lib/features/level/presentation/bloc/level_event.dart
  4. 11
      lib/features/level/presentation/ui/level_page.dart

1
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';
}

54
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<LevelEvent, LevelState> {
/// ------------constructor------------
@ -17,6 +20,7 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
this._getLeveslUseCase,
) : super(const LevelState()) {
on<GetLevelListEvent>(_getLevelListEvent);
on<StartScrollEvent>(_startScrollEvent);
}
@override
@ -76,6 +80,21 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
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<void> _getLevelListEvent(GetLevelListEvent event,
Emitter<LevelState> emit) async {
@ -90,16 +109,37 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
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<void> _startScrollEvent(
StartScrollEvent event,
Emitter<LevelState> 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,
);
}
}
}
}

1
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);

11
lib/features/level/presentation/ui/level_page.dart

@ -110,9 +110,8 @@ class LevelPage extends StatelessWidget {
child: LevelWidget(
index: context.read<LevelBloc>().topLocationList[index].index ?? 0,
level: context.read<LevelBloc>().top12LevelList[index],
onTap: (LevelEntity level) {
},
type: context.read<LevelBloc>().getLevelType(index + 9),
onTap: (LevelEntity level) {},
),
),
),
@ -144,10 +143,8 @@ class LevelPage extends StatelessWidget {
child: LevelWidget(
index: context.read<LevelBloc>().bottomLocationList[index].index ?? 0,
level: context.read<LevelBloc>().bottom8LevelList[index],
type: index == 0 ? LevelType.current : LevelType.unFinished,
onTap: (LevelEntity level) {
},
type: context.read<LevelBloc>().getLevelType(index + 1),
onTap: (LevelEntity level) {},
),
),
),

Loading…
Cancel
Save