diff --git a/lib/common_ui/resources/my_assets.dart b/lib/common_ui/resources/my_assets.dart index 23d84bb..9b046a6 100644 --- a/lib/common_ui/resources/my_assets.dart +++ b/lib/common_ui/resources/my_assets.dart @@ -3,9 +3,28 @@ class MyAssets { const MyAssets._internal(); factory MyAssets() => _i; + /// PNG, JPG static const String backgroundHome = 'assets/images/background_intro.png'; - static const String closeBtn = 'assets/images/close_btn.svg'; static const String hadiHoda = 'assets/images/hadi_hoda.png'; + static const String khadijeLogo = 'assets/images/khadije_logo.png'; + static const String pattern = 'assets/images/pattern.png'; + static const String persons = 'assets/images/persons.png'; + static const String diamond = 'assets/images/diamond.png'; + static const String mapBackground = 'assets/images/map_background.png'; + static const String level = 'assets/images/level.png'; + static const String finishedLevel = 'assets/images/finished_level.png'; + static const String currentLevel = 'assets/images/current_level.png'; + static const String homeButton = 'assets/images/home_button.png'; + static const String error = 'assets/images/error.png'; + static const String leaf = 'assets/images/leaf.png'; + static const String happyPersons = 'assets/images/happy_persons.png'; + static const String diamondBig = 'assets/images/diamond_big.png'; + static const String ship = 'assets/images/ship.png'; + static const String shiny = 'assets/images/shiny.png'; + static const String loading = 'assets/images/loading.png'; + + /// SVG + static const String closeBtn = 'assets/images/close_btn.svg'; static const String musicOff = 'assets/images/music_off.svg'; static const String musicOn = 'assets/images/music_on.svg'; static const String button = 'assets/images/button.svg'; @@ -18,32 +37,39 @@ class MyAssets { static const String instagram = 'assets/images/instagram.svg'; static const String language = 'assets/images/language.svg'; static const String newHorizon = 'assets/images/new_horizon.svg'; - static const String khadijeLogo = 'assets/images/khadije_logo.png'; static const String home = 'assets/images/home.svg'; static const String music = 'assets/images/music.svg'; - static const String pattern = 'assets/images/pattern.png'; - static const String persons = 'assets/images/persons.png'; static const String bubbleChatLeft = 'assets/images/bubble_chat_left.svg'; static const String bubbleChatRight = 'assets/images/bubble_chat_right.svg'; - static const String diamond = 'assets/images/diamond.png'; static const String done = 'assets/images/done.svg'; static const String correct = 'assets/images/correct.svg'; static const String wrong = 'assets/images/wrong.svg'; static const String handPoint = 'assets/images/hand_point.svg'; - static const String mapBackground = 'assets/images/map_background.png'; - static const String level = 'assets/images/level.png'; - static const String finishedLevel = 'assets/images/finished_level.png'; - static const String currentLevel = 'assets/images/current_level.png'; static const String location = 'assets/images/location.svg'; static const String play = 'assets/images/play.svg'; - static const String homeButton = 'assets/images/home_button.png'; static const String doneRounded = 'assets/images/done_rounded.svg'; static const String lang = 'assets/images/lang.svg'; - static const String error = 'assets/images/error.png'; - static const String leaf = 'assets/images/leaf.png'; - static const String happyPersons = 'assets/images/happy_persons.png'; - static const String diamondBig = 'assets/images/diamond_big.png'; - static const String ship = 'assets/images/ship.png'; - static const String shiny = 'assets/images/shiny.png'; static const String unMusic = 'assets/images/unmusic.svg'; + + + static final List images = [ + backgroundHome, + hadiHoda, + khadijeLogo, + pattern, + persons, + diamond, + mapBackground, + level, + finishedLevel, + currentLevel, + homeButton, + error, + leaf, + happyPersons, + diamondBig, + ship, + shiny, + loading, + ]; } \ No newline at end of file diff --git a/lib/features/intro/presentation/bloc/intro_bloc.dart b/lib/features/intro/presentation/bloc/intro_bloc.dart index 0bc25e2..2de2b84 100644 --- a/lib/features/intro/presentation/bloc/intro_bloc.dart +++ b/lib/features/intro/presentation/bloc/intro_bloc.dart @@ -1,64 +1,39 @@ -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/no_params.dart'; +import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.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/context_provider.dart'; -import 'package:hadi_hoda_flutter/core/utils/local_storage.dart'; -import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; -import 'package:hadi_hoda_flutter/features/intro/domain/usecases/get_images_usecase.dart'; -import 'package:hadi_hoda_flutter/features/intro/domain/usecases/loading_stream_usecase.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'; class IntroBloc extends Bloc { /// ------------constructor------------ - IntroBloc( - this._getImagesUseCase, - this._loadingStreamUseCase, - ) - : super(const IntroState()) { - on(_getImagesEvent); - loadingStream = _loadingStreamUseCase(); - } + IntroBloc() : super(const IntroState()); /// ------------UseCases------------ - final GetImagesUseCase _getImagesUseCase; - final LoadingStreamUseCase _loadingStreamUseCase; /// ------------Variables------------ - Stream loadingStream = Stream.empty(); /// ------------Controllers------------ /// ------------Functions------------ + Future _precacheAllImages(BuildContext context) async { + await Future.wait( + MyAssets.images.map( + (assetPath) => precacheImage(AssetImage(assetPath), context), + ), + ); + } - /// ------------Api Calls------------ - FutureOr _getImagesEvent( - GetImagesEvent event, - Emitter emit, - ) async { - emit(state.copyWith(getFilesStatus: BaseInit())); - await _getImagesUseCase(NoParams()).then((value) { - value.fold( - (data) async { - if(LocalStorage.readData(key: MyConstants.firstLanguagePage) != 'true'){ - ContextProvider.context.goNamed(Routes.languagePage); - } else { - await Future.delayed(Duration(milliseconds: 500), () { - if (ContextProvider.context.mounted) { - ContextProvider.context.goNamed(Routes.homePage); - } - }); - } - }, - (error) async { - emit(state.copyWith(getFilesStatus: BaseError(error.errorMessage))); - }, - ); - }); + Future goToHomePage(BuildContext context) async { + if (context.mounted) { + await _precacheAllImages(context); + } + + if (context.mounted) { + context.goNamed(Routes.homePage); + } } + + /// ------------Api Calls------------ } diff --git a/lib/features/intro/presentation/ui/intro_page.dart b/lib/features/intro/presentation/ui/intro_page.dart index 8d0d38b..3bed0a4 100644 --- a/lib/features/intro/presentation/ui/intro_page.dart +++ b/lib/features/intro/presentation/ui/intro_page.dart @@ -1,20 +1,11 @@ import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; -import 'package:hadi_hoda_flutter/common_ui/resources/my_colors.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.dart'; -import 'package:hadi_hoda_flutter/common_ui/resources/my_text_style.dart'; -import 'package:hadi_hoda_flutter/core/status/base_status.dart'; -import 'package:hadi_hoda_flutter/core/utils/convert_size.dart'; import 'package:hadi_hoda_flutter/core/utils/my_image.dart'; -import 'package:hadi_hoda_flutter/core/utils/my_localization.dart'; import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; -import 'package:hadi_hoda_flutter/core/widgets/error/error_state.dart'; -import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; +import 'package:hadi_hoda_flutter/core/widgets/animations/rotation_anim.dart'; import 'package:hadi_hoda_flutter/features/intro/presentation/bloc/intro_bloc.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/widgets/intro_loading_widget.dart'; class IntroPage extends StatefulWidget { const IntroPage({super.key}); @@ -27,9 +18,12 @@ class _IntroPageState extends State { @override void initState() { super.initState(); - context.read().add(GetImagesEvent()); + WidgetsBinding.instance.addPostFrameCallback((_) { + context.read().goToHomePage(context); + }); } + @override Widget build(BuildContext context) { return Scaffold( @@ -55,31 +49,12 @@ class _IntroPageState extends State { ), ), ), - child: BlocBuilder( - buildWhen: (previous, current) => - previous.getFilesStatus != current.getFilesStatus, - builder: (context, state) { - if (state.getFilesStatus is BaseError) { - return Padding( - padding: EdgeInsets.symmetric( - vertical: MediaQuery.viewPaddingOf(context).bottom + MySpaces.s16, - horizontal: 60, - ), - child: ErrorState( - onTap: () => context.read().add(GetImagesEvent()), - ), - ); - } else { - return Stack( - alignment: Alignment.center, - children: [ - _image(), - _text(context), - _loading(context), - ], - ); - } - } + child: Stack( + alignment: Alignment.center, + children: [ + _image(), + _loading(context), + ], ), ), ); @@ -92,39 +67,16 @@ class _IntroPageState extends State { ); } - Widget _text(BuildContext context) { - return PositionedDirectional( - bottom: 130, - child: Column( - spacing: MySpaces.s6, - children: [ - Text( - context.translate.please_wait, - style: Marhey.medium22.copyWith( - color: MyColors.white, - ), - ), - StreamBuilder( - initialData: DownloadEntity(), - stream: context.read().loadingStream, - builder: (context, snapshot) => Text( - '${context.translate.downloading_data} (${snapshot.data?.count.toMB ?? 0.0}mb / ${snapshot.data?.total.toMB ?? 0.0}mb)', - style: Marhey.medium12.copyWith( - color: MyColors.white, - ), - ), - ), - ], - ), - ); - } Positioned _loading(BuildContext context) { return Positioned( bottom: MediaQuery.viewPaddingOf(context).bottom + MySpaces.s16, - child: IntroLoadingWidget( - loadingStream: context.read().loadingStream, - ), + child: RotationAnim( + child: MyImage( + image: MyAssets.loading, + size: 70, + ), + ) ); } }