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

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