Browse Source

fix: select previous level

pull/20/head
AmirrezaChegini 3 weeks ago
parent
commit
715cd1bec6
  1. 10
      lib/features/level/presentation/bloc/level_bloc.dart
  2. 4
      lib/features/level/presentation/bloc/level_event.dart
  3. 29
      lib/features/level/presentation/ui/level_page.dart
  4. 12
      lib/features/level/presentation/ui/widgets/level_widget.dart
  5. 14
      lib/features/question/presentation/bloc/question_bloc.dart

10
lib/features/level/presentation/bloc/level_bloc.dart

@ -26,6 +26,7 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
on<GetLevelListEvent>(_getLevelListEvent);
on<SetCurrentLevelEvent>(_setCurrentLevelEvent);
on<StartScrollEvent>(_startScrollEvent);
on<ChooseLevelEvent>(_chooseLevelEvent);
}
@override
@ -39,7 +40,7 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
/// ------------Variables------------
final List<LevelLocation> bottomLocationList = [
LevelLocation(bottom: -30, left: 30, index: 1),
LevelLocation(bottom: -20, left: 30, index: 1),
LevelLocation(bottom: 50, left: 100, index: 2),
LevelLocation(bottom: 150, left: 60, index: 3),
LevelLocation(bottom: 210, left: 110, index: 4),
@ -173,4 +174,11 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
}
add(GetLevelListEvent());
}
FutureOr<void> _chooseLevelEvent(ChooseLevelEvent event,
Emitter<LevelState> emit,) {
if (event.type != LevelType.unFinished) {
emit(state.copyWith(chooseLevel: event.level));
}
}
}

4
lib/features/level/presentation/bloc/level_event.dart

@ -1,4 +1,5 @@
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/level_widget.dart';
sealed class LevelEvent {
const LevelEvent();
@ -9,5 +10,6 @@ class StartScrollEvent extends LevelEvent {}
class SetCurrentLevelEvent extends LevelEvent {}
class ChooseLevelEvent extends LevelEvent {
final LevelEntity level;
const ChooseLevelEvent(this.level);
final LevelType type;
const ChooseLevelEvent(this.level, this.type);
}

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

@ -6,6 +6,7 @@ import 'package:hadi_hoda_flutter/core/utils/screen_size.dart';
import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart';
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_entity.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_bloc.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/bottom_path.dart';
import 'package:hadi_hoda_flutter/features/level/presentation/ui/widgets/hint_level_widget.dart';
@ -113,10 +114,15 @@ class LevelPage extends StatelessWidget {
bottom: context.read<LevelBloc>().topLocationList[index].bottom,
right: context.read<LevelBloc>().topLocationList[index].right,
left: context.read<LevelBloc>().topLocationList[index].left,
child: LevelWidget(
level: context.read<LevelBloc>().top12LevelList[index],
type: context.read<LevelBloc>().getLevelType(index + 9),
onTap: (LevelEntity level) {},
child: BlocBuilder<LevelBloc, LevelState>(
builder: (context, state) => LevelWidget(
chooseLevel: state.chooseLevel,
level: context.read<LevelBloc>().top12LevelList[index],
type: context.read<LevelBloc>().getLevelType(index + 9),
onTap: (LevelEntity level, LevelType type) {
context.read<LevelBloc>().add(ChooseLevelEvent(level, type));
},
),
),
),
),
@ -142,10 +148,17 @@ class LevelPage extends StatelessWidget {
bottom: context.read<LevelBloc>().bottomLocationList[index].bottom,
right: context.read<LevelBloc>().bottomLocationList[index].right,
left: context.read<LevelBloc>().bottomLocationList[index].left,
child: LevelWidget(
level: context.read<LevelBloc>().bottom8LevelList[index],
type: context.read<LevelBloc>().getLevelType(index + 1),
onTap: (LevelEntity level) {},
child: BlocBuilder<LevelBloc, LevelState>(
buildWhen: (previous, current) =>
previous.chooseLevel?.id != current.chooseLevel?.id,
builder: (context, state) => LevelWidget(
chooseLevel: state.chooseLevel,
level: context.read<LevelBloc>().bottom8LevelList[index],
type: context.read<LevelBloc>().getLevelType(index + 1),
onTap: (LevelEntity level, LevelType type) {
context.read<LevelBloc>().add(ChooseLevelEvent(level, type));
},
),
),
),
),

12
lib/features/level/presentation/ui/widgets/level_widget.dart

@ -21,18 +21,20 @@ class LevelWidget extends StatelessWidget {
const LevelWidget({
super.key,
required this.level,
this.type,
required this.type,
required this.chooseLevel,
this.onTap,
});
final LevelType? type;
final LevelType type;
final LevelEntity level;
final Function(LevelEntity level)? onTap;
final LevelEntity? chooseLevel;
final Function(LevelEntity level, LevelType type)? onTap;
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () => onTap?.call(level),
onTap: () => onTap?.call(level, type),
child: Stack(
alignment: Alignment.topCenter,
clipBehavior: Clip.none,
@ -51,7 +53,7 @@ class LevelWidget extends StatelessWidget {
],
),
),
if(type == LevelType.current)
if(level.id == chooseLevel?.id)
Positioned(
top: -20,
child: MyImage(

14
lib/features/question/presentation/bloc/question_bloc.dart

@ -126,13 +126,15 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
);
if (state.currentQuestion?.order ==
state.levelEntity?.questions?.length) {
int currentLevel = int.parse(
int currentLevel = int.parse(
LocalStorage.readData(key: MyConstants.currentLevel) ?? '1');
++currentLevel;
await LocalStorage.saveData(
key: MyConstants.currentLevel,
value: '$currentLevel',
);
if (state.levelEntity?.order == currentLevel) {
++currentLevel;
await LocalStorage.saveData(
key: MyConstants.currentLevel,
value: '$currentLevel',
);
}
} else {
await playVoice();
}

Loading…
Cancel
Save