import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:go_router/go_router.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_assets.dart'; import 'package:hadi_hoda_flutter/common_ui/resources/my_spaces.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_localization.dart'; import 'package:hadi_hoda_flutter/core/utils/screen_size.dart'; import 'package:hadi_hoda_flutter/core/utils/set_platform_size.dart'; import 'package:hadi_hoda_flutter/core/widgets/button/my_white_button.dart'; import 'package:hadi_hoda_flutter/core/widgets/button/my_yellow_button.dart'; import 'package:hadi_hoda_flutter/core/widgets/images/my_image.dart'; import 'package:hadi_hoda_flutter/core/widgets/inkwell/my_inkwell.dart'; import 'package:hadi_hoda_flutter/core/widgets/pop_scope/my_pop_scope.dart'; import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; import 'package:hadi_hoda_flutter/features/home/presentation/bloc/home_bloc.dart'; import 'package:hadi_hoda_flutter/features/home/presentation/ui/widgets/payment_dialog.dart'; class HomePage extends StatefulWidget { const HomePage({super.key}); @override State createState() => _HomePageState(); } class _HomePageState extends State { static const double _muteThreshold = 0.001; @override void initState() { super.initState(); WidgetsBinding.instance.addPostFrameCallback((_) { _checkFirstBatch(); }); } void _checkFirstBatch() async { if (!mounted) return; final bloc = context.read(); final lastDownloadLevel = await bloc.getLastDownloadedLevel(); if (lastDownloadLevel < MyConstants.firstDownloadBatchCount && mounted) { context.goNamed( Routes.downloadPage, extra: const DownloadPageConfig( downloadToLevel: MyConstants.firstDownloadBatchCount, redirectTo: Routes.homePage, ), ); } } @override Widget build(BuildContext context) { final lang = LocalStorage.readData(key: MyConstants.selectLanguage) ?? MyConstants.defaultLanguage; late final isArabic = lang == 'ar'; return Scaffold( body: MyPopScope( child: DecoratedBox( decoration: const BoxDecoration( image: DecorationImage( image: AssetImage(MyAssets.backgroundHome), fit: BoxFit.cover, ), ), child: SizedBox.expand( child: Stack( alignment: Alignment.center, children: [ _topBtns(context, isArabic), _image(context), _bottomBtns(context, isArabic), ], ), ), ), ), ); } Widget _music(BuildContext context) { return StreamBuilder( initialData: 1, stream: context.read().volumeStream, builder: (context, snapshot) => MyInkwell( onTap: () => context.read().changeMute(), child: MyImage( image: (snapshot.data ?? 1) <= _muteThreshold ? MyAssets.musicOff : MyAssets.musicOn, size: setSize(context: context, tablet: 100), ), ), ); } Positioned _image(BuildContext context) { return Positioned( top: setSize(context: context, mobile: 0.1.h, tablet: 0.15.h), child: const Stack( children: [ MyImage(image: MyAssets.hadiHoda), PositionedDirectional( start: MySpaces.s10, top: MySpaces.s40, child: MyImage(image: MyAssets.globe), ), ], ), ); } Positioned _topBtns(BuildContext context, bool isArabic) { return Positioned( top: setPlatform(android: MySpaces.s36, iOS: 50), right: 20, left: 20, child: !isArabic ? Align( alignment: AlignmentDirectional.topStart, child: _music(context), ) : Row( children: [ MyInkwell( onTap: () => context.read().showAboutUs(context), child: MyImage( image: MyAssets.theme, size: setSize(context: context, tablet: 100), ), ), const SizedBox(width: 12), MyInkwell( onTap: () => context.read().goToLanguagePage(context), child: MyImage( image: MyAssets.language, size: setSize(context: context, tablet: 100), ), ), const Spacer(), _music(context), ], ), ); } Positioned _bottomBtns(BuildContext context, bool isArabic) { return Positioned( bottom: setPlatform(android: MySpaces.s40, iOS: MySpaces.s0), left: MySpaces.s16, right: MySpaces.s16, child: SafeArea( child: isArabic ? Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Expanded( flex: 4, child: MyYellowButton( onTap: () { context.read().goToLevelPage(context); }, title: context.translate.start, ), ), const SizedBox(width: 20), Expanded( flex: 3, child: MyWhiteButton( title: 'تبرع', onTap: () { showDialog( context: context, builder: (_) => const PaymentDialog(), ); }, bgSvgMobile: MyAssets.button35, ), ), ], ) : Row( crossAxisAlignment: CrossAxisAlignment.end, mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ MyInkwell( onTap: () => context.read().goToLanguagePage(context), child: MyImage( image: MyAssets.language, size: setSize(context: context, tablet: 100), ), ), MyYellowButton( onTap: () { context.read().goToLevelPage(context); }, title: context.translate.start, ), MyInkwell( onTap: () => context.read().showAboutUs(context), child: MyImage( image: MyAssets.theme, size: setSize(context: context, tablet: 100), ), ), ], ), ), ); } }