You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
116 lines
3.8 KiB
116 lines
3.8 KiB
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/routers/my_routes.dart';
|
|
import 'package:hadi_hoda_flutter/core/utils/local_storage.dart';
|
|
import 'package:hadi_hoda_flutter/core/utils/my_context.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_event.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_state.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_1_screen.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_2_screen.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_3_screen.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_4_screen.dart';
|
|
import 'package:hadi_hoda_flutter/features/intro/presentation/ui/screens/intro_5_screen.dart';
|
|
import 'package:pod_player/pod_player.dart';
|
|
|
|
class IntroBloc extends Bloc<IntroEvent, IntroState> {
|
|
/// ------------constructor------------
|
|
IntroBloc() : super(const IntroState()) {
|
|
initVideos();
|
|
on<InitVideosEvent>(_initVideosEvent);
|
|
on<ChangeVideosEvent>(_changeVideosEvent);
|
|
}
|
|
|
|
@override
|
|
Future<void> close() {
|
|
podController1.dispose();
|
|
podController2.dispose();
|
|
podController3.dispose();
|
|
podController4.dispose();
|
|
podController5.dispose();
|
|
return super.close();
|
|
}
|
|
|
|
/// ------------UseCases------------
|
|
|
|
/// ------------Variables------------
|
|
final List<Widget> intros = [
|
|
Intro1Screen(key: Key('0')),
|
|
Intro2Screen(key: Key('1')),
|
|
Intro3Screen(key: Key('2')),
|
|
Intro4Screen(key: Key('3')),
|
|
Intro5Screen(key: Key('4')),
|
|
];
|
|
|
|
/// ------------Controllers------------
|
|
final PodPlayerController podController1 = PodPlayerController(
|
|
playVideoFrom: PlayVideoFrom.asset('assets/videos/intro_1.mp4'),
|
|
);
|
|
final PodPlayerController podController2 = PodPlayerController(
|
|
playVideoFrom: PlayVideoFrom.asset('assets/videos/intro_2.mp4'),
|
|
);
|
|
final PodPlayerController podController3 = PodPlayerController(
|
|
playVideoFrom: PlayVideoFrom.asset('assets/videos/intro_3.mp4'),
|
|
);
|
|
final PodPlayerController podController4 = PodPlayerController(
|
|
playVideoFrom: PlayVideoFrom.asset('assets/videos/intro_4.mp4'),
|
|
);
|
|
final PodPlayerController podController5 = PodPlayerController(
|
|
playVideoFrom: PlayVideoFrom.asset('assets/videos/intro_5.mp4'),
|
|
);
|
|
|
|
/// ------------Functions------------
|
|
Future<void> goToHomePage() async {
|
|
await LocalStorage.saveData(key: MyConstants.firstIntro, value: 'true');
|
|
if (MyContext.get.mounted) {
|
|
MyContext.get.goNamed(Routes.homePage);
|
|
}
|
|
}
|
|
|
|
/// ------------Api Calls------------
|
|
FutureOr<void> _changeVideosEvent(ChangeVideosEvent event, Emitter emit) async {
|
|
switch (state.currentIntro) {
|
|
case 0:
|
|
podController2.play();
|
|
emit(state.copyWith(currentIntro: 1));
|
|
break;
|
|
case 1:
|
|
podController3.play();
|
|
emit(state.copyWith(currentIntro: 2));
|
|
break;
|
|
case 2:
|
|
podController4.play();
|
|
emit(state.copyWith(currentIntro: 3));
|
|
break;
|
|
case 3:
|
|
podController5.play();
|
|
emit(state.copyWith(currentIntro: 4));
|
|
break;
|
|
case 4:
|
|
goToHomePage();
|
|
break;
|
|
}
|
|
}
|
|
|
|
Future<void> initVideos() async {
|
|
await Future.wait([
|
|
podController1.initialise(),
|
|
podController2.initialise(),
|
|
podController3.initialise(),
|
|
podController4.initialise(),
|
|
podController5.initialise(),
|
|
]);
|
|
podController1.play();
|
|
add(InitVideosEvent());
|
|
}
|
|
|
|
FutureOr<void> _initVideosEvent(
|
|
InitVideosEvent event,
|
|
Emitter<IntroState> emit,
|
|
) async {
|
|
emit(state.copyWith(currentIntro: 0));
|
|
}
|
|
}
|