diff --git a/lib/core/app_state.dart b/lib/core/app_state.dart index 7c42042..eb9315c 100644 --- a/lib/core/app_state.dart +++ b/lib/core/app_state.dart @@ -22,13 +22,8 @@ class AppState { set setUserLong(v) => userLong = v; - final PostParamsModel _postParamsInitConfig = PostParamsModel( - channel: 3, - versionID: ApiConsts.VERSION_ID, - ipAddress: '10.20.10.20', - generalId: 'Cs2020@2016\$2958', - deviceTypeID: "2", - sessionID: 'TMRhVmkGhOsvamErw'); + final PostParamsModel _postParamsInitConfig = + PostParamsModel(channel: 3, versionID: ApiConsts.VERSION_ID, ipAddress: '10.20.10.20', generalId: 'Cs2020@2016\$2958', deviceTypeID: "2", sessionID: 'TMRhVmkGhOsvamErw'); void setPostParamsInitConfig() { isAuthenticated = false; @@ -50,7 +45,9 @@ class AppState { bool isArabic() => EasyLocalization.of(navigationService.navigatorKey.currentContext!)?.locale.languageCode == "ar"; - int getLanguageID(context) => EasyLocalization.of(context)?.locale.languageCode == "ar" ? 1 : 2; + int getLanguageID() => EasyLocalization.of(navigationService.navigatorKey.currentContext!)?.locale.languageCode == "ar" ? 1 : 2; + + String? getLanguageCode() => EasyLocalization.of(navigationService.navigatorKey.currentContext!)?.locale.languageCode; AuthenticatedUser? _authenticatedUser; diff --git a/lib/features/authentication/authentication_view_model.dart b/lib/features/authentication/authentication_view_model.dart index 9abd673..c34c339 100644 --- a/lib/features/authentication/authentication_view_model.dart +++ b/lib/features/authentication/authentication_view_model.dart @@ -1,8 +1,12 @@ +import 'dart:convert'; + import 'package:flutter/material.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/request_utils.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/features/authentication/authentication_repo.dart'; import 'package:hmg_patient_app_new/features/authentication/models/request_models/check_patient_authentication_request_model.dart'; import 'package:hmg_patient_app_new/services/dialog_service.dart'; @@ -21,18 +25,53 @@ class AuthenticationViewModel extends ChangeNotifier { required this.dialogService, }); - final TextEditingController nationalIdController = TextEditingController(); - final TextEditingController phoneNumberController = TextEditingController(); - CountryEnum selectedCountry = CountryEnum.saudiArabia; + final TextEditingController nationalIdController = TextEditingController(), phoneNumberController = TextEditingController(), dobController = TextEditingController(); + CountryEnum selectedCountrySignup = CountryEnum.saudiArabia; + MaritalStatusTypeEnum? maritalStatus; + GenderTypeEnum? genderType; bool isTermsAccepted = false; + List? countriesList; + NationalityCountries? pickedCountryByUAEUser; void login() { if (ValidationUtils.isValidatePhoneAndId(nationalId: nationalIdController.text, phoneNumber: phoneNumberController.text)) { } else {} } + void clearDefaults() { + nationalIdController.clear(); + phoneNumberController.clear(); + dobController.clear(); + maritalStatus = null; + genderType = null; + isTermsAccepted = false; + selectedCountrySignup = CountryEnum.saudiArabia; + pickedCountryByUAEUser = null; + } + void onCountryChange(CountryEnum country) { - selectedCountry = country; + selectedCountrySignup = country; + notifyListeners(); + } + + void loadCountriesData({required BuildContext context}) async { + final String response = await DefaultAssetBundle.of(context).loadString('assets/json/countriesList.json'); + final List data = json.decode(response); + countriesList = data.map((e) => NationalityCountries.fromJson(e)).toList(); + } + + void onMaritalStatusChange(String? status) { + maritalStatus = MaritalStatusTypeExtension.fromType(status)!; + notifyListeners(); + } + + void onGenderChange(String? status) { + genderType = GenderTypeExtension.fromType(status)!; + notifyListeners(); + } + + void onUAEUserCountrySelection(String? value) { + pickedCountryByUAEUser = countriesList!.firstWhere((element) => element.name == value); notifyListeners(); } diff --git a/lib/presentation/authentication/login.dart b/lib/presentation/authentication/login.dart index f171443..aef877f 100644 --- a/lib/presentation/authentication/login.dart +++ b/lib/presentation/authentication/login.dart @@ -151,7 +151,7 @@ class _LoginScreen extends State { padding: EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), child: SingleChildScrollView( child: GenericBottomSheet( - countryCode: authVM.selectedCountry.countryCode, + countryCode: authVM.selectedCountrySignup.countryCode, initialPhoneNumber: "", textController: authVM.phoneNumberController, isEnableCountryDropdown: true, diff --git a/lib/presentation/authentication/register.dart b/lib/presentation/authentication/register.dart index 85ff402..4756cba 100644 --- a/lib/presentation/authentication/register.dart +++ b/lib/presentation/authentication/register.dart @@ -83,30 +83,31 @@ class _RegisterNew extends State { children: [ CustomCountryDropdown( countryList: CountryEnum.values, - onCountryChange: (CountryEnum? value) {}, + onCountryChange: authVm.onCountryChange, isRtl: Directionality.of(context) == TextDirection.LTR, ).withVerticalPadding(8.h), Divider(height: 1.h), TextInputWidget( - labelText: LocaleKeys.nationalIdNumber.tr(), - hintText: "xxxxxxxxx", - controller: TextEditingController(), - isEnable: true, - prefix: null, - isAllowRadius: true, - isBorderAllowed: false, - isAllowLeadingIcon: true, - autoFocus: true, - padding: EdgeInsets.symmetric(vertical: 8.h), - leadingIcon: AppAssets.student_card, - onChange: (value) { - print(value); - }).withVerticalPadding(8), + labelText: LocaleKeys.nationalIdNumber.tr(), + hintText: "xxxxxxxxx", + controller: authVm.nationalIdController, + isEnable: true, + prefix: null, + isAllowRadius: true, + isBorderAllowed: false, + isAllowLeadingIcon: true, + autoFocus: true, + padding: EdgeInsets.symmetric(vertical: 8.h), + leadingIcon: AppAssets.student_card, + // onChange: (value) { + // print(value); + // } + ).withVerticalPadding(8), Divider(height: 1), TextInputWidget( labelText: LocaleKeys.dob.tr(), hintText: "11 July, 1994", - controller: TextEditingController(), + controller: authVm.dobController, isEnable: true, prefix: null, isAllowRadius: true, @@ -114,7 +115,7 @@ class _RegisterNew extends State { isAllowLeadingIcon: true, padding: EdgeInsets.symmetric(vertical: 8.h), leadingIcon: AppAssets.birthday_cake, - onChange: (value) {}, + selectionType: SelectionTypeEnum.calendar, ).withVerticalPadding(8), ], ), @@ -211,7 +212,7 @@ class _RegisterNew extends State { padding: EdgeInsets.only(bottom: MediaQuery.of(bottomSheetContext).viewInsets.bottom), child: SingleChildScrollView( child: GenericBottomSheet( - countryCode: authVM.selectedCountry.countryCode, + countryCode: authVM.selectedCountrySignup.countryCode, initialPhoneNumber: "", textController: authVM.phoneNumberController, isEnableCountryDropdown: true, diff --git a/lib/presentation/authentication/register_step2.dart b/lib/presentation/authentication/register_step2.dart index 660ba69..483ce5c 100644 --- a/lib/presentation/authentication/register_step2.dart +++ b/lib/presentation/authentication/register_step2.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:get_it/get_it.dart'; import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/common_models/nationality_country_model.dart'; @@ -11,6 +12,7 @@ import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; import 'package:hmg_patient_app_new/extensions/context_extensions.dart'; import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; +import 'package:hmg_patient_app_new/features/authentication/authentication_view_model.dart'; import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/appbar/app_bar_widget.dart'; @@ -18,6 +20,7 @@ import 'package:hmg_patient_app_new/widgets/bottomsheet/generic_bottom_sheet.dar import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/dropdown_widget.dart'; import 'package:hmg_patient_app_new/widgets/input_widget.dart'; +import 'package:provider/provider.dart'; class RegisterNewStep2 extends StatefulWidget { var nHICData; @@ -31,30 +34,31 @@ class RegisterNewStep2 extends StatefulWidget { class _RegisterNew extends State { bool isFromDubai = true; - List countriesList = []; - AppState? appState; - GenderTypeEnum? selectedGenderType; - MaritalStatusTypeEnum? selectedMaritalStatusType; - CountryEnum? selectedCountry; + AuthenticationViewModel? authVM; @override void initState() { super.initState(); + authVM = context.read(); + authVM!.loadCountriesData(context: context); // isFromDubai = widget.payload.zipCode!.contains("971") || widget.payload.zipCode!.contains("+971"); - loadCountriesList(); } - loadCountriesList() async { - appState = getIt.get(); - final String response = await DefaultAssetBundle.of(context).loadString('assets/json/countriesList.json'); - final List data = json.decode(response); - countriesList = data.map((e) => NationalityCountries.fromJson(e)).toList(); + @override + void dispose() { + super.dispose(); + authVM!.clearDefaults(); } + @override Widget build(BuildContext context) { + AppState appState = getIt.get(); return Scaffold( appBar: CustomAppBar( - onBackPressed: () {}, + onBackPressed: () { + Navigator.of(context).pop(); + authVM!.clearDefaults(); + }, onLanguageChanged: (lang) {}, hideLogoAndLang: true, ), @@ -84,10 +88,7 @@ class _RegisterNew extends State { isReadOnly: isFromDubai ? false : true, leadingIcon: AppAssets.user_circle) .paddingSymmetrical(0.h, 16.h), - Divider( - height: 1, - color: AppColors.greyColor, - ), + Divider(height: 1, color: AppColors.greyColor), TextInputWidget( labelText: LocaleKeys.nationalIdNumber.tr(), hintText: isFromDubai ? "widget.payload.nationalID!" : (widget.nHICData!.idNumber ?? ""), @@ -100,28 +101,28 @@ class _RegisterNew extends State { isReadOnly: true, leadingIcon: AppAssets.student_card) .paddingSymmetrical(0.h, 16.h), - Divider( - height: 1, - color: AppColors.greyColor, - ), + Divider(height: 1, color: AppColors.greyColor), isFromDubai - ? DropdownWidget( - labelText: LocaleKeys.gender.tr(), - hintText: LocaleKeys.malE.tr(), - isEnable: true, - dropdownItems: GenderTypeEnum.values.map((e) => appState!.isArabic() ? e.typeAr : e.type).toList(), - selectedValue: appState!.isArabic() ? selectedGenderType!.typeAr : selectedGenderType?.type, - // selectionType: SelectionType.dropdown, - onChange: (val) { - if (val != null) {} - }, - isBorderAllowed: false, - hasSelectionCustomIcon: true, - isAllowRadius: false, - padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.user_full, - ).withVerticalPadding(8) + ? Selector( + selector: (_, authViewModel) => authViewModel.genderType, + shouldRebuild: (previous, next) => previous != next, + builder: (context, genderType, child) { + final authVM = context.read(); + return DropdownWidget( + labelText: LocaleKeys.gender.tr(), + hintText: LocaleKeys.malE.tr(), + isEnable: true, + dropdownItems: GenderTypeEnum.values.map((e) => appState!.isArabic() ? e.typeAr : e.type).toList(), + selectedValue: genderType != null ? (appState!.isArabic() ? genderType!.typeAr : genderType!.type) : "", + onChange: authVM.onGenderChange, + isBorderAllowed: false, + hasSelectionCustomIcon: true, + isAllowRadius: false, + padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.user_full, + ).withVerticalPadding(8); + }) : TextInputWidget( labelText: LocaleKeys.gender.tr(), hintText: (widget.nHICData!.gender ?? ""), @@ -135,25 +136,29 @@ class _RegisterNew extends State { leadingIcon: AppAssets.user_full, onChange: (value) {}) .paddingSymmetrical(0.h, 16.h), - Divider( - height: 1, - color: AppColors.greyColor, - ), + Divider(height: 1, color: AppColors.greyColor), isFromDubai - ? DropdownWidget( - labelText: LocaleKeys.maritalStatus.tr(), - hintText: LocaleKeys.married.tr(), - isEnable: true, - dropdownItems: MaritalStatusTypeEnum.values.map((e) => appState!.isArabic() ? e.typeAr : e.type).toList(), - selectedValue: appState!.isArabic() ? selectedMaritalStatusType!.typeAr : selectedMaritalStatusType?.type, - onChange: (val) {}, - isBorderAllowed: false, - hasSelectionCustomIcon: true, - isAllowRadius: false, - padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.smart_phone, - ).withVerticalPadding(8) + ? Selector( + selector: (_, authViewModel) => authViewModel.maritalStatus, + shouldRebuild: (previous, next) => previous != next, + builder: (context, maritalStatus, child) { + final authVM = context.read(); // For onChange + return DropdownWidget( + labelText: LocaleKeys.maritalStatus.tr(), + hintText: LocaleKeys.married.tr(), + isEnable: true, + dropdownItems: MaritalStatusTypeEnum.values.map((e) => appState!.isArabic() ? e.typeAr : e.type).toList(), + selectedValue: maritalStatus != null ? (appState!.isArabic() ? maritalStatus.typeAr : maritalStatus.type) : "", + onChange: authVM.onMaritalStatusChange, + isBorderAllowed: false, + hasSelectionCustomIcon: true, + isAllowRadius: false, + padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.smart_phone, + ).withVerticalPadding(8); + }, + ) : TextInputWidget( labelText: LocaleKeys.maritalStatus.tr(), hintText: appState!.isArabic() @@ -168,30 +173,41 @@ class _RegisterNew extends State { leadingIcon: AppAssets.smart_phone, onChange: (value) {}) .paddingSymmetrical(0.h, 16.h), - Divider( - height: 1, - color: AppColors.greyColor, - ), + Divider(height: 1, color: AppColors.greyColor), isFromDubai - ? DropdownWidget( - labelText: LocaleKeys.country.tr(), - hintText: LocaleKeys.uae.tr(), - isEnable: true, - dropdownItems: countriesList.map((e) => appState!.isArabic() ? e.nameN ?? "" : e.name ?? "").toList(), - selectedValue: appState!.isArabic() ? selectedCountry!.nameArabic ?? "" : selectedCountry?.name ?? "", - onChange: (val) {}, - isBorderAllowed: false, - hasSelectionCustomIcon: true, - isAllowRadius: false, - padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), - selectionCustomIcon: AppAssets.arrow_down, - leadingIcon: AppAssets.globe, - ).withVerticalPadding(8) + ? Selector? countriesList, NationalityCountries? selectedCountry, bool isArabic})>( + selector: (context, authViewModel) { + final appState = getIt.get(); + return (countriesList: authViewModel.countriesList, selectedCountry: authViewModel.pickedCountryByUAEUser, isArabic: appState.isArabic()); + }, + shouldRebuild: (previous, next) => previous.countriesList != next.countriesList || previous.selectedCountry != next.selectedCountry || previous.isArabic != next.isArabic, + builder: (context, data, child) { + final authVM = context.read(); + return DropdownWidget( + labelText: LocaleKeys.country.tr(), + hintText: LocaleKeys.uae.tr(), + isEnable: true, + dropdownItems: (data.countriesList ?? []).map((e) => data.isArabic ? e.nameN ?? "" : e.name ?? "").toList(), + selectedValue: data.selectedCountry != null + ? data.isArabic + ? data.selectedCountry!.nameN ?? "" + : data.selectedCountry!.name ?? "" + : "", + onChange: authVM.onUAEUserCountrySelection, + isBorderAllowed: false, + hasSelectionCustomIcon: true, + isAllowRadius: false, + padding: const EdgeInsets.only(top: 8, bottom: 8, left: 0, right: 0), + selectionCustomIcon: AppAssets.arrow_down, + leadingIcon: AppAssets.globe, + ).withVerticalPadding(8); + }, + ) : TextInputWidget( labelText: LocaleKeys.nationality.tr(), - hintText: appState!.isArabic() - ? (countriesList.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).nameN ?? "") - : (countriesList.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).name ?? ""), + hintText: appState.isArabic() + ? (authVM!.countriesList!.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).nameN ?? "") + : (authVM!.countriesList!.firstWhere((e) => e.id == (widget.nHICData!.nationalityCode ?? ""), orElse: () => NationalityCountries()).name ?? ""), isEnable: true, prefix: null, isAllowRadius: false, @@ -208,7 +224,7 @@ class _RegisterNew extends State { TextInputWidget( labelText: LocaleKeys.mobileNumber.tr(), hintText: ("widget.payload.mobileNo" ?? ""), - controller: null, + controller: authVM!.phoneNumberController, isEnable: true, prefix: null, isAllowRadius: false, @@ -223,20 +239,17 @@ class _RegisterNew extends State { color: AppColors.greyColor, ), TextInputWidget( - labelText: LocaleKeys.dob.tr(), - hintText: isFromDubai ? "widget.payload.dob!" : (widget.nHICData!.dateOfBirth ?? ""), - controller: null, - isEnable: true, - prefix: null, - isBorderAllowed: false, - isAllowLeadingIcon: true, - isReadOnly: true, - // : SelectionType.calendar, - // selectedValue: widget.payload.dob != null ? Utils.formatDateToDisplay(widget.payload.dob.toString()) : null, - // selectionCustomIcon: AppAssets.calendar, - leadingIcon: AppAssets.birthday_cake, - onChange: (value) {}) - .paddingSymmetrical(0.h, 16.h), + labelText: LocaleKeys.dob.tr(), + hintText: isFromDubai ? "widget.payload.dob!" : (widget.nHICData!.dateOfBirth ?? ""), + controller: authVM!.dobController, + isEnable: true, + prefix: null, + isBorderAllowed: false, + isAllowLeadingIcon: true, + isReadOnly: true, + leadingIcon: AppAssets.birthday_cake, + selectionType: SelectionTypeEnum.calendar, + ).paddingSymmetrical(0.h, 16.h), ], ), ), @@ -246,12 +259,12 @@ class _RegisterNew extends State { children: [ Expanded( child: CustomButton( - text: LocaleKeys.cancel, + text: LocaleKeys.cancel.tr(), icon: AppAssets.cancel, onPressed: () { Navigator.of(context).pop(); + authVM!.clearDefaults(); }, - // fontFamily: context.fontFamily, backgroundColor: AppColors.secondaryLightRedColor, borderColor: AppColors.secondaryLightRedColor, textColor: AppColors.primaryRedColor, diff --git a/lib/widgets/input_widget.dart b/lib/widgets/input_widget.dart index ca19ee6..0f520c6 100644 --- a/lib/widgets/input_widget.dart +++ b/lib/widgets/input_widget.dart @@ -1,11 +1,16 @@ import 'package:flutter/material.dart'; +import 'package:hijri_gregorian_calendar/hijri_gregorian_calendar.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; import 'package:hmg_patient_app_new/core/app_export.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/core/enums.dart'; import 'package:hmg_patient_app_new/core/utils/utils.dart'; import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; import 'package:hmg_patient_app_new/theme/colors.dart'; import 'package:hmg_patient_app_new/widgets/dropdown/country_dropdown_widget.dart'; +import '../core/dependencies.dart'; + // TODO: Import AppColors if bgRedColor is defined there // import 'package:hmg_patient_app_new/core/ui_utils/app_colors.dart'; @@ -29,6 +34,7 @@ class TextInputWidget extends StatelessWidget { final bool hasError; final String? errorMessage; Function(CountryEnum)? onCountryChange; + SelectionTypeEnum? selectionType; // final List countryList; // final Function(Country)? onCountryChange; @@ -54,6 +60,7 @@ class TextInputWidget extends StatelessWidget { this.hasError = false, this.errorMessage, this.onCountryChange, + this.selectionType, // this.countryList = const [], // this.onCountryChange, }) : super(key: key); @@ -97,6 +104,7 @@ class TextInputWidget extends StatelessWidget { ], ), ), + if (selectionType == SelectionTypeEnum.calendar) _buildTrailingIcon(context), ], ), ), @@ -128,6 +136,38 @@ class TextInputWidget extends StatelessWidget { child: Utils.buildSvgWithAssets(icon: leadingIcon!)); } + Widget _buildTrailingIcon(BuildContext context) { + final AppState appState = getIt.get(); + return Container( + height: 40.h, + width: 40.h, + margin: EdgeInsets.zero, + padding: EdgeInsets.all(8.h), + decoration: RoundedRectangleBorder().toSmoothCornerDecoration(borderRadius: 10.h, color: AppColors.whiteColor), + child: GestureDetector( + onTap: () async { + bool isGregorian = true; + final picked = await showHijriGregBottomSheet(context, + switcherIcon: Utils.buildSvgWithAssets(icon: AppAssets.language, width: 24.h, height: 24.h), + language: appState.getLanguageCode()!, + initialDate: DateTime.now(), + okWidget: Padding(padding: EdgeInsets.only(right: 8.h), child: Utils.buildSvgWithAssets(icon: AppAssets.confirm, width: 24.h, height: 24.h)), + cancelWidget: Padding(padding: EdgeInsets.only(right: 8.h), child: Utils.buildSvgWithAssets(icon: AppAssets.cancel, iconColor: Colors.white, width: 24.h, height: 24.h)), + onCalendarTypeChanged: (bool value) { + isGregorian = value; + }); + if (picked != null && onChange != null) { + // if (onCalendarTypeChanged != null) { + // onCalendarTypeChanged.call(isGregorian); + // } + onChange!(picked.toIso8601String()); + } + }, + child: Utils.buildSvgWithAssets(icon: AppAssets.calendar), + ), + ); + } + Widget _buildLabelText() { return Text( labelText, @@ -154,23 +194,11 @@ class TextInputWidget extends StatelessWidget { onChanged: onChange, focusNode: focusNode, autofocus: autoFocus, - style: TextStyle( - fontSize: 14.fSize, - height: 21 / 14, - fontWeight: FontWeight.w500, - color: AppColors.textColor, - letterSpacing: -0.2, - ), + style: TextStyle(fontSize: 14.fSize, height: 21 / 14, fontWeight: FontWeight.w500, color: AppColors.textColor, letterSpacing: -0.2), decoration: InputDecoration( isDense: true, hintText: hintText, - hintStyle: TextStyle( - fontSize: 14.fSize, - height: 21 / 16, - fontWeight: FontWeight.w500, - color: Color(0xff898A8D), - letterSpacing: -0.2, - ), + hintStyle: TextStyle(fontSize: 14.fSize, height: 21 / 16, fontWeight: FontWeight.w500, color: Color(0xff898A8D), letterSpacing: -0.2), prefixIconConstraints: BoxConstraints(minWidth: 45.h), prefixIcon: prefix == null ? null diff --git a/pubspec.lock b/pubspec.lock index 5665d11..e2ebb3b 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -742,6 +742,14 @@ packages: url: "https://pub.dev" source: hosted version: "13.1.3" + hijri_gregorian_calendar: + dependency: "direct main" + description: + name: hijri_gregorian_calendar + sha256: "9d23b52192783c1ad134b1ac001be7977342cb579c6b380647b6494fbd464d29" + url: "https://pub.dev" + source: hosted + version: "0.0.4" html: dependency: transitive description: @@ -1636,5 +1644,5 @@ packages: source: hosted version: "6.5.0" sdks: - dart: ">=3.8.0-0 <4.0.0" + dart: ">=3.8.1 <4.0.0" flutter: ">=3.29.0" diff --git a/pubspec.yaml b/pubspec.yaml index 0ec8324..cfb94d4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -68,6 +68,7 @@ dependencies: web: any flutter_staggered_animations: ^1.1.1 smooth_corner: ^1.1.1 + hijri_gregorian_calendar: ^0.0.4 dev_dependencies: flutter_test: