|
@ -2,14 +2,17 @@ import 'dart:async'; |
|
|
import 'package:bloc/bloc.dart'; |
|
|
import 'package:bloc/bloc.dart'; |
|
|
import 'package:flutter/cupertino.dart'; |
|
|
import 'package:flutter/cupertino.dart'; |
|
|
import 'package:go_router/go_router.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/params/level_params.dart'; |
|
|
import 'package:hadi_hoda_flutter/core/routers/my_routes.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/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_entity.dart'; |
|
|
import 'package:hadi_hoda_flutter/features/level/domain/entity/level_location.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/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_event.dart'; |
|
|
import 'package:hadi_hoda_flutter/features/level/presentation/bloc/level_state.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> { |
|
|
class LevelBloc extends Bloc<LevelEvent, LevelState> { |
|
|
/// ------------constructor------------ |
|
|
/// ------------constructor------------ |
|
@ -17,6 +20,7 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> { |
|
|
this._getLeveslUseCase, |
|
|
this._getLeveslUseCase, |
|
|
) : super(const LevelState()) { |
|
|
) : super(const LevelState()) { |
|
|
on<GetLevelListEvent>(_getLevelListEvent); |
|
|
on<GetLevelListEvent>(_getLevelListEvent); |
|
|
|
|
|
on<StartScrollEvent>(_startScrollEvent); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@override |
|
|
@override |
|
@ -76,6 +80,21 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> { |
|
|
context.pop(); |
|
|
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------------ |
|
|
/// ------------Api Calls------------ |
|
|
FutureOr<void> _getLevelListEvent(GetLevelListEvent event, |
|
|
FutureOr<void> _getLevelListEvent(GetLevelListEvent event, |
|
|
Emitter<LevelState> emit) async { |
|
|
Emitter<LevelState> emit) async { |
|
@ -90,16 +109,37 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> { |
|
|
getLevelStatus: const BaseComplete(''), |
|
|
getLevelStatus: const BaseComplete(''), |
|
|
chooseLevel: data.first, |
|
|
chooseLevel: data.first, |
|
|
)); |
|
|
)); |
|
|
await Future.delayed(Duration(milliseconds: 500), () { |
|
|
|
|
|
scrollController.animateTo( |
|
|
|
|
|
scrollController.position.maxScrollExtent, |
|
|
|
|
|
duration: Duration(seconds: 500), |
|
|
|
|
|
curve: Curves.easeInOut, |
|
|
|
|
|
); |
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
add(StartScrollEvent()); |
|
|
}, |
|
|
}, |
|
|
(error) {}, |
|
|
(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, |
|
|
|
|
|
); |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
} |
|
|
} |