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_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_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/core/widgets/images/my_image.dart'; import 'package:hadi_hoda_flutter/features/download/domain/entities/download_entity.dart'; import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_bloc.dart'; import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_event.dart'; import 'package:hadi_hoda_flutter/features/download/presentation/bloc/download_state.dart'; import 'package:hadi_hoda_flutter/features/download/presentation/ui/widgets/download_loading_widget.dart'; class DownloadPage extends StatelessWidget { const DownloadPage({super.key}); @override Widget build(BuildContext context) { return Scaffold( body: Container( height: context.heightScreen, width: context.widthScreen, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ Color(0XFF00154C), Color(0XFF150532), ], ), image: DecorationImage( image: AssetImage(MyAssets.pattern), scale: 3, repeat: ImageRepeat.repeat, colorFilter: ColorFilter.mode( Colors.white.withValues(alpha: 0.2), BlendMode.srcIn, ), ), ), 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), ], ); } } ), ), ); } Widget _image() { return Stack( children: [ MyImage( image: MyAssets.hadiHoda, ), PositionedDirectional( start: MySpaces.s10, top: MySpaces.s40, child: MyImage( image: MyAssets.globe, ), ), ], ); } Widget _text(BuildContext context) { return PositionedDirectional( bottom: 130, child: Column( spacing: MySpaces.s6, children: [ Text( context.translate.please_wait, style: MYTextStyle.titr0, ), 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: MYTextStyle.matn3, ), ), ], ), ); } Positioned _loading(BuildContext context) { return Positioned( bottom: MySpaces.s40, child: DownloadLoadingWidget( loadingStream: context.read().loadingStream, ), ); } }