From 97a1c58f6f8a1e5576014859eb5f70e27e0c1e50 Mon Sep 17 00:00:00 2001 From: 7eltantawy Date: Tue, 17 Dec 2024 22:42:59 +0200 Subject: [PATCH] remove legacy components --- .../lib/src/core/di/dependency_injection.dart | 2 - .../presentation/components/app_bar.dart | 52 ---- .../components/color_swatch_builder.dart | 86 ------ .../presentation/components/image_body.dart | 71 ----- .../components/image_builder.dart | 128 --------- .../components/share_as_image_bottom_bar.dart | 132 --------- .../presentation/components/width_dialog.dart | 53 ---- .../share_as_image/share_as_image_bloc.dart | 265 ------------------ .../share_as_image/share_as_image_event.dart | 103 ------- .../share_as_image/share_as_image_state.dart | 131 --------- 10 files changed, 1023 deletions(-) delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/components/app_bar.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/components/color_swatch_builder.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/components/image_body.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/components/image_builder.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/components/share_as_image_bottom_bar.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/components/width_dialog.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_event.dart delete mode 100644 alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_state.dart diff --git a/alazkar/lib/src/core/di/dependency_injection.dart b/alazkar/lib/src/core/di/dependency_injection.dart index 86b21d3..7a85412 100644 --- a/alazkar/lib/src/core/di/dependency_injection.dart +++ b/alazkar/lib/src/core/di/dependency_injection.dart @@ -9,7 +9,6 @@ import 'package:alazkar/src/features/settings/data/repository/zikr_text_repo.dar import 'package:alazkar/src/features/settings/presentation/controller/cubit/settings_cubit.dart'; import 'package:alazkar/src/features/share_as_image/data/repository/share_image_repo.dart'; import 'package:alazkar/src/features/share_as_image/presentation/controller/cubit/share_image_cubit.dart'; -import 'package:alazkar/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart'; import 'package:alazkar/src/features/theme/domain/repository/theme_storage.dart'; import 'package:alazkar/src/features/theme/presentation/controller/cubit/theme_cubit.dart'; import 'package:alazkar/src/features/ui/data/repository/ui_repo.dart'; @@ -48,7 +47,6 @@ Future initSL() async { sl.registerLazySingleton(() => ZikrSourceFilterCubit(sl())); /// Factory BLoC - sl.registerFactory(() => ShareAsImageBloc(sl())); sl.registerFactory( () => ZikrContentViewerBloc(sl(), sl(), sl()), ); diff --git a/alazkar/lib/src/features/share_as_image/presentation/components/app_bar.dart b/alazkar/lib/src/features/share_as_image/presentation/components/app_bar.dart deleted file mode 100644 index 2b02f0a..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/components/app_bar.dart +++ /dev/null @@ -1,52 +0,0 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first -import 'package:alazkar/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -class ShareAsImageAppBar extends StatelessWidget { - final ShareAsImageLoadedState state; - const ShareAsImageAppBar({ - super.key, - required this.repaintKey, - required this.state, - }); - - final GlobalKey> repaintKey; - - @override - Widget build(BuildContext context) { - return AppBar( - elevation: 0, - title: const Text( - "مشاركة كصورة", - style: TextStyle( - fontWeight: FontWeight.bold, - fontFamily: "Uthmanic", - ), - ), - centerTitle: true, - actions: [ - IconButton( - onPressed: () async { - context.read().add( - ShareAsImageShareEvent( - key: repaintKey, - ), - ); - }, - icon: const Icon(Icons.share), - ), - ], - bottom: PreferredSize( - preferredSize: Size.fromHeight(!state.isLoading ? 0 : 20), - child: !state.isLoading - ? const SizedBox() - : LinearProgressIndicator( - backgroundColor: Theme.of(context).scaffoldBackgroundColor, - color: Colors.brown, - minHeight: 15, - ), - ), - ); - } -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/components/color_swatch_builder.dart b/alazkar/lib/src/features/share_as_image/presentation/components/color_swatch_builder.dart deleted file mode 100644 index 76313df..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/components/color_swatch_builder.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:alazkar/src/core/extension/extension_color.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_colorpicker/flutter_colorpicker.dart'; - -class ColorSwatchBuilder extends StatelessWidget { - final List colorSwatchList; - final Color colorToTrack; - final void Function(Color color) apply; - - const ColorSwatchBuilder({ - super.key, - required this.colorSwatchList, - required this.colorToTrack, - required this.apply, - }); - - @override - Widget build(BuildContext context) { - Color tempColor = colorToTrack; - void changeColor(Color color) { - tempColor = color; - } - - return Row( - children: [ - GestureDetector( - onTap: () { - showDialog( - context: context, - builder: (BuildContext context) { - return Center( - child: SizedBox( - width: 300, - child: SingleChildScrollView( - child: Card( - margin: const EdgeInsets.all(20), - clipBehavior: Clip.hardEdge, - child: Column( - children: [ - ColorPicker( - portraitOnly: true, - displayThumbColor: true, - paletteType: PaletteType.hsvWithSaturation, - colorHistory: colorSwatchList, - labelTypes: const [], - enableAlpha: false, - pickerColor: colorToTrack, - hexInputBar: true, - onColorChanged: changeColor, - onHistoryChanged: (value) {}, - ), - ListTile( - onTap: () { - apply(tempColor); - Navigator.pop(context); - }, - title: const Text( - "اختر اللون", - textAlign: TextAlign.center, - style: TextStyle(fontSize: 20), - ), - ), - ], - ), - ), - ), - ), - ); - }, - ); - }, - child: Card( - color: colorToTrack, - child: Padding( - padding: const EdgeInsets.all(5), - child: Icon( - color: colorToTrack.getContrastColor, - Icons.brush, - ), - ), - ), - ), - ], - ); - } -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/components/image_body.dart b/alazkar/lib/src/features/share_as_image/presentation/components/image_body.dart deleted file mode 100644 index 3e9172e..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/components/image_body.dart +++ /dev/null @@ -1,71 +0,0 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first -import 'package:alazkar/src/features/share_as_image/presentation/components/image_builder.dart'; -import 'package:alazkar/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; - -class ShareAsImageBody extends StatelessWidget { - final ShareAsImageLoadedState state; - const ShareAsImageBody({ - super.key, - required this.interactiveViewerKey, - required this.imageKey, - required this.state, - required this.repaintKey, - }); - - final GlobalKey> interactiveViewerKey; - final GlobalKey> imageKey; - final GlobalKey> repaintKey; - - @override - Widget build(BuildContext context) { - return GestureDetector( - onDoubleTap: () { - final Size screenSize = (interactiveViewerKey.currentContext - ?.findRenderObject() as RenderBox?)! - .size; - final Size imageSize = - (imageKey.currentContext?.findRenderObject() as RenderBox?)!.size; - context.read().add( - ShareAsImageDoubleTapEvent( - screenSize: screenSize, - imageSize: imageSize, - ), - ); - }, - child: Stack( - children: [ - InteractiveViewer( - key: interactiveViewerKey, - constrained: false, - transformationController: state.transformationController, - minScale: 0.25, - maxScale: 4, - boundaryMargin: const EdgeInsets.all(5000), - child: FutureBuilder( - future: state.generateImageBodyContent(), - builder: (context, snapshot) { - if (!snapshot.hasData) { - return const SizedBox(); - } - return RepaintBoundary( - key: repaintKey, - child: ImageBuilder( - key: imageKey, - width: state.width, - content: snapshot.data!, - backgroundColor: state.backgroundColor, - textColor: state.textColor, - fontSize: state.fontSize, - showAppInfo: state.showAppInfo, - ), - ); - }, - ), - ), - ], - ), - ); - } -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/components/image_builder.dart b/alazkar/lib/src/features/share_as_image/presentation/components/image_builder.dart deleted file mode 100644 index 6c9b06e..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/components/image_builder.dart +++ /dev/null @@ -1,128 +0,0 @@ -// ignore_for_file: public_member_api_docs, sort_constructors_first -import 'package:dotted_border/dotted_border.dart'; -import 'package:flutter/material.dart'; - -class ImageBuilder extends StatelessWidget { - final double width; - final double fontSize; - final Widget content; - final Color backgroundColor; - final Color textColor; - final bool showAppInfo; - const ImageBuilder({ - super.key, - required this.width, - required this.backgroundColor, - required this.textColor, - required this.content, - required this.fontSize, - required this.showAppInfo, - }); - - @override - Widget build(BuildContext context) { - return Container( - width: width, - padding: EdgeInsets.zero, - decoration: BoxDecoration( - color: backgroundColor, - borderRadius: BorderRadius.circular(25), - ), - child: ImageSharedBorder( - enbaled: false, - child: ListView( - padding: const EdgeInsets.all(40), - shrinkWrap: true, - physics: const NeverScrollableScrollPhysics(), - children: [ - Center( - child: content, - ), - if (!showAppInfo) - const SizedBox() - else ...[ - // const SizedBox(height: 50), - ImageSharedBorder( - padding: const EdgeInsets.all(10), - margin: const EdgeInsets.only(top: 50), - child: ImageFooter(fontSize: fontSize, textColor: textColor), - ), - ], - ], - ), - ), - ); - } -} - -class ImageSharedBorder extends StatelessWidget { - final Widget? child; - final bool enbaled; - final EdgeInsetsGeometry? padding; - final EdgeInsetsGeometry? margin; - const ImageSharedBorder({ - super.key, - this.child, - this.enbaled = true, - this.padding, - this.margin, - }); - - @override - Widget build(BuildContext context) { - return !enbaled - ? child ?? const SizedBox() - : Container( - margin: margin, - child: DottedBorder( - color: Colors.brown.shade900, - borderType: BorderType.RRect, - radius: const Radius.circular(10), - dashPattern: const [10, 0, 10], - strokeWidth: 5, - child: Container( - padding: padding, - child: child ?? const SizedBox(), - ), - ), - ); - } -} - -class ImageFooter extends StatelessWidget { - const ImageFooter({ - super.key, - required this.fontSize, - required this.textColor, - }); - - final double fontSize; - final Color textColor; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.symmetric(horizontal: 20), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Image.asset( - "assets/icons/app.png", - width: fontSize * 2, - ), - Padding( - padding: const EdgeInsets.only(right: 20), - child: Text( - "بواسطة تطبيق الأذكار النووية", - style: TextStyle( - fontSize: fontSize * (3 / 3), - color: textColor, - fontFamily: "Uthmanic", - ), - ), - ), - ], - ), - ); - } -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/components/share_as_image_bottom_bar.dart b/alazkar/lib/src/features/share_as_image/presentation/components/share_as_image_bottom_bar.dart deleted file mode 100644 index cd5b83f..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/components/share_as_image_bottom_bar.dart +++ /dev/null @@ -1,132 +0,0 @@ -import 'package:alazkar/src/features/share_as_image/presentation/components/color_swatch_builder.dart'; -import 'package:alazkar/src/features/share_as_image/presentation/components/width_dialog.dart'; -import 'package:alazkar/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter_bloc/flutter_bloc.dart'; -import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; - -class ShareAsImageBottomBar extends StatelessWidget { - const ShareAsImageBottomBar({super.key}); - - @override - Widget build(BuildContext context) { - final List colorSwatchList = [ - Colors.brown, - Colors.white, - const Color(0xFFD7CCC8), - const Color(0xFFFFF8EE), - const Color(0xFFF6EBDC), - const Color(0xFFFFEB3B), - ]; - return BlocBuilder( - builder: (context, state) { - if (state is! ShareAsImageLoadedState) { - return const SizedBox(); - } - return BottomAppBar( - child: Center( - child: ListView( - physics: const BouncingScrollPhysics(), - scrollDirection: Axis.horizontal, - shrinkWrap: true, - children: [ - Tooltip( - message: "وضع معلومات التطبيق", - child: Switch( - value: state.showAppInfo, - onChanged: (value) { - context.read().add( - ShareAsImageChangeShowAppInfoEvent( - showAppInfo: value, - ), - ); - }, - ), - ), - Tooltip( - message: "لون الخلفية", - child: ColorSwatchBuilder( - colorToTrack: state.backgroundColor, - colorSwatchList: colorSwatchList, - apply: (color) { - context.read().add( - ShareAsImageChangeBackgroundColorEvent( - backgroundColor: color, - ), - ); - }, - ), - ), - Tooltip( - message: "لون النص", - child: ColorSwatchBuilder( - colorToTrack: state.textColor, - colorSwatchList: colorSwatchList, - apply: (color) { - context.read().add( - ShareAsImageChangeTextColorEvent( - textColor: color, - ), - ); - }, - ), - ), - IconButton( - tooltip: "إعادة ضبط الخط", - icon: Icon(MdiIcons.reload), - onPressed: () { - context - .read() - .add(ShareAsImageResetFontSizeEvent()); - }, - ), - IconButton( - tooltip: "تكبير حجم الخط", - icon: Icon(MdiIcons.formatFontSizeIncrease), - onPressed: () { - context - .read() - .add(ShareAsImageIncreaseFontSizeEvent()); - }, - ), - IconButton( - tooltip: "تصغير حجم الخط", - icon: Icon(MdiIcons.formatFontSizeDecrease), - onPressed: () { - context - .read() - .add(ShareAsImageDecreaseFontSizeEvent()); - }, - ), - IconButton( - tooltip: "ضبط عرض الصورة", - onPressed: () async { - await showDialog( - context: context, - builder: (_) { - return ImageWidthDialog( - initialValue: state.width.toInt().toString(), - onSubmit: (width) async { - final int tempWidth = - int.tryParse(width) ?? state.width.toInt(); - - context.read().add( - ShareAsImageChangeWidthEvent( - width: tempWidth.toDouble(), - ), - ); - }, - ); - }, - ); - }, - icon: Icon(MdiIcons.resize), - ), - ], - ), - ), - ); - }, - ); - } -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/components/width_dialog.dart b/alazkar/lib/src/features/share_as_image/presentation/components/width_dialog.dart deleted file mode 100644 index e8a6bb5..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/components/width_dialog.dart +++ /dev/null @@ -1,53 +0,0 @@ -import 'package:alazkar/src/core/inputs/user_number_field.dart'; -import 'package:flutter/material.dart'; - -class ImageWidthDialog extends StatelessWidget { - final Function(String) onSubmit; - final String initialValue; - - const ImageWidthDialog({ - super.key, - required this.onSubmit, - required this.initialValue, - }); - - @override - Widget build(BuildContext context) { - final TextEditingController widthController = - TextEditingController(text: initialValue); - return AlertDialog( - title: const Text( - "تغيير عرض الصورة", - style: TextStyle( - fontSize: 25, - ), - ), - content: Column( - mainAxisSize: MainAxisSize.min, - children: [ - UserNumberField( - controller: widthController, - hintText: "قم بادخال العرض هنا", - ), - const Text( - "أقل عرض للصورة: 600", - textAlign: TextAlign.center, - ), - ], - ), - actions: [ - TextButton( - child: const Text( - "تم", - textAlign: TextAlign.center, - // style: TextStyle(fontSize: 20, color: QuranTheme.baseColor), - ), - onPressed: () { - onSubmit(widthController.text); - Navigator.pop(context, true); - }, - ), - ], - ); - } -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart b/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart deleted file mode 100644 index e31a384..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_bloc.dart +++ /dev/null @@ -1,265 +0,0 @@ -import 'dart:async'; -import 'dart:io'; -import 'dart:math'; -import 'dart:typed_data'; -import 'dart:ui'; - -import 'package:alazkar/src/core/constants/const.dart'; -import 'package:alazkar/src/core/extension/extension_platform.dart'; -import 'package:alazkar/src/core/models/zikr.dart'; -import 'package:alazkar/src/core/models/zikr_title.dart'; -import 'package:alazkar/src/core/utils/app_print.dart'; -import 'package:alazkar/src/features/share_as_image/data/repository/share_image_repo.dart'; -import 'package:alazkar/src/features/share_as_image/presentation/components/image_builder.dart'; -import 'package:alazkar/src/features/zikr_content_viewer/presentation/components/zikr_content_builder.dart'; -import 'package:bloc/bloc.dart'; -import 'package:equatable/equatable.dart'; -import 'package:file_picker/file_picker.dart'; -import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; -import 'package:get_storage/get_storage.dart'; -import 'package:path_provider/path_provider.dart'; -import 'package:share_plus/share_plus.dart'; - -part 'share_as_image_event.dart'; -part 'share_as_image_state.dart'; - -class ShareAsImageBloc extends Bloc { - final ShareAsImageRepo shareAsImageRepo; - ShareAsImageBloc(this.shareAsImageRepo) : super(ShareAsImageLoadingState()) { - on(_start); - on(_share); - on(_fontSizeChange); - on(_increaseFontSize); - on(_decreaseFontSize); - on(_resetFontSize); - on(_doubleTap); - on(_changeWidth); - on(_changeBackgroundColor); - on(_changeTextColor); - on(_changeShowAppInfo); - } - - FutureOr _start( - ShareAsImageStartEvent event, - Emitter emit, - ) { - emit( - ShareAsImageLoadedState( - zikrTitle: event.zikrTitle, - zikr: event.zikr, - isLoading: false, - showAppInfo: shareAsImageRepo.showAppInfo, - textColor: shareAsImageRepo.textColor, - backgroundColor: shareAsImageRepo.backgroundColor, - fontSize: shareAsImageRepo.fontSize, - width: shareAsImageRepo.imageWidth, - transformationController: TransformationController(), - ), - ); - } - - FutureOr _share( - ShareAsImageShareEvent event, - Emitter emit, - ) async { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - - emit(state.copyWith(isLoading: true)); - try { - final RenderRepaintBoundary boundary = (event.key.currentContext! - .findRenderObject() as RenderRepaintBoundary?)!; - - const double pixelRatio = 3; - final image = await boundary.toImage(pixelRatio: pixelRatio); - - final byteData = await image.toByteData(format: ImageByteFormat.png); - - if (PlatformExtension.isDesktop) { - await _saveDesktop(byteData); - } else { - await _savePhone(byteData); - } - } catch (e) { - appPrint(e.toString()); - } - emit(state.copyWith(isLoading: false)); - } - - Future _saveDesktop(ByteData? byteData) async { - if (byteData == null) return; - - final Uint8List uint8List = byteData.buffer.asUint8List(); - - final String timestamp = DateTime.now().millisecondsSinceEpoch.toString(); - String? outputFile = await FilePicker.platform.saveFile( - dialogTitle: 'Please select an output file:', - fileName: 'SharedImage-$timestamp.png', - ); - - if (outputFile == null) return; - if (!outputFile.endsWith(".png")) { - outputFile += ".png"; - } - - appPrint(outputFile); - - final File file = File(outputFile); - await file.writeAsBytes(uint8List); - } - - Future _savePhone(ByteData? byteData) async { - final tempDir = await getTemporaryDirectory(); - - final File file = await File('${tempDir.path}/SharedImage.png').create(); - await file.writeAsBytes(byteData!.buffer.asUint8List()); - - await Share.shareXFiles([XFile(file.path)]); - - await file.delete(); - } - - /// Font size - FutureOr _fontSizeChange( - ShareAsImageChangeFontSizeEvent event, - Emitter emit, - ) async { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - - final double newFontSize = event.fontSize.clamp(5, 50); - emit(state.copyWith(fontSize: newFontSize)); - await shareAsImageRepo.updateFontSize(newFontSize); - } - - FutureOr _increaseFontSize( - ShareAsImageIncreaseFontSizeEvent event, - Emitter emit, - ) { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - - add(ShareAsImageChangeFontSizeEvent(fontSize: state.fontSize + 1)); - } - - FutureOr _decreaseFontSize( - ShareAsImageDecreaseFontSizeEvent event, - Emitter emit, - ) { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - - add(ShareAsImageChangeFontSizeEvent(fontSize: state.fontSize - 1)); - } - - FutureOr _resetFontSize( - ShareAsImageResetFontSizeEvent event, - Emitter emit, - ) { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - add(const ShareAsImageChangeFontSizeEvent(fontSize: 25)); - } - - /// - FutureOr _doubleTap( - ShareAsImageDoubleTapEvent event, - Emitter emit, - ) { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - - final TransformationController newValue = state.transformationController; - newValue.value = fitImageToScreen(event.imageSize, event.screenSize); - emit(state.copyWith(transformationController: newValue)); - } - - Matrix4 fitImageToScreen(Size imageSize, Size screenSize) { - final screenWidth = screenSize.width; - final screenHeight = screenSize.height; - final childWidth = imageSize.width; - final childHeight = imageSize.height; - - final scaleX = screenWidth / childWidth; - final scaleY = screenHeight / childHeight; - - final scale = min(scaleX, scaleY); - - return Matrix4.diagonal3Values( - scale, - scale, - 1, - ) * - Matrix4.translationValues( - (screenWidth - childWidth * scale) / 2, - (screenHeight - childHeight * scale) / 2, - 0, - ) as Matrix4; - } - - /// - FutureOr _changeWidth( - ShareAsImageChangeWidthEvent event, - Emitter emit, - ) async { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - final double newWidth = event.width.clamp(600, double.infinity); - emit(state.copyWith(width: newWidth)); - await shareAsImageRepo.updateImageWidth(newWidth); - } - - FutureOr _changeBackgroundColor( - ShareAsImageChangeBackgroundColorEvent event, - Emitter emit, - ) async { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - final Color newColor = event.backgroundColor; - emit(state.copyWith(backgroundColor: newColor)); - await shareAsImageRepo.updateBackgroundColor(newColor); - } - - FutureOr _changeTextColor( - ShareAsImageChangeTextColorEvent event, - Emitter emit, - ) async { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - final Color newColor = event.textColor; - emit(state.copyWith(textColor: newColor)); - await shareAsImageRepo.updateTextColor(newColor); - } - - FutureOr _changeShowAppInfo( - ShareAsImageChangeShowAppInfoEvent event, - Emitter emit, - ) async { - final state = this.state; - if (state is! ShareAsImageLoadedState) { - return null; - } - final bool newValue = event.showAppInfo; - emit(state.copyWith(showAppInfo: newValue)); - await shareAsImageRepo.updateShowAppInfo(newValue); - } -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_event.dart b/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_event.dart deleted file mode 100644 index dde7506..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_event.dart +++ /dev/null @@ -1,103 +0,0 @@ -part of 'share_as_image_bloc.dart'; - -abstract class ShareAsImageEvent extends Equatable { - const ShareAsImageEvent(); - - @override - List get props => []; -} - -class ShareAsImageStartEvent extends ShareAsImageEvent { - final Zikr zikr; - final ZikrTitle zikrTitle; - const ShareAsImageStartEvent({required this.zikr, required this.zikrTitle}); - - @override - List get props => [zikr, zikrTitle]; -} - -class ShareAsImageChangeWidthEvent extends ShareAsImageEvent { - final double width; - const ShareAsImageChangeWidthEvent({ - required this.width, - }); - @override - List get props => [ - width, - ]; -} - -class ShareAsImageIncreaseFontSizeEvent extends ShareAsImageEvent {} - -class ShareAsImageDecreaseFontSizeEvent extends ShareAsImageEvent {} - -class ShareAsImageResetFontSizeEvent extends ShareAsImageEvent {} - -class ShareAsImageChangeShowAppInfoEvent extends ShareAsImageEvent { - final bool showAppInfo; - const ShareAsImageChangeShowAppInfoEvent({ - required this.showAppInfo, - }); - @override - List get props => [ - showAppInfo, - ]; -} - -class ShareAsImageChangeFontSizeEvent extends ShareAsImageEvent { - final double fontSize; - const ShareAsImageChangeFontSizeEvent({ - required this.fontSize, - }); - @override - List get props => [ - fontSize, - ]; -} - -class ShareAsImageChangeTextColorEvent extends ShareAsImageEvent { - final Color textColor; - const ShareAsImageChangeTextColorEvent({ - required this.textColor, - }); - @override - List get props => [ - textColor, - ]; -} - -class ShareAsImageChangeBackgroundColorEvent extends ShareAsImageEvent { - final Color backgroundColor; - const ShareAsImageChangeBackgroundColorEvent({ - required this.backgroundColor, - }); - @override - List get props => [ - backgroundColor, - ]; -} - -class ShareAsImageShareEvent extends ShareAsImageEvent { - final GlobalKey key; - const ShareAsImageShareEvent({ - required this.key, - }); - @override - List get props => [ - key, - ]; -} - -class ShareAsImageDoubleTapEvent extends ShareAsImageEvent { - final Size screenSize; - final Size imageSize; - const ShareAsImageDoubleTapEvent({ - required this.screenSize, - required this.imageSize, - }); - @override - List get props => [ - screenSize, - imageSize, - ]; -} diff --git a/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_state.dart b/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_state.dart deleted file mode 100644 index e520944..0000000 --- a/alazkar/lib/src/features/share_as_image/presentation/controller/share_as_image/share_as_image_state.dart +++ /dev/null @@ -1,131 +0,0 @@ -part of 'share_as_image_bloc.dart'; - -abstract class ShareAsImageState extends Equatable { - const ShareAsImageState(); - - @override - List get props => []; -} - -class ShareAsImageLoadingState extends ShareAsImageState {} - -class ShareAsImageLoadedState extends ShareAsImageState { - final ZikrTitle zikrTitle; - final Zikr zikr; - final bool isLoading; - final bool showAppInfo; - final double fontSize; - final double width; - final Color textColor; - final Color backgroundColor; - final TransformationController transformationController; - - /* *************** Variables *************** */ - - ShareAsImageLoadedState({ - required this.zikr, - required this.zikrTitle, - required this.isLoading, - required this.showAppInfo, - required this.fontSize, - required this.width, - required this.textColor, - required this.backgroundColor, - required this.transformationController, - }); - - // ******************************************* // - final box = GetStorage(kGetStorageName); - - Future generateImageBodyContent() async { - return Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - ImageSharedBorder( - padding: const EdgeInsets.all(20), - margin: const EdgeInsets.only(bottom: 50), - child: Center( - child: Text( - zikrTitle.name, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: fontSize * 1.3, - color: textColor, - fontFamily: "Kitab", - ), - ), - ), - ), - ZikrContentBuilder( - zikr: zikr, - enableDiacritics: true, - fontSize: fontSize * 1.5, - color: textColor, - ), - const SizedBox(height: 20), - Text( - "عدد مرات الذكر: ${zikr.count}", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: fontSize, - color: textColor, - fontFamily: "Kitab", - fontStyle: FontStyle.italic, - ), - ), - if (zikr.fadl.isNotEmpty) ...[ - const SizedBox(height: 20), - Text( - zikr.fadl, - textAlign: TextAlign.center, - style: TextStyle( - fontSize: fontSize * 1.3, - color: textColor, - fontFamily: "Kitab", - fontStyle: FontStyle.italic, - height: 2, - ), - ), - ], - ], - ); - } - - ShareAsImageLoadedState copyWith({ - Zikr? zikr, - ZikrTitle? zikrTitle, - bool? isLoading, - bool? showAppInfo, - double? fontSize, - double? width, - Color? textColor, - Color? backgroundColor, - TransformationController? transformationController, - }) { - return ShareAsImageLoadedState( - zikr: zikr ?? this.zikr, - zikrTitle: zikrTitle ?? this.zikrTitle, - isLoading: isLoading ?? this.isLoading, - showAppInfo: showAppInfo ?? this.showAppInfo, - fontSize: fontSize ?? this.fontSize, - width: width ?? this.width, - textColor: textColor ?? this.textColor, - backgroundColor: backgroundColor ?? this.backgroundColor, - transformationController: - transformationController ?? this.transformationController, - ); - } - - @override - List get props => [ - zikr, - zikrTitle, - isLoading, - showAppInfo, - fontSize, - width, - textColor, - backgroundColor, - transformationController, - ]; -}