TF-2101 Add email_recovery dialog

(cherry picked from commit a62d5c7e2c4558ef932b2bae753652a4554bd5a4)
This commit is contained in:
hieubt
2023-12-20 23:49:11 +07:00
committed by Dat H. Pham
parent f52467785b
commit 25cc14a188
4 changed files with 136 additions and 0 deletions
@@ -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());
}
}
@@ -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();
}
}
@@ -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<EmailRecoveryController> {
@override
final controller = Get.find<EmailRecoveryController>();
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(),
),
),
),
),
),
),
),
);
}
}
@@ -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)),
);
}