diff --git a/lib/features/email_recovery/presentation/email_recovery_bindings.dart b/lib/features/email_recovery/presentation/email_recovery_bindings.dart new file mode 100644 index 000000000..5502bdee3 --- /dev/null +++ b/lib/features/email_recovery/presentation/email_recovery_bindings.dart @@ -0,0 +1,9 @@ +import 'package:get/get.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/email_recovery_controller.dart'; + +class EmailRecoveryBindings extends Bindings { + @override + void dependencies() { + Get.lazyPut(() => EmailRecoveryController()); + } +} \ No newline at end of file diff --git a/lib/features/email_recovery/presentation/email_recovery_controller.dart b/lib/features/email_recovery/presentation/email_recovery_controller.dart new file mode 100644 index 000000000..7593d6d1c --- /dev/null +++ b/lib/features/email_recovery/presentation/email_recovery_controller.dart @@ -0,0 +1,13 @@ +import 'package:core/presentation/utils/keyboard_utils.dart'; +import 'package:flutter/widgets.dart'; +import 'package:tmail_ui_user/features/base/base_controller.dart'; +import 'package:tmail_ui_user/main/routes/route_navigation.dart'; + +class EmailRecoveryController extends BaseController { + EmailRecoveryController(); + + void closeView(BuildContext context) { + KeyboardUtils.hideKeyboard(context); + popBack(); + } +} \ No newline at end of file diff --git a/lib/features/email_recovery/presentation/email_recovery_view.dart b/lib/features/email_recovery/presentation/email_recovery_view.dart new file mode 100644 index 000000000..73c64388e --- /dev/null +++ b/lib/features/email_recovery/presentation/email_recovery_view.dart @@ -0,0 +1,86 @@ +import 'package:core/presentation/views/responsive/responsive_widget.dart'; +import 'package:core/utils/platform_info.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:pointer_interceptor/pointer_interceptor.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/email_recovery_controller.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/styles/email_recovery_view_styles.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/email_recovery_form/email_recovery_form_desktop_builder.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/email_recovery_form/email_recovery_form_mobile_builder.dart'; +import 'package:tmail_ui_user/features/email_recovery/presentation/widgets/email_recovery_form/email_recovery_form_tablet_builder.dart'; + +class EmailRecoveryView extends GetWidget { + @override + final controller = Get.find(); + + EmailRecoveryView({super.key}); + + @override + Widget build(BuildContext context) { + return PointerInterceptor( + child: ResponsiveWidget( + responsiveUtils: controller.responsiveUtils, + mobile: Scaffold( + backgroundColor: PlatformInfo.isWeb ? Colors.black.withAlpha(24) : Colors.black38, + body: GestureDetector( + onTap: () => FocusScope.of(context).unfocus(), + child: SafeArea( + bottom: false, + left: false, + right: false, + child: Container( + decoration: EmailRecoveryViewStyles.backgroundDecorationMobile, + margin: EmailRecoveryViewStyles.backgroundMarginMobile, + child: ClipRRect( + borderRadius: EmailRecoveryViewStyles.clipRRectBorderRadiusMobile, + child: SafeArea( + child: EmailRecoveryFormMobileBuilder(), + ), + ), + ), + ), + ), + ), + tablet: Scaffold( + backgroundColor: Colors.black.withAlpha(24), + body: GestureDetector( + onTap: () => FocusScope.of(context).unfocus(), + child: Align( + alignment: Alignment.bottomCenter, + child: Container( + decoration: EmailRecoveryViewStyles.backgroundDecorationMobile, + width: double.infinity, + height: controller.responsiveUtils.getSizeScreenHeight(context) * 0.7, + child: ClipRRect( + borderRadius: EmailRecoveryViewStyles.clipRRectBorderRadiusMobile, + child: EmailRecoveryFormTabletBuilder(), + ), + ), + ), + ), + ), + desktop: Scaffold( + backgroundColor: Colors.black.withAlpha(24), + body: GestureDetector( + onTap:() => FocusScope.of(context).unfocus(), + child: Center( + child: Card( + color: Colors.transparent, + shape: EmailRecoveryViewStyles.shapeBorderDesktop, + child: Container( + decoration: EmailRecoveryViewStyles.backgroundDecorationDesktop, + width: controller.responsiveUtils.getSizeScreenWidth(context) * 0.38, + height: controller.responsiveUtils.getSizeScreenHeight(context) * 0.6, + child: ClipRRect( + borderRadius: EmailRecoveryViewStyles.clipRRectBorderRadiusDesktop, + child: EmailRecoveryFormDesktopBuilder(), + ), + ), + ), + ), + ), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/features/email_recovery/presentation/styles/email_recovery_view_styles.dart b/lib/features/email_recovery/presentation/styles/email_recovery_view_styles.dart new file mode 100644 index 000000000..32798860c --- /dev/null +++ b/lib/features/email_recovery/presentation/styles/email_recovery_view_styles.dart @@ -0,0 +1,28 @@ +import 'package:core/utils/platform_info.dart'; +import 'package:flutter/material.dart'; + +class EmailRecoveryViewStyles { + static const BoxDecoration backgroundDecorationMobile = BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(16), + topRight: Radius.circular(16), + ), + color: Colors.white, + ); + static const BoxDecoration backgroundDecorationDesktop = BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(16)), + color: Colors.white, + ); + + static const EdgeInsetsGeometry backgroundMarginMobile = EdgeInsets.only(top: PlatformInfo.isWeb ? 70 : 0); + + static const BorderRadiusGeometry clipRRectBorderRadiusMobile = BorderRadius.only( + topLeft: Radius.circular(16), + topRight: Radius.circular(16), + ); + static const BorderRadiusGeometry clipRRectBorderRadiusDesktop = BorderRadius.all(Radius.circular(16)); + + static const ShapeBorder shapeBorderDesktop = RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(16)), + ); +} \ No newline at end of file