From f0a80f7a2543aa55a014f3ee23a12242c2091586 Mon Sep 17 00:00:00 2001 From: Aamir Muhammad Date: Wed, 16 Jul 2025 16:32:21 +0300 Subject: [PATCH] ui fixes --- assets/images/svg/arrow-back.svg | 4 + .../otp/otp_validation_bootmsheet_widget.dart | 121 +++-- .../health_calculator/carbs/carbs.dart | 393 ++++++++++++-- lib/pages/login/register_new.dart | 495 +++++++++--------- lib/pages/login/register_new_step_2.dart | 6 +- lib/pages/login/welcome.dart | 303 ++++++----- lib/uitl/utils.dart | 8 + lib/widgets/others/app_scaffold_widget.dart | 43 -- 8 files changed, 843 insertions(+), 530 deletions(-) create mode 100644 assets/images/svg/arrow-back.svg diff --git a/assets/images/svg/arrow-back.svg b/assets/images/svg/arrow-back.svg new file mode 100644 index 00000000..69297e54 --- /dev/null +++ b/assets/images/svg/arrow-back.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart b/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart index a263b51c..0f7efb46 100644 --- a/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart +++ b/lib/new_ui/otp/otp_validation_bootmsheet_widget.dart @@ -29,63 +29,71 @@ class _GenericBottomSheetState extends State { @override Widget build(BuildContext context) { - return Container( - padding: const EdgeInsets.all(24), - decoration: BoxDecoration( - color: Color(0xFFF8F8FA), - borderRadius: const BorderRadius.vertical(top: Radius.circular(16)), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - // Title - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + return SafeArea( + child: GestureDetector( + onTap: () { + FocusScope.of(context).unfocus(); // Dismiss the keyboard when tapping outside + }, + child: Container( + padding: const EdgeInsets.all(24), + decoration: BoxDecoration( + color: Color(0xFFF8F8FA), + borderRadius: const BorderRadius.vertical(top: Radius.circular(16)), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ - AppText(widget.isForEmail ? "Enter Email Address" : "Enter Phone Number", - fontSize: 28, letterSpacing: -2, fontFamily: context.fontFamily, color: Color(0xFF2E3039), fontWeight: FontWeight.w600), - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: SvgPicture.asset("assets/images/svg/cross-circle.svg", width: 24, height: 24)), + // Title + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + AppText(widget.isForEmail ? "Enter Email Address" : "Enter Phone Number", + fontSize: 28, letterSpacing: -2, fontFamily: context.fontFamily, color: Color(0xFF2E3039), fontWeight: FontWeight.w600), + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: SvgPicture.asset("assets/images/svg/cross-circle.svg", width: 24, height: 24)), + ], + ), + const SizedBox(height: 10), + // Subtitle + AppText(widget.isForEmail ? "Enter your email address to complete the process of creating a medical file" : "Enter your phone number to receive OTP verification code", + fontSize: 16, fontFamily: context.fontFamily, color: Color(0xFF2E3039), fontWeight: FontWeight.w500), + const SizedBox(height: 10), + widget.textController != null + ? Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Directionality( + textDirection: TextDirection.ltr, + child: newInputWidget( + widget.isForEmail ? TranslationBase.of(context).email : TranslationBase.of(context).phoneNumber, + widget.isForEmail ? "demo@gmail.com" : "5xxxxxxxx", + widget.textController!, + padding: EdgeInsets.only(top: 8, bottom: 8, left: 8, right: 8), + keyboardType: widget.isForEmail ? TextInputType.emailAddress : TextInputType.number, + onChange: (value) { + widget.textController!.text = value!; + }, + isEnable: true, + prefix: widget.isForEmail ? null : widget.countryCode, + hasSelection: false, + isBorderAllowed: false, + isAllowLeadingIcon: true, + leadingIcon: widget.isForEmail ? "assets/images/svg/email.svg" : "assets/images/svg/smart-phone.svg", + ), + ), + ], + ) + : SizedBox(), + SizedBox(height: 24), + ...widget.buttons, ], ), - const SizedBox(height: 10), - // Subtitle - AppText(widget.isForEmail ? "Enter your email address to complete the process of creating a medical file" : "Enter your phone number to receive OTP verification code", - fontSize: 16, fontFamily: context.fontFamily, color: Color(0xFF2E3039), fontWeight: FontWeight.w500), - const SizedBox(height: 10), - widget.textController != null - ? Column( - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Directionality( - textDirection: TextDirection.ltr, - child: inputWidget( - widget.isForEmail ? TranslationBase.of(context).email : TranslationBase.of(context).phoneNumber, - widget.isForEmail ? "demo@gmail.com" : "5xxxxxxxx", - widget.textController!, - keyboardType: widget.isForEmail ? TextInputType.emailAddress : TextInputType.number, - onChange: (value) { - widget.textController!.text = value!; - }, - isEnable: true, - prefix: widget.isForEmail ? null : widget.countryCode, - hasSelection: false, - isBorderAllowed: false, - isAllowLeadingIcon: true, - leadingIcon: widget.isForEmail ? "assets/images/svg/email.svg" : "assets/images/svg/smart-phone.svg", - ), - ), - ], - ) - : SizedBox(), - SizedBox(height: 24), - ...widget.buttons, - ], + ), ), ); } @@ -110,8 +118,8 @@ class CustomButton extends StatelessWidget { Key? key, required this.text, required this.onPressed, - this.backgroundColor = Colors.red, - this.borderColor = Colors.red, + this.backgroundColor = const Color(0xFFED1C2B), + this.borderColor = const Color(0xFFED1C2B), this.textColor = Colors.white, this.borderRadius = 12, this.borderWidth = 1, @@ -129,6 +137,7 @@ class CustomButton extends StatelessWidget { onTap: isDisabled ? null : onPressed, child: Container( padding: padding, + height: 56, decoration: BoxDecoration( color: isDisabled ? backgroundColor.withOpacity(0.5) : backgroundColor, borderRadius: BorderRadius.circular(borderRadius), diff --git a/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart b/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart index cf8961e4..c43031c4 100644 --- a/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart +++ b/lib/pages/AlHabibMedicalService/health_calculator/carbs/carbs.dart @@ -41,27 +41,37 @@ class _CarbsState extends State { double? fCalMeal; void calculateDietRatios() { - if (dropdownValue == TranslationBase.of(context).dietVeryLow) { + if (dropdownValue == TranslationBase + .of(context) + .dietVeryLow) { meals = 3; protein = 45; carbs = 10; fat = 45; - } else if (dropdownValue == TranslationBase.of(context).dietLow) { + } else if (dropdownValue == TranslationBase + .of(context) + .dietLow) { meals = 3; protein = 40; carbs = 30; fat = 30; - } else if (dropdownValue == TranslationBase.of(context).dietModerate) { + } else if (dropdownValue == TranslationBase + .of(context) + .dietModerate) { meals = 3; protein = 25; carbs = 50; fat = 25; - } else if (dropdownValue == TranslationBase.of(context).dietUSDA) { + } else if (dropdownValue == TranslationBase + .of(context) + .dietUSDA) { meals = 3; protein = 15; carbs = 55; fat = 30; - } else if (dropdownValue == TranslationBase.of(context).dietZone) { + } else if (dropdownValue == TranslationBase + .of(context) + .dietZone) { meals = 3; protein = 30; carbs = 40; @@ -87,13 +97,17 @@ class _CarbsState extends State { Widget build(BuildContext context) { ProjectViewModel projectViewModel = Provider.of(context); - dropdownValue = TranslationBase.of(context).dietVeryLow; + dropdownValue = TranslationBase + .of(context) + .dietVeryLow; return AppScaffold( isShowAppBar: true, isShowDecPage: false, showNewAppBarTitle: true, showNewAppBar: true, - appBarTitle: TranslationBase.of(context).carbohydrate, + appBarTitle: TranslationBase + .of(context) + .carbohydrate, appBarIcons: [ Padding( padding: const EdgeInsets.symmetric(horizontal: 10.0, vertical: 7.0), @@ -113,7 +127,9 @@ class _CarbsState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - TranslationBase.of(context).carbProteinDesc, + TranslationBase + .of(context) + .carbProteinDesc, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, @@ -128,7 +144,9 @@ class _CarbsState extends State { mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ - inputWidget(TranslationBase.of(context).calDay, "0", textController), + inputWidget(TranslationBase + .of(context) + .calDay, "0", textController), InkWell( onTap: () { Navigator.push( @@ -139,8 +157,14 @@ class _CarbsState extends State { child: Padding( padding: const EdgeInsets.all(12.0), child: Text( - TranslationBase.of(context).notSure, - style: TextStyle(fontSize: 12, fontWeight: FontWeight.w600, letterSpacing: -0.56, color: CustomColors.accentColor, decoration: TextDecoration.underline), + TranslationBase + .of(context) + .notSure, + style: TextStyle(fontSize: 12, + fontWeight: FontWeight.w600, + letterSpacing: -0.56, + color: CustomColors.accentColor, + decoration: TextDecoration.underline), ), ), ) @@ -165,7 +189,9 @@ class _CarbsState extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - TranslationBase.of(context).selectDiet, + TranslationBase + .of(context) + .selectDiet, style: TextStyle( fontSize: 11, letterSpacing: -0.44, @@ -194,11 +220,21 @@ class _CarbsState extends State { }); }, items: [ - TranslationBase.of(context).dietVeryLow, - TranslationBase.of(context).dietLow, - TranslationBase.of(context).dietModerate, - TranslationBase.of(context).dietUSDA, - TranslationBase.of(context).dietZone + TranslationBase + .of(context) + .dietVeryLow, + TranslationBase + .of(context) + .dietLow, + TranslationBase + .of(context) + .dietModerate, + TranslationBase + .of(context) + .dietUSDA, + TranslationBase + .of(context) + .dietZone ].map>((String value) { return DropdownMenuItem( value: value, @@ -232,7 +268,9 @@ class _CarbsState extends State { margin: EdgeInsets.symmetric(horizontal: 16.0, vertical: 16.0), color: Colors.white, child: SecondaryButton( - label: TranslationBase.of(context).calculate, + label: TranslationBase + .of(context) + .calculate, color: CustomColors.accentColor, onTap: () { setState(() { @@ -242,16 +280,16 @@ class _CarbsState extends State { context, FadePage( page: CarbsResult( - cCal: cCal!, - pCal: pCal!, - fCal: fCal!, - pCalGram: pCalGram!, - pCalMeal: pCalMeal!, - fCalGram: fCalGram!, - fCalMeal: fCalMeal!, - cCalGram: cCalGram!, - cCalMeal: cCalMeal!, - )), + cCal: cCal!, + pCal: pCal!, + fCal: fCal!, + pCalGram: pCalGram!, + pCalMeal: pCalMeal!, + fCalGram: fCalGram!, + fCalMeal: fCalMeal!, + cCalGram: cCalGram!, + cCalMeal: cCalMeal!, + )), ); } }); @@ -307,30 +345,29 @@ class _CarbsState extends State { // } } -Widget inputWidget( - String _labelText, - String _hintText, - TextEditingController? _controller, { - Function(String?)? onChange, - String? prefix, - bool isEnable = true, - bool hasSelection = false, - bool hasSelectionCustomIcon = false, - String? selectionCustomIcon, - bool isBorderAllowed = true, - bool isAllowLeadingIcon = false, - bool isLeadingCountry = false, - String? leadingIcon, - bool removePadding = false, - bool isAllowRadius = true, - bool isReadOnly = false, - TextInputType keyboardType = TextInputType.number, - List? dropdownItems, - String? selectedValue, - SelectionType? selectionType, - Function(bool)? onCalendarTypeChanged, - String lang = 'en', -}) { +Widget inputWidget(String _labelText, + String _hintText, + TextEditingController? _controller, { + Function(String?)? onChange, + String? prefix, + bool isEnable = true, + bool hasSelection = false, + bool hasSelectionCustomIcon = false, + String? selectionCustomIcon, + bool isBorderAllowed = true, + bool isAllowLeadingIcon = false, + bool isLeadingCountry = false, + String? leadingIcon, + bool removePadding = false, + bool isAllowRadius = true, + bool isReadOnly = false, + TextInputType keyboardType = TextInputType.number, + List? dropdownItems, + String? selectedValue, + SelectionType? selectionType, + Function(bool)? onCalendarTypeChanged, + String lang = 'en', + }) { return Builder( builder: (context) { final isRtl = Directionality.of(context) == TextDirection.rtl; @@ -542,8 +579,258 @@ Widget inputWidget( ); } +Widget newInputWidget(String _labelText, + String _hintText, + TextEditingController? _controller, { + Function(String?)? onChange, + String? prefix, + bool isEnable = true, + bool hasSelection = false, + bool hasSelectionCustomIcon = false, + String? selectionCustomIcon, + bool isBorderAllowed = true, + bool isAllowLeadingIcon = false, + bool isLeadingCountry = false, + String? leadingIcon, + bool removePadding = false, + bool isAllowRadius = true, + bool isReadOnly = false, + TextInputType keyboardType = TextInputType.number, + List? dropdownItems, + String? selectedValue, + SelectionType? selectionType, + Function(bool)? onCalendarTypeChanged, + EdgeInsetsGeometry? padding, + String lang = 'en', + }) { + return Builder( + builder: (context) { + final isRtl = Directionality.of(context) == TextDirection.rtl; + return Directionality( + textDirection: Directionality.of(context), + child: Container( + padding: padding, + // padding: removePadding && isAllowLeadingIcon && prefix == null + // ? const EdgeInsets.only(top: 8, bottom: 8, left: 8, right: 8) + // : removePadding && !hasSelection + // ? const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0) + // : removePadding && hasSelection + // ? null + // : const EdgeInsets.symmetric(horizontal: 16, vertical: 15), + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: isAllowRadius ? BorderRadius.circular(15) : null, + color: Colors.white, + border: isBorderAllowed ? Border.all(color: const Color(0xffefefef), width: 1) : null, + ), + child: Row( + textDirection: Directionality.of(context), + children: [ + if (isAllowLeadingIcon && leadingIcon != null) + Directionality( + textDirection: Directionality.of(context), + child: Container( + height: 40, + width: 40, + margin: isRtl ? const EdgeInsets.only(left: 10) : const EdgeInsets.only(right: 10), + padding: isLeadingCountry ? null : const EdgeInsets.all(8), + decoration: const BoxDecoration( + color: Color(0xFFEFEFF0), + borderRadius: BorderRadius.all(Radius.circular(10)), + ), + child: SvgPicture.asset( + leadingIcon, + width: 24, + height: 24, + fit: BoxFit.cover, + ), + ), + ), + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: isRtl ? CrossAxisAlignment.end : CrossAxisAlignment.start, + children: [ + Directionality( + textDirection: Directionality.of(context), + child: Text( + _labelText, + // textAlign: isRtl ? TextAlign.right : TextAlign.left, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: const Color(0xff898A8D), + fontFamily: context.fontFamily, + letterSpacing: -0.2, + height: 18 / 12, + ), + ), + ), + hasSelection + ? GestureDetector( + onTap: isEnable && !isReadOnly + ? () async { + if (selectionType == SelectionType.dropdown) { + final renderBox = context.findRenderObject() as RenderBox; + final offset = renderBox.localToGlobal(Offset.zero); + final selected = await showMenu( + context: context, + position: RelativeRect.fromLTRB( + offset.dx, + offset.dy + renderBox.size.height, + offset.dx + renderBox.size.width, + 0, + ), + items: dropdownItems + ?.map( + (e) => + PopupMenuItem( + value: e, + child: Text(e), + ), + ) + .toList() ?? + [], + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(12), + ), + ); + + if (selected != null && onChange != null) { + onChange(selected); + } + } else if (selectionType == SelectionType.calendar) { + bool isGregorian = true; + // final picked = await showDatePicker(context: context, initialDate: DateTime.now(), firstDate: DateTime(1900), lastDate: DateTime(2100)); + final picked = await showHijriGregBottomSheet( + context, + switcherIcon: SvgPicture.asset("assets/images/svg/language.svg", width: 24), + fontFamily: context.fontFamily, + language: lang, + initialDate: DateTime.now(), + okWidget: Padding( + padding: const EdgeInsets.only(right: 8.0), + child: SvgPicture.asset( + "assets/images/svg/confirm.svg", + width: 24, + height: 24, + ), + ), + cancelWidget: Padding( + padding: const EdgeInsets.only(right: 8.0), + child: SvgPicture.asset( + "assets/images/svg/cancel.svg", + colorFilter: ColorFilter.mode( + Colors.white, + BlendMode.srcIn, + ), + width: 24, + height: 24, + ), + ), + onCalendarTypeChanged: (bool value) { + isGregorian = value; + }, + ); + if (picked != null && onChange != null) { + print(picked.toIso8601String()); + if (onCalendarTypeChanged != null) { + print(isGregorian.toString()); + onCalendarTypeChanged.call(isGregorian); + } + onChange(picked.toIso8601String()); + } + } + } + : null, + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Text( + (selectedValue == null || selectedValue.isEmpty) ? _hintText : selectedValue, + textAlign: isRtl ? TextAlign.right : TextAlign.left, + textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontWeight: FontWeight.w500, + fontFamily: context.fontFamily, + color: (selectedValue != null && selectedValue.isNotEmpty) ? const Color(0xff2E3039) : const Color(0xffB0B0B0), + letterSpacing: -0.2, + ), + ), + ), + if (hasSelectionCustomIcon && selectionCustomIcon != null) + SvgPicture.asset(selectionCustomIcon, width: 24, height: 24) + else + const Icon(Icons.keyboard_arrow_down_outlined), + ], + ), + ) + : TextField( + enabled: isEnable, + scrollPadding: EdgeInsets.zero, + keyboardType: keyboardType, + controller: _controller, + readOnly: isReadOnly, + textAlignVertical: TextAlignVertical.top, + textAlign: isRtl ? TextAlign.right : TextAlign.left, + textDirection: isRtl ? TextDirection.rtl : TextDirection.ltr, + onChanged: onChange, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontFamily: context.fontFamily, + fontWeight: FontWeight.w500, + color: const Color(0xff2E3039), + letterSpacing: -0.2, + ), + decoration: InputDecoration( + isDense: true, + hintText: _hintText, + hintStyle: TextStyle( + fontSize: 14, + height: 21 / 16, + fontFamily: context.fontFamily, + fontWeight: FontWeight.w500, + color: const Color(0xff898A8D), + letterSpacing: -0.2, + ), + prefixIconConstraints: const BoxConstraints(minWidth: 45), + prefixIcon: prefix == null + ? null + : Text( + "+" + prefix, + style: TextStyle( + fontSize: 14, + height: 21 / 14, + fontFamily: context.fontFamily, + fontWeight: FontWeight.w500, + color: const Color(0xff2E303A), + letterSpacing: -0.2, + ), + ), + contentPadding: EdgeInsets.zero, + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + ), + ), + ], + ), + ), + ], + ), + ), + ); + }, + ); +} + extension BorderedContainer on Widget { - Widget get withBorderedContainer => Container( + Widget get withBorderedContainer => + Container( padding: EdgeInsets.only(left: 16, right: 16, bottom: 15, top: 15), alignment: Alignment.center, decoration: BoxDecoration( diff --git a/lib/pages/login/register_new.dart b/lib/pages/login/register_new.dart index c9f1fdb7..9a6497d3 100644 --- a/lib/pages/login/register_new.dart +++ b/lib/pages/login/register_new.dart @@ -1,4 +1,5 @@ import 'package:flutter/gestures.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:hmg_patient_app/config/config.dart'; import 'package:hmg_patient_app/config/shared_pref_kay.dart'; import 'package:hmg_patient_app/config/size_config.dart'; @@ -24,6 +25,7 @@ import 'package:hmg_patient_app/uitl/gif_loader_dialog_utils.dart'; import 'package:hmg_patient_app/uitl/translations_delegate_base.dart'; import 'package:hmg_patient_app/uitl/utils.dart'; import 'package:hmg_patient_app/uitl/utils_new.dart'; +import 'package:hmg_patient_app/widgets/drawer/langauge_picker.dart'; import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app/widgets/otp/sms-popup.dart'; @@ -61,7 +63,6 @@ class _RegisterNew extends State { final sharedPref = new AppSharedPreferences(); late PageController _controller; late bool isLoading; - int _currentIndex = 0; String? LoginTokenID; bool isDubai = false; final intl.DateFormat dateFormat = intl.DateFormat('dd/MM/yyyy'); @@ -84,6 +85,9 @@ class _RegisterNew extends State { @override Widget build(BuildContext context) { return AppScaffold( + // extendBody: true, + // extendBodyBehindAppBar: true, + appBarTitle: TranslationBase.of(context).register, isShowDecPage: false, isShowAppBar: true, @@ -99,260 +103,285 @@ class _RegisterNew extends State { dropDownIndexChange: (value) { Utils.changeAppLanguage(context: context); }, - body: SafeArea( - child: SingleChildScrollView( - reverse: false, - // physics: NeverScrollableScrollPhysics(), - padding: EdgeInsets.only(left: 24, right: 24), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Utils.showLottie(context: context, assetPath: 'assets/animations/lottie/register.json', width: context.getLottieScaledWidth(238), fit: BoxFit.cover, repeat: true), - SizedBox(height: 8), - Text( - TranslationBase.of(context).prepareToElevate, - style: TextStyle(fontSize: 32, fontFamily: context.fontFamily, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.4, height: 47 / 35), + body: GestureDetector( + onTap: () { + FocusScope.of(context).unfocus(); // Dismiss the keyboard when tapping outside + }, + child: ScrollConfiguration( + behavior: ScrollConfiguration.of(context).copyWith(overscroll: false, physics: const ClampingScrollPhysics()), + child: NotificationListener( + onNotification: (notification) { + notification.disallowIndicator(); + return true; + }, + child: SingleChildScrollView( + physics: ClampingScrollPhysics(), // Remove NeverScrollableScrollPhysics() + padding: EdgeInsets.only( + left: 24, + right: 24, ), - SizedBox(height: 24), - Directionality( - textDirection: Directionality.of(context), - child: Container( - decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)), - padding: EdgeInsets.only(left: 16, right: 16), - child: Column( - children: [ - inputWidget( - TranslationBase.of(context).country, - "Kingdom Of Saudi Arabia", - nationalIDorFile, - isEnable: true, - prefix: null, - hasSelection: true, - dropdownItems: Country.values.map((e) => context.selectedLanguage == "ar" ? e.nameArabic : e.displayName).toList(), - selectedValue: context.selectedLanguage == "ar" ? selectedCountry.nameArabic : selectedCountry.displayName, - selectionType: SelectionType.dropdown, - onChange: (val) { - if (val != null) { - setState(() { - selectedCountry = CountryExtension.fromDisplayName(val); - }); - } - }, - isBorderAllowed: false, - isAllowLeadingIcon: true, - hasSelectionCustomIcon: true, - removePadding: true, - isLeadingCountry: true, - isAllowRadius: false, - selectionCustomIcon: "assets/images/svg/arrow-down.svg", - leadingIcon: selectedCountry.iconPath, - ), - Divider(height: 1), - inputWidget(TranslationBase.of(context).nationalIdNumber, "1xxxxxxxx", nationalIDorFile, - isEnable: true, - prefix: null, - removePadding: true, - isAllowRadius: false, - hasSelection: false, - isBorderAllowed: false, - isAllowLeadingIcon: true, - leadingIcon: "assets/images/svg/student-card.svg", onChange: (value) { - print(value); - }), - Divider(height: 1), - inputWidget(TranslationBase.of(context).dob, "11 July, 1994", nationalIDorFile, - isEnable: true, - prefix: null, - hasSelection: true, - removePadding: true, - isBorderAllowed: false, - isAllowLeadingIcon: true, - hasSelectionCustomIcon: true, - selectionType: SelectionType.calendar, - selectedValue: selectedDOB != null ? Utils.formatDateToDisplay(selectedDOB.toString()) : null, - selectionCustomIcon: "assets/images/svg/calendar.svg", - lang: context.selectedLanguage, - leadingIcon: "assets/images/svg/birthday-cake.svg", onChange: (value) { - print("=========== " + value!); - selectedDOB = DateTime.parse(value); - setState(() {}); - }, onCalendarTypeChanged: (bool value) { - if (value) { - print("gregorian"); - isHijri = 0; // Hijri - } else { - print("hijri"); - isHijri = 1; // Gregorian - } - }), - ], + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Utils.showLottie( + context: context, + assetPath: 'assets/animations/lottie/register.json', + width: MediaQuery.of(context).size.width * 0.45, + height: MediaQuery.of(context).size.height * 0.22, + fit: BoxFit.cover, + repeat: true), + SizedBox(height: 8), + Text( + TranslationBase.of(context).prepareToElevate, + textScaler: TextScaler.linear(MediaQuery.textScalerOf(context).scale(1)), + style: TextStyle(fontSize: 28, fontFamily: context.fontFamily, fontWeight: FontWeight.w600, color: Color(0xff2B353E), letterSpacing: -0.4, height: 40 / 28), ), - ), - ), - SizedBox(height: 25), - GestureDetector( - onTap: () { - setState(() { - isTermsAccepted = !isTermsAccepted; - }); - }, - child: Row( - children: [ - AnimatedContainer( - duration: const Duration(milliseconds: 200), - height: 24, - width: 24, - decoration: BoxDecoration( - color: isTermsAccepted ? const Color(0xFFE92227) : Colors.transparent, - borderRadius: BorderRadius.circular(6), - border: Border.all( - color: isTermsAccepted ? const Color(0xFFE92227) : Colors.grey, - width: 2, - ), + SizedBox(height: 24), + Directionality( + textDirection: Directionality.of(context), + child: Container( + decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(24)), + padding: EdgeInsets.only(left: 16, right: 16, top: 0, bottom: 0), + child: Column( + children: [ + newInputWidget( + TranslationBase.of(context).country, + "Kingdom Of Saudi Arabia", + nationalIDorFile, + isEnable: true, + prefix: null, + hasSelection: true, + dropdownItems: Country.values.map((e) => context.selectedLanguage == "ar" ? e.nameArabic : e.displayName).toList(), + selectedValue: context.selectedLanguage == "ar" ? selectedCountry.nameArabic : selectedCountry.displayName, + selectionType: SelectionType.dropdown, + onChange: (val) { + if (val != null) { + setState(() { + selectedCountry = CountryExtension.fromDisplayName(val); + }); + } + }, + isBorderAllowed: false, + isAllowLeadingIcon: true, + hasSelectionCustomIcon: true, + removePadding: true, + isLeadingCountry: true, + isAllowRadius: false, + padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + selectionCustomIcon: "assets/images/svg/arrow-down.svg", + leadingIcon: selectedCountry.iconPath, + ).withVerticalPadding(8), + Divider(height: 1), + newInputWidget(TranslationBase.of(context).nationalIdNumber, "1xxxxxxxx", nationalIDorFile, + isEnable: true, + prefix: null, + removePadding: true, + isAllowRadius: false, + hasSelection: false, + isBorderAllowed: false, + isAllowLeadingIcon: true, + padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + leadingIcon: "assets/images/svg/student-card.svg", onChange: (value) { + print(value); + }).withVerticalPadding(8), + Divider(height: 1), + newInputWidget(TranslationBase.of(context).dob, "11 July, 1994", nationalIDorFile, + isEnable: true, + prefix: null, + hasSelection: true, + removePadding: true, + isBorderAllowed: false, + isAllowLeadingIcon: true, + hasSelectionCustomIcon: true, + selectionType: SelectionType.calendar, + selectedValue: selectedDOB != null ? Utils.formatDateToDisplay(selectedDOB.toString()) : null, + selectionCustomIcon: "assets/images/svg/calendar.svg", + lang: context.selectedLanguage, + padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + leadingIcon: "assets/images/svg/birthday-cake.svg", onChange: (value) { + print("=========== " + value!); + selectedDOB = DateTime.parse(value); + setState(() {}); + }, onCalendarTypeChanged: (bool value) { + if (value) { + print("gregorian"); + isHijri = 0; // Hijri + } else { + print("hijri"); + isHijri = 1; // Gregorian + } + }).withVerticalPadding(8), + ], ), - child: isTermsAccepted ? const Icon(Icons.check, size: 16, color: Colors.white) : null, ), - const SizedBox(width: 12), - Expanded( - child: Text( - TranslationBase.of(context).iAcceptTermsConditions, - style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Color(0xFF2E3039)), - ), + ), + SizedBox(height: 25), + GestureDetector( + onTap: () { + setState(() { + isTermsAccepted = !isTermsAccepted; + }); + }, + child: Row( + children: [ + AnimatedContainer( + duration: const Duration(milliseconds: 200), + height: 24, + width: 24, + decoration: BoxDecoration( + color: isTermsAccepted ? const Color(0xFFE92227) : Colors.transparent, + borderRadius: BorderRadius.circular(6), + border: Border.all( + color: isTermsAccepted ? const Color(0xFFE92227) : Colors.grey, + width: 2, + ), + ), + child: isTermsAccepted ? const Icon(Icons.check, size: 16, color: Colors.white) : null, + ), + const SizedBox(width: 12), + Expanded( + child: Text( + TranslationBase.of(context).iAcceptTermsConditions, + style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500, color: Color(0xFF2E3039)), + ), + ), + ], ), - ], - ), - ), - SizedBox(height: 25), - CustomButton( - text: TranslationBase.of(context).register, - icon: "assets/images/svg/note-edit.svg", - onPressed: () { - // bool isValid = Utils.validateIqama(nationalIDorFile.text); - if (nationalIDorFile == null) { - Utils.showErrorToast("Please enter your national id."); - return; - } - if (selectedCountry == null) { - Utils.showErrorToast("Please select your country."); - return; - } + ), + SizedBox(height: 25), + CustomButton( + text: TranslationBase.of(context).register, + icon: "assets/images/svg/note-edit.svg", + onPressed: () { + // bool isValid = Utils.validateIqama(nationalIDorFile.text); + if (nationalIDorFile == null) { + Utils.showErrorToast("Please enter your national id."); + return; + } + if (selectedCountry == null) { + Utils.showErrorToast("Please select your country."); + return; + } - if (selectedDOB == null) { - Utils.showErrorToast("Please enter your date of birth."); - return; - } - if (!isTermsAccepted) { - Utils.showErrorToast("Please accept the terms and conditions."); - return; - } + if (selectedDOB == null) { + Utils.showErrorToast("Please enter your date of birth."); + return; + } + if (!isTermsAccepted) { + Utils.showErrorToast("Please accept the terms and conditions."); + return; + } - showModalBottomSheet( - context: context, - isScrollControlled: true, - isDismissible: false, - backgroundColor: Colors.transparent, - builder: (bottomSheetContext) => Padding( - padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), - child: SingleChildScrollView( - child: GenericBottomSheet( - countryCode: selectedCountry.countryCode, - initialPhoneNumber: "", - textController: phoneController, - buttons: [ - Padding( - padding: const EdgeInsets.only(bottom: 10), - child: CustomButton( - text: "Send me OTP on SMS", - onPressed: () { - int? val = Utils.onOtpBtnPressed(OTPType.sms, phoneController); - registerUser(val); - //if (val != null) checkUserAuthentication(val); - }, - backgroundColor: Colors.red, - borderColor: Colors.red, - textColor: Colors.white, - icon: "assets/images/svg/message.svg", - ), - ), - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ + showModalBottomSheet( + context: context, + isScrollControlled: true, + isDismissible: false, + backgroundColor: Colors.transparent, + builder: (bottomSheetContext) => Padding( + padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), + child: SingleChildScrollView( + child: GenericBottomSheet( + countryCode: selectedCountry.countryCode, + initialPhoneNumber: "", + textController: phoneController, + buttons: [ Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: AppText( - "OR", - fontSize: 16, - fontFamily: context.fontFamily, - color: Color(0xFF2E3039), - fontWeight: FontWeight.w500, + padding: const EdgeInsets.only(bottom: 10), + child: CustomButton( + text: "Send me OTP on SMS", + onPressed: () { + int? val = Utils.onOtpBtnPressed(OTPType.sms, phoneController); + registerUser(val); + //if (val != null) checkUserAuthentication(val); + }, + backgroundColor: Colors.red, + borderColor: Colors.red, + textColor: Colors.white, + icon: "assets/images/svg/message.svg", + ), + ), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: AppText( + "OR", + fontSize: 16, + fontFamily: context.fontFamily, + color: Color(0xFF2E3039), + fontWeight: FontWeight.w500, + ), + ), + ], + ), + Padding( + padding: const EdgeInsets.only(bottom: 10, top: 10), + child: CustomButton( + text: "Send me OTP on WhatsApp", + onPressed: () { + int? val = Utils.onOtpBtnPressed(OTPType.whatsapp, phoneController); + registerUser(val); + // if (val != null) checkUserAuthentication(val); + }, + backgroundColor: Colors.white, + borderColor: Color(0xFF2E3039), + textColor: Color(0xFF2E3039), + icon: "assets/images/svg/whatsapp.svg", ), ), ], ), - Padding( - padding: const EdgeInsets.only(bottom: 10), - child: CustomButton( - text: "Send me OTP on WhatsApp", - onPressed: () { - int? val = Utils.onOtpBtnPressed(OTPType.whatsapp, phoneController); - registerUser(val); - // if (val != null) checkUserAuthentication(val); - }, - backgroundColor: Colors.white, - borderColor: Color(0xFF2E3039), - textColor: Color(0xFF2E3039), - icon: "assets/images/svg/whatsapp.svg", - ), - ), - ], - ), - ), - ), - ); - }, - fontFamily: context.fontFamily, - ), - SizedBox(height: 14), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - color: Colors.black, - fontSize: 16, - height: 26 / 16, - fontFamily: context.fontFamily, - fontWeight: FontWeight.w500, - ), - children: [ - TextSpan( - text: TranslationBase.of(context).alreadyHaveAccount, - style: TextStyle( - fontFamily: context.fontFamily, + ), ), - ), - TextSpan(text: " "), - TextSpan( - text: TranslationBase.of(context).loginNow, + ); + }, + fontFamily: context.fontFamily, + ), + SizedBox(height: 14), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( style: TextStyle( - color: Colors.red, + color: Colors.black, fontSize: 16, height: 26 / 16, fontFamily: context.fontFamily, fontWeight: FontWeight.w500, ), - recognizer: TapGestureRecognizer() - ..onTap = () { - Navigator.of(context).pop(); - }, + children: [ + TextSpan( + text: TranslationBase.of(context).alreadyHaveAccount, + style: TextStyle( + fontFamily: context.fontFamily, + ), + ), + TextSpan(text: " "), + TextSpan( + text: TranslationBase.of(context).loginNow, + style: TextStyle( + color: Colors.red, + fontSize: 16, + height: 26 / 16, + fontFamily: context.fontFamily, + fontWeight: FontWeight.w500, + ), + recognizer: TapGestureRecognizer() + ..onTap = () { + Navigator.of(context).pop(); + }, + ), + ], ), - ], + ), ), - ), + SizedBox(height: 30), + ], ), - SizedBox(height: 30), - ], + ), ), ), )); diff --git a/lib/pages/login/register_new_step_2.dart b/lib/pages/login/register_new_step_2.dart index 1ea719a2..06ac2cc5 100644 --- a/lib/pages/login/register_new_step_2.dart +++ b/lib/pages/login/register_new_step_2.dart @@ -15,6 +15,8 @@ import 'package:hmg_patient_app/pages/AlHabibMedicalService/health_calculator/ca import 'package:hmg_patient_app/pages/login/login-type.dart'; import 'package:hmg_patient_app/pages/login/register-info.dart'; import 'package:hmg_patient_app/pages/login/register.dart'; +import 'package:hmg_patient_app/pages/login/register_new.dart'; +import 'package:hmg_patient_app/pages/login/welcome.dart'; import 'package:hmg_patient_app/services/authentication/auth_provider.dart'; import 'package:hmg_patient_app/theme/colors.dart'; import 'package:hmg_patient_app/uitl/app_shared_preferences.dart'; @@ -27,6 +29,7 @@ import 'package:hmg_patient_app/uitl/utils_new.dart'; import 'package:hmg_patient_app/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:hmg_patient_app/widgets/text/app_texts_widget.dart'; +import 'package:hmg_patient_app/widgets/transitions/fade_page.dart'; import 'package:provider/provider.dart'; import '../../widgets/dialogs/confirm_dialog.dart'; @@ -355,7 +358,8 @@ class _RegisterNew extends State { await sharedPref.setObject(LOGIN_TOKEN_ID, result.logInTokenID), await sharedPref.setString(TOKEN, result.authenticationTokenID), AppToast.showSuccessToast(message: TranslationBase.of(context).successRegister), - projectViewModel.analytics.loginRegistration.registration_confirmation() + projectViewModel.analytics.loginRegistration.registration_confirmation(), + Navigator.of(context).pushReplacement(FadePage(page: WelcomeLogin())), } }) .catchError((err) { diff --git a/lib/pages/login/welcome.dart b/lib/pages/login/welcome.dart index cf3d9ef0..3522d9b8 100644 --- a/lib/pages/login/welcome.dart +++ b/lib/pages/login/welcome.dart @@ -111,166 +111,181 @@ class _WelcomeLogin extends State { dropDownIndexChange: (value) { Utils.changeAppLanguage(context: context); }, - body: SafeArea( - child: SingleChildScrollView( - reverse: true, - physics: NeverScrollableScrollPhysics(), - padding: EdgeInsets.only( - left: 24, - right: 24, - // bottom: MediaQuery.of(context).viewInsets.bottom , - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Utils.showLottie( - context: context, - assetPath: 'assets/animations/lottie/login.json', - width: context.getLottieScaledWidth(238), - repeat: true, - fit: BoxFit.cover, - ), - SizedBox(height: 140), - Text( - TranslationBase.of(context).welcomeToDrSulaiman, - style: TextStyle( - fontSize: 32, - fontFamily: (projectViewModel.currentLanguage == 'ar' ? 'Cairo' : 'Poppins'), - fontWeight: FontWeight.w600, - color: Color(0xff2B353E), - letterSpacing: -0.4, - height: 47 / 32, - ), - ), - SizedBox(height: 32), - Directionality( - textDirection: TextDirection.ltr, - child: inputWidget( - "National ID. or File No", - "1xxxxxxxx", - nationIdController, - isEnable: true, - prefix: null, - hasSelection: false, - isBorderAllowed: false, - isAllowLeadingIcon: true, - leadingIcon: "assets/images/svg/student-card.svg", - ), - ), - SizedBox(height: 16), - CustomButton( - text: TranslationBase.of(context).login, - icon: "assets/images/svg/login1.svg", - onPressed: () { - bool isValid = Utils.validateIqama(nationIdController.text); - if (isValid) { - showModalBottomSheet( + body: GestureDetector( + onTap: () { + FocusScope.of(context).unfocus(); // Dismiss the keyboard when tapping outside + }, + child: ScrollConfiguration( + behavior: ScrollConfiguration.of(context).copyWith(overscroll: false, physics: const ClampingScrollPhysics()), + child: NotificationListener( + onNotification: (notification) { + notification.disallowIndicator(); + return true; + }, + child: SingleChildScrollView( + physics: ClampingScrollPhysics(), // Remove NeverScrollableScrollPhysics() + padding: EdgeInsets.only(left: 24, right: 24, ), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Utils.showLottie( context: context, - isScrollControlled: true, - isDismissible: false, - backgroundColor: Colors.transparent, - builder: (bottomSheetContext) => Padding( - padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), - child: SingleChildScrollView( - child: GenericBottomSheet( - countryCode: "966", - initialPhoneNumber: "", - textController: phoneController, - buttons: [ - Padding( - padding: const EdgeInsets.only(bottom: 10), - child: CustomButton( - text: "Send me OTP on SMS", - onPressed: () { - int? val = Utils.onOtpBtnPressed(OTPType.sms, phoneController); - if (val != null) checkUserAuthentication(val); - }, - backgroundColor: Colors.red, - borderColor: Colors.red, - textColor: Colors.white, - icon: "assets/images/svg/message.svg", - ), - ), - Row( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ + assetPath: 'assets/animations/lottie/login.json', + width: MediaQuery.of(context).size.width * 0.45, + height: MediaQuery.of(context).size.height * 0.22, + repeat: true, + fit: BoxFit.cover), + Flexible( + fit: FlexFit.loose, + child: Container( + height: MediaQuery.of(context).size.height * 0.18, + ), + ), + Text( + TranslationBase.of(context).welcomeToDrSulaiman, + style: TextStyle( + fontSize: 28, + fontFamily: (projectViewModel.currentLanguage == 'ar' ? 'Cairo' : 'Poppins'), + fontWeight: FontWeight.w600, + color: Color(0xff2B353E), + letterSpacing: -0.4, + height: 40 / 28, + ), + ), + SizedBox(height: 32), + Directionality( + textDirection: TextDirection.ltr, + child: newInputWidget( + "National ID. or File No", + "1xxxxxxxx", + nationIdController, + isEnable: true, + removePadding: true, + prefix: null, + hasSelection: false, + isBorderAllowed: false, + isAllowLeadingIcon: true, + padding: EdgeInsets.only(top: 8, bottom: 8, left: 8, right: 8), + leadingIcon: "assets/images/svg/student-card.svg", + ), + ), + SizedBox(height: 16), + CustomButton( + text: TranslationBase.of(context).login, + icon: "assets/images/svg/login1.svg", + onPressed: () { + bool isValid = Utils.validateIqama(nationIdController.text); + if (isValid) { + showModalBottomSheet( + context: context, + isScrollControlled: true, + isDismissible: false, + useSafeArea: true, + backgroundColor: Colors.transparent, + builder: (bottomSheetContext) => Padding( + padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), + child: SingleChildScrollView( + child: GenericBottomSheet( + countryCode: "966", + initialPhoneNumber: "", + textController: phoneController, + buttons: [ Padding( - padding: const EdgeInsets.symmetric(horizontal: 8), - child: AppText( - "OR", - fontSize: 16, - fontFamily: 'poppins', - color: Color(0xFF2E3039), - fontWeight: FontWeight.w500, + padding: const EdgeInsets.only(bottom: 10), + child: CustomButton( + text: "Send me OTP on SMS", + onPressed: () { + int? val = Utils.onOtpBtnPressed(OTPType.sms, phoneController); + if (val != null) checkUserAuthentication(val); + }, + // backgroundColor: Colors.red, + // borderColor: Colors.red, + textColor: Colors.white, + icon: "assets/images/svg/message.svg", + ), + ), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 8), + child: AppText( + "OR", + fontSize: 16, + fontFamily: 'poppins', + color: Color(0xFF2E3039), + fontWeight: FontWeight.w500, + ), + ), + ], + ), + Padding( + padding: const EdgeInsets.only(bottom: 10), + child: CustomButton( + text: "Send me OTP on WhatsApp", + onPressed: () { + int? val = Utils.onOtpBtnPressed(OTPType.whatsapp, phoneController); + if (val != null) checkUserAuthentication(val); + }, + backgroundColor: Colors.white, + borderColor: Color(0xFF2E3039), + textColor: Color(0xFF2E3039), + icon: "assets/images/svg/whatsapp.svg", ), ), ], ), - Padding( - padding: const EdgeInsets.only(bottom: 10), - child: CustomButton( - text: "Send me OTP on WhatsApp", - onPressed: () { - int? val = Utils.onOtpBtnPressed(OTPType.whatsapp, phoneController); - if (val != null) checkUserAuthentication(val); - }, - backgroundColor: Colors.white, - borderColor: Color(0xFF2E3039), - textColor: Color(0xFF2E3039), - icon: "assets/images/svg/whatsapp.svg", - ), - ), - ], + ), ), - ), - ), - ); - } else { - Utils.showErrorToast("Please enter a valid Iqama number.", context); - } - }, - ), - SizedBox(height: 14), - Center( - child: RichText( - textAlign: TextAlign.center, - text: TextSpan( - style: TextStyle( - color: Colors.black, - fontSize: 16, - height: 26 / 16, - fontFamily: context.fontFamily, - fontWeight: FontWeight.w500, - ), - children: [ - TextSpan( - text: TranslationBase.of(context).dontHaveAccount, - style: TextStyle( - fontFamily: context.fontFamily, - )), - TextSpan(text: " "), - TextSpan( - text: TranslationBase.of(context).registerNow, + ); + } else { + Utils.showErrorToast("Please enter a valid Iqama number.", context); + } + }, + ), + SizedBox(height: 14), + Center( + child: RichText( + textAlign: TextAlign.center, + text: TextSpan( style: TextStyle( - color: Colors.red, + color: Colors.black, fontSize: 16, height: 26 / 16, fontFamily: context.fontFamily, fontWeight: FontWeight.w500, ), - recognizer: TapGestureRecognizer() - ..onTap = () { - Navigator.of(context).push(FadePage(page: RegisterNew())); - locator().loginRegistration.visited_alhabib_group(true); - }, + children: [ + TextSpan( + text: TranslationBase.of(context).dontHaveAccount, + style: TextStyle( + fontFamily: context.fontFamily, + )), + TextSpan(text: " "), + TextSpan( + text: TranslationBase.of(context).registerNow, + style: TextStyle( + color: Colors.red, + fontSize: 16, + height: 26 / 16, + fontFamily: context.fontFamily, + fontWeight: FontWeight.w500, + ), + recognizer: TapGestureRecognizer() + ..onTap = () { + Navigator.of(context).push(FadePage(page: RegisterNew())); + locator().loginRegistration.visited_alhabib_group(true); + }, + ), + ], ), - ], + ).withVerticalPadding(16), ), - ), + ], ), - SizedBox(height: 30), - ], + ), ), ), ), diff --git a/lib/uitl/utils.dart b/lib/uitl/utils.dart index 954a91aa..4c02da3e 100644 --- a/lib/uitl/utils.dart +++ b/lib/uitl/utils.dart @@ -1187,6 +1187,13 @@ extension WidgetPaddingExtensions on Widget { child: this, ); } + + Widget withVerticalPadding([double padding = 16.0]) { + return Padding( + padding: EdgeInsets.symmetric(vertical: padding), + child: this, + ); + } } extension CountryExtension on Country { @@ -1252,6 +1259,7 @@ extension SelectedLanguageExtension on BuildContext { } double getLottieScaledWidth(double value) => MediaQuery.of(this).size.width * (value / MediaQuery.of(this).size.width); + double getLottieScaledHeight(double value) => MediaQuery.of(this).size.height * (value / MediaQuery.of(this).size.height); } /* diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index 161a9bcd..ce0e2abd 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -251,7 +251,6 @@ resizeToAvoidBottomInset: widget.resizeToAvoidBottomInset, isShowBackButton: widget.isshowBackButton, dropDownIndexChange: widget.dropDownIndexChange, appBarIcons: widget.appBarIcons, - isShowLanguageChanger: widget.isShowLanguageChanger, onTap: () { widget.onTap; @@ -458,48 +457,6 @@ class NewAppBarWidget extends StatelessWidget implements PreferredSizeWidget { ], ), ), - // child: Directionality( - // // Directionality( - // textDirection: TextDirection.ltr, - // child: Container( - // decoration: containerRadius(Color(0xFFFEE9EA), 12), - // height: 40, - // width: 93, - // // padding: EdgeInsets.all(10), - // child: DropdownButtonHideUnderline( - // child: ButtonTheme( - // alignedDropdown: true, - // child: DropdownButton( - // iconEnabledColor: CustomColors.darkOrange, - // style: TextStyle(color: CustomColors.black, fontSize: 12), - // dropdownColor: CustomColors.lightGreyColor, - // value: dropdownIndexValue, - // items: [ - // for (int i = 0; i < dropDownList!.length; i++) - // DropdownMenuItem( - // value: i, - // child: AutoSizeText( - // dropDownList![i], - // style: TextStyle( - // fontSize: 12, - // fontFamily: (projectViewModel.isArabic ? 'Cairo' : 'Poppins'), - // fontWeight: FontWeight.w600, - // color: Color(0xff2B2E31), - // letterSpacing: -.48, - // // height: 12 / 18 - // ), - // ), - // ) - // ], - // onChanged: dropDownIndexChange, - // underline: Container( - // height: 0, - // ), - // ), - // ), - // ), - // ), - // ), ), ], ),