diff --git a/assets/images/png/livecare_service.png b/assets/images/png/livecare_service.png new file mode 100644 index 0000000..d900403 Binary files /dev/null and b/assets/images/png/livecare_service.png differ diff --git a/assets/images/svg/add_icon.svg b/assets/images/svg/add_icon.svg new file mode 100644 index 0000000..f89b62a --- /dev/null +++ b/assets/images/svg/add_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svg/contact_icon.svg b/assets/images/svg/contact_icon.svg new file mode 100644 index 0000000..695ab03 --- /dev/null +++ b/assets/images/svg/contact_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svg/emergency_services_icon.svg b/assets/images/svg/emergency_services_icon.svg new file mode 100644 index 0000000..e6dabad --- /dev/null +++ b/assets/images/svg/emergency_services_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svg/health_calculators_icon.svg b/assets/images/svg/health_calculators_icon.svg new file mode 100644 index 0000000..b3a8913 --- /dev/null +++ b/assets/images/svg/health_calculators_icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/images/svg/home_calendar_icon.svg b/assets/images/svg/home_calendar_icon.svg new file mode 100644 index 0000000..8701a13 --- /dev/null +++ b/assets/images/svg/home_calendar_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svg/indoor_nav_icon.svg b/assets/images/svg/indoor_nav_icon.svg new file mode 100644 index 0000000..566a7e0 --- /dev/null +++ b/assets/images/svg/indoor_nav_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svg/insurance_update.svg b/assets/images/svg/insurance_update.svg new file mode 100644 index 0000000..49a3e29 --- /dev/null +++ b/assets/images/svg/insurance_update.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svg/lab_result_icon.svg b/assets/images/svg/lab_result_icon.svg new file mode 100644 index 0000000..245048d --- /dev/null +++ b/assets/images/svg/lab_result_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/images/svg/livecare_icon.svg b/assets/images/svg/livecare_icon.svg new file mode 100644 index 0000000..553f1a5 --- /dev/null +++ b/assets/images/svg/livecare_icon.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/assets/images/svg/my_prescription_icon.svg b/assets/images/svg/my_prescription_icon.svg new file mode 100644 index 0000000..4c9eaa4 --- /dev/null +++ b/assets/images/svg/my_prescription_icon.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/images/svg/search_doctor_icon.svg b/assets/images/svg/search_doctor_icon.svg new file mode 100644 index 0000000..d19aed7 --- /dev/null +++ b/assets/images/svg/search_doctor_icon.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 8ff2eb4..0a7ad1b 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -776,5 +776,6 @@ "validPassportNumber": "يرجى إدخال رقم جواز سفر صالح", "continuePlan": "متابعة خطة العلاج؟", "aboutApp": "حول التطبيق", - "dontHaveAccount": "ليس لديك حساب؟" + "dontHaveAccount": "ليس لديك حساب؟", + "loginOrRegister": "تسجيل الدخول أو التسجيل" } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 423c67b..4c2c5c0 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -772,5 +772,6 @@ "aboutApp": "About the app", "aboutPoints": "Online Appointment Booking & rescheduling, Insurance approval status, Find A doctor, Ask your doctor, Medical prescriptions, Lab results, Hospitals contact numbers, Doctor profiles, Hospitals locations, Pharmacies Locations, Hospital's Virtual Tour, Official Social Media, Vaccines Schedule, Health Calculators, Other Services", "termsConditions": "These Online Services Terms of Use (Service Terms) govern certain online services provided by Dr Sulaiman Al Habib Medical Services Group Company (HMG, we, us, our)...", - "dontHaveAccount": "Don't have an account?" + "dontHaveAccount": "Don't have an account?", + "loginOrRegister": "Login or Register" } \ No newline at end of file diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 5728064..4641728 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -3,7 +3,6 @@ PODS: - Flutter - connectivity_plus (0.0.1): - Flutter - - CryptoSwift (1.8.4) - device_calendar (0.0.1): - Flutter - device_info_plus (0.0.1): @@ -76,9 +75,6 @@ PODS: - nanopb (~> 3.30910.0) - FLAnimatedImage (1.0.17) - Flutter (1.0.0) - - flutter_callkit_incoming (0.0.1): - - CryptoSwift - - Flutter - flutter_inappwebview_ios (0.0.1): - Flutter - flutter_inappwebview_ios/Core (= 0.0.1) @@ -220,7 +216,6 @@ DEPENDENCIES: - firebase_messaging (from `.symlinks/plugins/firebase_messaging/ios`) - FLAnimatedImage - Flutter (from `Flutter`) - - flutter_callkit_incoming (from `.symlinks/plugins/flutter_callkit_incoming/ios`) - flutter_inappwebview_ios (from `.symlinks/plugins/flutter_inappwebview_ios/ios`) - flutter_ios_voip_kit_karmm (from `.symlinks/plugins/flutter_ios_voip_kit_karmm/ios`) - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) @@ -245,7 +240,6 @@ DEPENDENCIES: SPEC REPOS: trunk: - - CryptoSwift - DKImagePickerController - DKPhotoGallery - Firebase @@ -294,8 +288,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/firebase_messaging/ios" Flutter: :path: Flutter - flutter_callkit_incoming: - :path: ".symlinks/plugins/flutter_callkit_incoming/ios" flutter_inappwebview_ios: :path: ".symlinks/plugins/flutter_inappwebview_ios/ios" flutter_ios_voip_kit_karmm: @@ -336,40 +328,38 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/url_launcher_ios/ios" SPEC CHECKSUMS: - audio_session: 9bb7f6c970f21241b19f5a3658097ae459681ba0 - connectivity_plus: cb623214f4e1f6ef8fe7403d580fdad517d2f7dd - CryptoSwift: e64e11850ede528a02a0f3e768cec8e9d92ecb90 - device_calendar: b55b2c5406cfba45c95a59f9059156daee1f74ed - device_info_plus: 21fcca2080fbcd348be798aa36c3e5ed849eefbe + audio_session: 19e9480dbdd4e5f6c4543826b2e8b0e4ab6145fe + connectivity_plus: 2a701ffec2c0ae28a48cf7540e279787e77c447d + device_calendar: 9cb33f88a02e19652ec7b8b122ca778f751b1f7b + device_info_plus: bf2e3232933866d73fe290f2942f2156cdd10342 DKImagePickerController: 946cec48c7873164274ecc4624d19e3da4c1ef3c DKPhotoGallery: b3834fecb755ee09a593d7c9e389d8b5d6deed60 - file_picker: a0560bc09d61de87f12d246fc47d2119e6ef37be + file_picker: b159e0c068aef54932bb15dc9fd1571818edaf49 Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e - firebase_core: 995454a784ff288be5689b796deb9e9fa3601818 - firebase_messaging: f4a41dd102ac18b840eba3f39d67e77922d3f707 + firebase_core: 99a37263b3c27536063a7b601d9e2a49400a433c + firebase_messaging: bf6697c61f31c7cc0f654131212ff04c0115c2c7 FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4 FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843 FirebaseMessaging: 3b26e2cee503815e01c3701236b020aa9b576f09 FLAnimatedImage: bbf914596368867157cc71b38a8ec834b3eeb32b Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7 - flutter_callkit_incoming: cb8138af67cda6dd981f7101a5d709003af21502 - flutter_inappwebview_ios: b89ba3482b96fb25e00c967aae065701b66e9b99 - flutter_ios_voip_kit_karmm: 371663476722afb631d5a13a39dee74c56c1abd0 - flutter_local_notifications: a5a732f069baa862e728d839dd2ebb904737effb - flutter_zoom_videosdk: df7353598a3f0ad081055166e12c992ac9218a8c - fluttertoast: 2c67e14dce98bbdb200df9e1acf610d7a6264ea1 - geolocator_apple: ab36aa0e8b7d7a2d7639b3b4e48308394e8cef5e + flutter_inappwebview_ios: 6f63631e2c62a7c350263b13fa5427aedefe81d4 + flutter_ios_voip_kit_karmm: 7ea37381a8841c92d186edf1f4604df5cc437579 + flutter_local_notifications: ff50f8405aaa0ccdc7dcfb9022ca192e8ad9688f + flutter_zoom_videosdk: 7ddc97d617b85aeace252165d2b5fc5638678c38 + fluttertoast: 21eecd6935e7064cc1fcb733a4c5a428f3f24f0f + geolocator_apple: 66b711889fd333205763b83c9dcf0a57a28c7afd Google-Maps-iOS-Utils: 66d6de12be1ce6d3742a54661e7a79cb317a9321 - google_maps_flutter_ios: 0291eb2aa252298a769b04d075e4a9d747ff7264 + google_maps_flutter_ios: e31555a04d1986ab130f2b9f24b6cdc861acc6d3 GoogleDataTransport: aae35b7ea0c09004c3797d53c8c41f66f219d6a7 GoogleMaps: 8939898920281c649150e0af74aa291c60f2e77d GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - health: f496ad838f4bd227191f5bc05060b6f6138b44fd - image_picker_ios: 7fe1ff8e34c1790d6fff70a32484959f563a928a - just_audio: 4e391f57b79cad2b0674030a00453ca5ce817eed - local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19 - manage_calendar_events: fe1541069431af035ced925ebd9def8b4b271254 + health: f1207cccb625fc2e8af263b09c29661bde7b0b7e + image_picker_ios: c560581cceedb403a6ff17f2f816d7fea1421fc1 + just_audio: a42c63806f16995daf5b219ae1d679deb76e6a79 + local_auth_darwin: fa4b06454df7df8e97c18d7ee55151c57e7af0de + manage_calendar_events: 9b2889799340398027b3e3f5c4891d41599ec257 MapboxCommon: 119f3759f7dc9457f0695848108ab323eb643cb4 MapboxCoreMaps: ca17f67baced23f8c952166ac6314c35bad3f66c MapboxCoreNavigation: 3be9990fae3ed732a101001746d0e3b4234ec023 @@ -381,21 +371,21 @@ SPEC CHECKSUMS: MapboxSpeech: cd25ef99c3a3d2e0da72620ff558276ea5991a77 nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: af8e2ca6888548050f16fa2f1938db7b5a5df499 - path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 - permission_handler_apple: 4ed2196e43d0651e8ff7ca3483a069d469701f2d + package_info_plus: c0502532a26c7662a62a356cebe2692ec5fe4ec4 + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 + permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2 Polyline: 2a1f29f87f8d9b7de868940f4f76deb8c678a5b1 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 SDWebImage: 9f177d83116802728e122410fb25ad88f5c7608a - share_plus: 50da8cb520a8f0f65671c6c6a99b3617ed10a58a - shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 + share_plus: 8b6f8b3447e494cca5317c8c3073de39b3600d1f + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 Solar-dev: 4612dc9878b9fed2667d23b327f1d4e54e16e8d0 - sqflite_darwin: 20b2a3a3b70e43edae938624ce550a3cbf66a3d0 + sqflite_darwin: 5a7236e3b501866c1c9befc6771dfd73ffb8702d SwiftyGif: 706c60cf65fa2bc5ee0313beece843c8eb8194d4 Turf: aa2ede4298009639d10db36aba1a7ebaad072a5e - url_launcher_ios: 694010445543906933d732453a59da0a173ae33d + url_launcher_ios: 5334b05cef931de560670eeae103fd3e431ac3fe ZoomVideoSDK: 94e939820e57a075c5e712559f927017da0de06a PODFILE CHECKSUM: ac23c99fc61c3e92ed1c20a19299a1205568c016 -COCOAPODS: 1.16.2 +COCOAPODS: 1.15.2 diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index d56bc78..bfc1229 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -42,12 +42,22 @@ class AppAssets { static const String birthday_cake = '$svgBasePath/birthday-cake.svg'; static const String password_validation = '$svgBasePath/password-validation.svg'; static const String cloud_logo = '$svgBasePath/cloud_logo.svg'; - - - + static const String contact_icon = '$svgBasePath/contact_icon.svg'; + static const String emergency_services_icon = '$svgBasePath/emergency_services_icon.svg'; + static const String indoor_nav_icon = '$svgBasePath/indoor_nav_icon.svg'; + static const String search_doctor_icon = '$svgBasePath/search_doctor_icon.svg'; + static const String health_calculators_icon = '$svgBasePath/health_calculators_icon.svg'; + static const String lab_result_icon = '$svgBasePath/lab_result_icon.svg'; + static const String my_prescription_icon = '$svgBasePath/my_prescription_icon.svg'; + static const String insurance_update_icon = '$svgBasePath/insurance_update.svg'; + static const String home_calendar_icon = '$svgBasePath/home_calendar_icon.svg'; + static const String add_icon = '$svgBasePath/add_icon.svg'; + static const String livecare_icon = '$svgBasePath/livecare_icon.svg'; // PNGS // static const String hmg_logo = '$pngBasePath/hmg_logo.png'; + static const String livecare_service = '$pngBasePath/livecare_service.png'; + } class AppAnimations { diff --git a/lib/core/app_state.dart b/lib/core/app_state.dart index 4bed676..8d495e0 100644 --- a/lib/core/app_state.dart +++ b/lib/core/app_state.dart @@ -13,7 +13,7 @@ class AppState { //Tokens - bool isAuthenticated = false; + bool isAuthenticated = true; set setIsAuthenticated(v) => isAuthenticated = v; diff --git a/lib/extensions/string_extensions.dart b/lib/extensions/string_extensions.dart index 2e74d25..b9d4ba8 100644 --- a/lib/extensions/string_extensions.dart +++ b/lib/extensions/string_extensions.dart @@ -26,7 +26,7 @@ extension EmailValidator on String { fontStyle: fontStyle ?? FontStyle.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, - letterSpacing: 0.64, + letterSpacing: -0.4, ), ); @@ -39,7 +39,7 @@ extension EmailValidator on String { fontStyle: fontStyle ?? FontStyle.normal, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, - letterSpacing: 0.64, + letterSpacing: -0.4, decoration: isUnderLine ? TextDecoration.underline : null, decorationColor: color ?? AppColors.blackColor), ); @@ -53,7 +53,7 @@ extension EmailValidator on String { fontSize: 11.fSize, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), color: color ?? AppColors.blackColor, - letterSpacing: letterSpacing, + letterSpacing: -0.4, decoration: isUnderLine ? TextDecoration.underline : null, ), ); @@ -66,7 +66,7 @@ extension EmailValidator on String { fontSize: 12.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, - letterSpacing: 0.64, + letterSpacing: -0.4, decorationColor: isUnderLine ? AppColors.blackColor : null, decoration: isUnderLine ? TextDecoration.underline : null, ), @@ -81,7 +81,7 @@ extension EmailValidator on String { fontSize: 12.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, - letterSpacing: 0.64, + letterSpacing: -0.4, decoration: isUnderLine ? TextDecoration.underline : null, ), ); @@ -129,7 +129,7 @@ extension EmailValidator on String { fontSize: 13.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, - letterSpacing: 0.64, + letterSpacing: -0.4, decoration: isUnderLine ? TextDecoration.underline : null), ); @@ -140,7 +140,7 @@ extension EmailValidator on String { style: TextStyle( color: color ?? AppColors.blackColor, fontSize: 14.fSize, - letterSpacing: 0.64, + letterSpacing: -0.4, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), decoration: isUnderLine ? TextDecoration.underline : null), ); @@ -152,7 +152,7 @@ extension EmailValidator on String { style: TextStyle( color: color ?? AppColors.blackColor, fontSize: 15.fSize, - letterSpacing: 0.64, + letterSpacing: -0.4, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal), decoration: isUnderLine ? TextDecoration.underline : null), ); @@ -172,7 +172,7 @@ extension EmailValidator on String { style: TextStyle( color: color ?? AppColors.blackColor, fontSize: 16.fSize, - letterSpacing: 0.64, + letterSpacing: -0.4, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, decoration: isUnderLine ? TextDecoration.underline : null, ), @@ -181,53 +181,53 @@ extension EmailValidator on String { Widget toText17({Color? color, bool isBold = false, bool isCenter = false}) => Text( this, textAlign: isCenter ? TextAlign.center : null, - style: TextStyle(color: color ?? AppColors.blackColor, fontSize: 17.fSize, letterSpacing: 0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), + style: TextStyle(color: color ?? AppColors.blackColor, fontSize: 17.fSize, letterSpacing: -0.4, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), ); Widget toText18({Color? color, bool isBold = false, bool isCenter = false, int? maxlines}) => Text( maxLines: maxlines, textAlign: isCenter ? TextAlign.center : null, this, - style: TextStyle(fontSize: 18.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: 0.64), + style: TextStyle(fontSize: 18.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: -0.4), ); Widget toText19({Color? color, bool isBold = false}) => Text( this, - style: TextStyle(fontSize: 19.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: 0.64), + style: TextStyle(fontSize: 19.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: -0.4), ); Widget toText20({Color? color, bool isBold = false}) => Text( this, - style: TextStyle(fontSize: 20.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: 0.64), + style: TextStyle(fontSize: 20.fSize, fontWeight: isBold ? FontWeight.bold : FontWeight.normal, color: color ?? AppColors.blackColor, letterSpacing: -0.4), ); Widget toText21({Color? color, bool isBold = false, FontWeight? weight, int? maxlines}) => Text( this, maxLines: maxlines, - style: TextStyle(color: color ?? AppColors.blackColor, fontSize: 21.fSize, letterSpacing: 0.64, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal)), + style: TextStyle(color: color ?? AppColors.blackColor, fontSize: 21.fSize, letterSpacing: -0.4, fontWeight: weight ?? (isBold ? FontWeight.bold : FontWeight.normal)), ); Widget toText22({Color? color, bool isBold = false, bool isCenter = false}) => Text( this, textAlign: isCenter ? TextAlign.center : null, - style: TextStyle(height: 1, color: color ?? AppColors.blackColor, fontSize: 22.fSize, letterSpacing: 0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), + style: TextStyle(height: 1, color: color ?? AppColors.blackColor, fontSize: 22.fSize, letterSpacing: -0.4, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), ); Widget toText24({Color? color, bool isBold = false, bool isCenter = false}) => Text( this, textAlign: isCenter ? TextAlign.center : null, - style: TextStyle(height: 23 / 24, color: color ?? AppColors.blackColor, fontSize: 24.fSize, letterSpacing: 0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), + style: TextStyle(height: 23 / 24, color: color ?? AppColors.blackColor, fontSize: 24.fSize, letterSpacing: -0.4, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), ); Widget toText32({Color? color, bool isBold = false, bool isCenter = false}) => Text( this, textAlign: isCenter ? TextAlign.center : null, - style: TextStyle(height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 32.fSize, letterSpacing: 0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), + style: TextStyle(height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 32.fSize, letterSpacing: -0.4, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), ); Widget toText44({Color? color, bool isBold = false}) => Text( this, - style: TextStyle(height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 44.fSize, letterSpacing: 0.64, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), + style: TextStyle(height: 32 / 32, color: color ?? AppColors.blackColor, fontSize: 44.fSize, letterSpacing: -0.4, fontWeight: isBold ? FontWeight.bold : FontWeight.normal), ); Widget toSectionHeading({String upperHeading = "", String lowerHeading = ""}) { diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index b2d7492..6ef6804 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -775,5 +775,6 @@ abstract class LocaleKeys { static const continuePlan = 'continuePlan'; static const aboutApp = 'aboutApp'; static const dontHaveAccount = 'dontHaveAccount'; + static const loginOrRegister = 'loginOrRegister'; } diff --git a/lib/main.dart b/lib/main.dart index 1996653..2ad15e7 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -7,6 +7,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:hmg_patient_app_new/core/app_state.dart'; import 'package:hmg_patient_app_new/providers/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/providers/bottom_navigation_provider.dart'; import 'package:hmg_patient_app_new/routes/app_routes.dart'; import 'package:hmg_patient_app_new/theme/app_theme.dart'; import 'package:logger/logger.dart'; @@ -62,6 +63,9 @@ void main() async { path: 'assets/langs', fallbackLocale: Locale('en', 'US'), child: MultiProvider(providers: [ + ChangeNotifierProvider( + create: (_) => BottomNavigationProvider(), + ), ChangeNotifierProvider( create: (_) => AuthenticationViewModel(), ), @@ -90,7 +94,7 @@ class MyApp extends StatelessWidget { return MediaQuery( data: MediaQuery.of(context).copyWith( textScaler: TextScaler.linear(1.0), - ), //set desired text scale factor here + ), child: mchild!); }, showSemanticsDebugger: false, diff --git a/lib/presentation/authantication/login.dart b/lib/presentation/authantication/login.dart index 6e52eb8..b000f13 100644 --- a/lib/presentation/authantication/login.dart +++ b/lib/presentation/authantication/login.dart @@ -34,6 +34,7 @@ class _LoginScreen extends State { return Sizer(// Wrap with Sizer builder: (context, orientation, deviceType) { return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, appBar: CustomAppBar( onBackPressed: () { // Navigator.of(context).pop(); @@ -56,17 +57,17 @@ class _LoginScreen extends State { children: [ Utils.showLottie(context: context, assetPath: AppAnimations.login, width: 45.w, height: 22.h, repeat: true, fit: BoxFit.cover), SizedBox(height: 19.h), // Adjusted to sizer unit - LocaleKeys.welcomeToDrSulaiman.tr().toText22(), - Text( - LocaleKeys.welcomeToDrSulaiman.tr(), - style: context.dynamicTextStyle( - fontSize: 22, - fontWeight: FontWeight.w600, - color: AppColors.textColor, - letterSpacing: -0.4, - height: 40 / 28, - ), - ), + LocaleKeys.welcomeToDrSulaiman.tr().toText22(isBold: true, color: AppColors.textColor), + // Text( + // LocaleKeys.welcomeToDrSulaiman.tr(), + // style: context.dynamicTextStyle( + // fontSize: 22, + // fontWeight: FontWeight.w600, + // color: AppColors.textColor, + // letterSpacing: -0.4, + // height: 40 / 28, + // ), + // ), SizedBox(height: 4.h), // Adjusted to sizer unit (approx 32px) TextInputWidget( labelText: "${LocaleKeys.nationalId.tr()} / ${LocaleKeys.fileNo.tr()}", diff --git a/lib/presentation/home/data/landing_page_data.dart b/lib/presentation/home/data/landing_page_data.dart new file mode 100644 index 0000000..af43b9f --- /dev/null +++ b/lib/presentation/home/data/landing_page_data.dart @@ -0,0 +1,165 @@ +import 'dart:ui'; + +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/presentation/home/data/service_card_data.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class LandingPageData { + static List getNotLoggedInServiceCardsList = [ + ServiceCardData( + icon: AppAssets.emergency_services_icon, + title: "Emergency", + subtitle: "Services", + backgroundColor: AppColors.primaryRedColor, + iconColor: AppColors.whiteColor, + textColor: AppColors.whiteColor, + isBold: true, + ), + ServiceCardData( + icon: AppAssets.indoor_nav_icon, + title: "Indoor", + subtitle: "Navigation", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.search_doctor_icon, + title: "Search", + subtitle: "Doctor", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.health_calculators_icon, + title: "Health", + subtitle: "Calculators", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.health_calculators_icon, + title: "Health", + subtitle: "Converters", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.health_calculators_icon, + title: "Parking", + subtitle: "Guide", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ]; + + static List getLoggedInServiceCardsList = [ + ServiceCardData( + icon: AppAssets.emergency_services_icon, + title: "Emergency", + subtitle: "Services", + backgroundColor: AppColors.primaryRedColor, + iconColor: AppColors.whiteColor, + textColor: AppColors.whiteColor, + isBold: true, + ), + ServiceCardData( + icon: AppAssets.lab_result_icon, + title: "My Lab", + subtitle: "Results", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.my_prescription_icon, + title: "My", + subtitle: "Prescriptions", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.insurance_update_icon, + title: "Insurance", + subtitle: "Update", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.insurance_update_icon, + title: "My", + subtitle: "Doctors", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.insurance_update_icon, + title: "My Sick", + subtitle: "Leaves", + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ]; + + static List getServiceCardsList = [ + ServiceCardData( + icon: AppAssets.livecare_service, + title: "LiveCare", + subtitle: "Explore our app, View our services and offers", + largeCardIcon: AppAssets.livecare_icon, + backgroundColor: Colors.transparent, + iconColor: Colors.transparent, + textColor: Colors.transparent, + isBold: true, + ), + ServiceCardData( + icon: AppAssets.lab_result_icon, + title: "Dermatology", + subtitle: "Explore our app, View our services and offers", + largeCardIcon: AppAssets.livecare_icon, + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.my_prescription_icon, + title: "Home Health Care", + subtitle: "Explore our app, View our services and offers", + largeCardIcon: AppAssets.livecare_icon, + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ServiceCardData( + icon: AppAssets.insurance_update_icon, + title: "Pharmacy", + subtitle: "Explore our app, View our services and offers", + largeCardIcon: AppAssets.livecare_icon, + backgroundColor: AppColors.whiteColor, + iconColor: AppColors.blackColor, + textColor: AppColors.blackColor, + isBold: false, + ), + ]; +} diff --git a/lib/presentation/home/data/service_card_data.dart b/lib/presentation/home/data/service_card_data.dart new file mode 100644 index 0000000..856a15e --- /dev/null +++ b/lib/presentation/home/data/service_card_data.dart @@ -0,0 +1,25 @@ +import 'dart:ui'; + +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class ServiceCardData { + final String icon; + final String title; + final String subtitle; + final Color iconColor; + final Color textColor; + final Color backgroundColor; + final bool isBold; + final String largeCardIcon; + + ServiceCardData({ + this.icon = "", + this.title = "", + this.subtitle = "", + this.largeCardIcon = "", + this.backgroundColor = AppColors.whiteColor, + this.iconColor = AppColors.blackColor, + this.textColor = AppColors.blackColor, + this.isBold = false, + }); +} diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index a80c25f..0397056 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -1,6 +1,23 @@ +import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_staggered_animations/flutter_staggered_animations.dart'; +import 'package:hmg_patient_app_new/core/app_state.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/int_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/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/presentation/home/data/landing_page_data.dart'; +import 'package:hmg_patient_app_new/presentation/home/widgets/large_service_card.dart'; +import 'package:hmg_patient_app_new/presentation/home/widgets/small_service_card.dart'; import 'package:hmg_patient_app_new/providers/authentication_view_model.dart'; +import 'package:hmg_patient_app_new/providers/bottom_navigation_provider.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; +import 'package:provider/provider.dart'; + +import '../../core/app_assets.dart'; +import '../../core/utils/utils.dart'; +import '../../widgets/buttons/custom_button.dart'; class LandingPage extends StatefulWidget { const LandingPage({super.key}); @@ -14,15 +31,261 @@ class _LandingPageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - body: Column( - children: [ - Padding( - padding: const EdgeInsets.all(64.0), - child: "Login".toText18(color: Colors.black), + return Consumer(builder: (context, navigationProvider, child) { + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + body: Padding( + padding: EdgeInsets.all(24.h), + child: SingleChildScrollView( + child: Column( + children: [ + Padding( + padding: EdgeInsets.only(top: 50.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + CustomButton( + text: LocaleKeys.loginOrRegister.tr(context: context), + onPressed: () { + Navigator.of(context).pushReplacement( + MaterialPageRoute(builder: (BuildContext context) => LandingPage()), + ); + }, + backgroundColor: Color(0xffFEE9EA), + borderColor: Color(0xffFEE9EA), + textColor: Color(0xffED1C2B), + fontSize: 16, + fontWeight: FontWeight.w500, + borderRadius: 12, + padding: EdgeInsets.fromLTRB(10, 0, 10, 0), + height: 50, + ), + Utils.buildSvgWithAssets( + icon: AppAssets.contact_icon, + width: 24, + height: 24, + ), + ], + ), + ), + SizedBox(height: 16.h), + AppState().isAuthenticated + ? Column( + children: [ + Container( + width: double.infinity, + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24, + ), + child: Padding( + padding: EdgeInsets.all(12.h), + child: Container( + child: Column( + children: [ + Utils.buildSvgWithAssets(icon: AppAssets.home_calendar_icon, width: 32.h, height: 32.h), + SizedBox(height: 12.h), + "You do not have any upcoming appointment. Please book an appointment".toText12(isCenter: true), + SizedBox(height: 12.h), + CustomButton( + text: LocaleKeys.bookAppo.tr(context: context), + onPressed: () { + Navigator.of(context).pushReplacement( + MaterialPageRoute(builder: (BuildContext context) => LandingPage()), + ); + }, + backgroundColor: Color(0xffFEE9EA), + borderColor: Color(0xffFEE9EA), + textColor: Color(0xffED1C2B), + fontSize: 14, + fontWeight: FontWeight.w500, + borderRadius: 12, + padding: EdgeInsets.fromLTRB(10, 0, 10, 0), + height: 40, + icon: AppAssets.add_icon, + iconColor: AppColors.primaryRedColor, + ), + ], + ), + ), + ), + ), + SizedBox(height: 12.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + "Quick Links".toText14(isBold: true), + Row( + children: [ + "View medical file".toText12(color: AppColors.primaryRedColor), + SizedBox(width: 2.h), + Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h), + ], + ), + ], + ), + SizedBox(height: 12.h), + Container( + height: 127.h, + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24, + ), + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + children: [ + Expanded( + child: ListView.separated( + scrollDirection: Axis.horizontal, + itemCount: LandingPageData.getLoggedInServiceCardsList.length, + shrinkWrap: true, + padding: const EdgeInsets.only(left: 0, right: 8), + itemBuilder: (context, index) { + return AnimationConfiguration.staggeredList( + position: index, + duration: const Duration(milliseconds: 1000), + child: SlideAnimation( + horizontalOffset: 100.0, + child: FadeInAnimation( + child: SmallServiceCard( + icon: LandingPageData.getLoggedInServiceCardsList[index].icon, + title: LandingPageData.getLoggedInServiceCardsList[index].title, + subtitle: LandingPageData.getLoggedInServiceCardsList[index].subtitle, + iconColor: LandingPageData.getLoggedInServiceCardsList[index].iconColor, + textColor: LandingPageData.getLoggedInServiceCardsList[index].textColor, + backgroundColor: LandingPageData.getLoggedInServiceCardsList[index].backgroundColor, + isBold: LandingPageData.getLoggedInServiceCardsList[index].isBold, + ), + ), + ), + ); + }, + separatorBuilder: (BuildContext cxt, int index) => 0.width, + ), + ), + ], + ), + ), + ) + ], + ) + : Container( + height: 127.h, + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: AppColors.whiteColor, + borderRadius: 24, + ), + child: Padding( + padding: EdgeInsets.all(16.h), + child: Column( + children: [ + Expanded( + child: ListView.separated( + scrollDirection: Axis.horizontal, + itemCount: LandingPageData.getNotLoggedInServiceCardsList.length, + shrinkWrap: true, + padding: const EdgeInsets.only(left: 0, right: 8), + itemBuilder: (context, index) { + return AnimationConfiguration.staggeredList( + position: index, + duration: const Duration(milliseconds: 1000), + child: SlideAnimation( + horizontalOffset: 100.0, + child: FadeInAnimation( + child: SmallServiceCard( + icon: LandingPageData.getNotLoggedInServiceCardsList[index].icon, + title: LandingPageData.getNotLoggedInServiceCardsList[index].title, + subtitle: LandingPageData.getNotLoggedInServiceCardsList[index].subtitle, + iconColor: LandingPageData.getNotLoggedInServiceCardsList[index].iconColor, + textColor: LandingPageData.getNotLoggedInServiceCardsList[index].textColor, + backgroundColor: LandingPageData.getNotLoggedInServiceCardsList[index].backgroundColor, + isBold: LandingPageData.getNotLoggedInServiceCardsList[index].isBold, + ), + ), + ), + ); + }, + separatorBuilder: (BuildContext cxt, int index) => 0.width, + ), + ), + ], + ), + ), + ), + SizedBox(height: 16.h), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + "Services".toText14(isBold: true), + Row( + children: [ + "View all services".toText12(color: AppColors.primaryRedColor), + SizedBox(width: 2.h), + Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h), + ], + ), + ], + ), + SizedBox(height: 16.h), + SizedBox( + height: 325.h, + child: Column( + children: [ + Expanded( + child: ListView.separated( + scrollDirection: Axis.horizontal, + itemCount: LandingPageData.getServiceCardsList.length, + shrinkWrap: true, + padding: const EdgeInsets.only(left: 0, right: 8), + itemBuilder: (context, index) { + return AnimationConfiguration.staggeredList( + position: index, + duration: const Duration(milliseconds: 1000), + child: SlideAnimation( + horizontalOffset: 100.0, + child: FadeInAnimation( + child: LargeServiceCard( + image: LandingPageData.getServiceCardsList[index].icon, + title: LandingPageData.getServiceCardsList[index].title, + subtitle: LandingPageData.getServiceCardsList[index].subtitle, + icon: LandingPageData.getServiceCardsList[index].largeCardIcon, + ), + ), + ), + ); + }, + separatorBuilder: (BuildContext cxt, int index) => 0.width, + ), + ), + ], + ), + ), + SizedBox(height: 16.h), + AppState().isAuthenticated + ? Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + "My Balance".toText14(isBold: true), + Row( + children: [ + "View all services".toText12(color: AppColors.primaryRedColor), + SizedBox(width: 2.h), + Icon(Icons.arrow_forward_ios, color: AppColors.primaryRedColor, size: 10.h), + ], + ), + ], + ), + ], + ) + : SizedBox(), + ], + ), ), - ], - ), - ); + ), + ); + }); } } diff --git a/lib/presentation/home/widgets/large_service_card.dart b/lib/presentation/home/widgets/large_service_card.dart new file mode 100644 index 0000000..8318798 --- /dev/null +++ b/lib/presentation/home/widgets/large_service_card.dart @@ -0,0 +1,77 @@ +import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_assets.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.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/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/widgets/buttons/custom_button.dart'; + +import '../../../core/utils/utils.dart'; +import '../../../theme/colors.dart'; + +class LargeServiceCard extends StatelessWidget { + final String image; + final String icon; + final String title; + final String subtitle; + + LargeServiceCard({ + super.key, + this.image = "", + this.icon = "", + this.title = "", + this.subtitle = "", + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 3.h), + child: Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: Colors.transparent, + borderRadius: 16, + ), + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 8.h), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset(AppAssets.livecare_service, width: 220.h, height: 220.h, fit: BoxFit.contain), + SizedBox(height: 3.h), + Row( + children: [ + Utils.buildSvgWithAssets(icon: icon, width: 24.h, height: 24.h), + title.toText14(color: AppColors.blackColor, isBold: true), + ], + ), + SizedBox(width: 220.h, child: subtitle.toText11(color: AppColors.blackColor)), + SizedBox(height: 6.h), + SizedBox( + width: 220.h, + child: CustomButton( + text: LocaleKeys.bookNow.tr(context: context), + onPressed: () { + // Navigator.of(context).pushReplacement( + // MaterialPageRoute(builder: (BuildContext context) => LandingPage()), + // ); + }, + backgroundColor: AppColors.borderOnlyColor, + borderColor: AppColors.borderOnlyColor, + textColor: AppColors.whiteColor, + fontSize: 14, + fontWeight: FontWeight.bold, + borderRadius: 12, + padding: EdgeInsets.fromLTRB(10, 0, 10, 0), + height: 40.h, + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/presentation/home/widgets/small_service_card.dart b/lib/presentation/home/widgets/small_service_card.dart new file mode 100644 index 0000000..a138db6 --- /dev/null +++ b/lib/presentation/home/widgets/small_service_card.dart @@ -0,0 +1,53 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/utils/size_utils.dart'; +import 'package:hmg_patient_app_new/extensions/string_extensions.dart'; +import 'package:hmg_patient_app_new/extensions/widget_extensions.dart'; + +import '../../../core/utils/utils.dart'; +import '../../../theme/colors.dart'; + +class SmallServiceCard extends StatelessWidget { + final String icon; + final String title; + final String subtitle; + final Color iconColor; + final Color textColor; + final Color backgroundColor; + final bool isBold; + + SmallServiceCard({ + super.key, + this.icon = "", + this.title = "", + this.subtitle = "", + this.backgroundColor = AppColors.whiteColor, + this.iconColor = AppColors.blackColor, + this.textColor = AppColors.blackColor, + this.isBold = false, + }); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.symmetric(horizontal: 3.h), + child: Container( + decoration: RoundedRectangleBorder().toSmoothCornerDecoration( + color: backgroundColor, + borderRadius: 16, + ), + child: Padding( + padding: EdgeInsets.all(12.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Utils.buildSvgWithAssets(icon: icon, iconColor: iconColor, width: 32.h, height: 32.h), + SizedBox(height: 6.h), + title.toText11(color: textColor, isBold: isBold, isCenter: true), + subtitle.toText11(color: textColor, isBold: isBold, isCenter: true), + ], + ), + ), + ), + ); + } +} diff --git a/lib/presentation/medical_file/medical_file_page.dart b/lib/presentation/medical_file/medical_file_page.dart new file mode 100644 index 0000000..dff7f75 --- /dev/null +++ b/lib/presentation/medical_file/medical_file_page.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class MedicalFilePage extends StatelessWidget { + const MedicalFilePage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + appBar: AppBar( + title: const Text('Appointments'), + backgroundColor: AppColors.bgScaffoldColor, + ), + body: const Center( + child: Text( + 'Appointments Page', + style: TextStyle(fontSize: 24), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/presentation/services/services_page.dart b/lib/presentation/services/services_page.dart new file mode 100644 index 0000000..24a259b --- /dev/null +++ b/lib/presentation/services/services_page.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class ServicesPage extends StatelessWidget { + const ServicesPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + appBar: AppBar( + title: const Text('Appointments'), + backgroundColor: AppColors.bgScaffoldColor, + ), + body: const Center( + child: Text( + 'Appointments Page', + style: TextStyle(fontSize: 24), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/presentation/todo/todo_page.dart b/lib/presentation/todo/todo_page.dart new file mode 100644 index 0000000..65b762f --- /dev/null +++ b/lib/presentation/todo/todo_page.dart @@ -0,0 +1,23 @@ +import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class ToDoPage extends StatelessWidget { + const ToDoPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: AppColors.bgScaffoldColor, + appBar: AppBar( + title: const Text('Appointments'), + backgroundColor: AppColors.bgScaffoldColor, + ), + body: const Center( + child: Text( + 'Appointments Page', + style: TextStyle(fontSize: 24), + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/providers/bottom_navigation_provider.dart b/lib/providers/bottom_navigation_provider.dart new file mode 100644 index 0000000..58a0d4e --- /dev/null +++ b/lib/providers/bottom_navigation_provider.dart @@ -0,0 +1,12 @@ +import 'package:flutter/material.dart'; + +class BottomNavigationProvider extends ChangeNotifier { + int _currentIndex = 0; + + int get currentIndex => _currentIndex; + + void setIndex(int index) { + _currentIndex = index; + notifyListeners(); + } +} \ No newline at end of file diff --git a/lib/splashPage.dart b/lib/splashPage.dart index 72a9213..eaec97b 100644 --- a/lib/splashPage.dart +++ b/lib/splashPage.dart @@ -39,8 +39,8 @@ class _SplashScreenState extends State { LocalNotification.init(onNotificationClick: (payload) {}); Navigator.of(context).pushReplacement( FadePage( - // page: LandingPage(), - page: LoginScreen(), + page: LandingPage(), + // page: LoginScreen(), ), ); }); diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart index 4987ffe..3eacbd6 100644 --- a/lib/theme/colors.dart +++ b/lib/theme/colors.dart @@ -20,6 +20,7 @@ class AppColors { // New UI Colors static const whiteColor = Color(0xFFffffff); + static const Color bgScaffoldColor = Color(0xffF8F8F8); static const Color primaryRedColor = Color(0xFFED1C2B); static const Color primaryRedBorderColor = Color(0xFFED1C2B); static const Color secondaryLightRedColor = Color(0xFFFEE9EA); diff --git a/lib/widgets/buttons/custom_button.dart b/lib/widgets/buttons/custom_button.dart index 7d50d09..e08189a 100644 --- a/lib/widgets/buttons/custom_button.dart +++ b/lib/widgets/buttons/custom_button.dart @@ -1,4 +1,5 @@ import 'package:flutter/material.dart'; +import 'package:hmg_patient_app_new/core/app_export.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/extensions/widget_extensions.dart'; @@ -18,6 +19,7 @@ class CustomButton extends StatelessWidget { final FontWeight fontWeight; final bool isDisabled; final Color iconColor; + final double height; CustomButton({ Key? key, @@ -35,6 +37,7 @@ class CustomButton extends StatelessWidget { this.isDisabled = false, this.icon, this.iconColor = Colors.white, + this.height = 56, }) : super(key: key); @override @@ -42,7 +45,7 @@ class CustomButton extends StatelessWidget { return GestureDetector( onTap: isDisabled ? null : onPressed, child: Container( - height: 56, + height: height, decoration: RoundedRectangleBorder().toSmoothCornerDecoration( color: isDisabled ? Colors.transparent : backgroundColor, borderRadius: borderRadius, @@ -64,8 +67,9 @@ class CustomButton extends StatelessWidget { Text( text, style: context.dynamicTextStyle( - fontSize: fontSize, + fontSize: fontSize.fSize, color: isDisabled ? textColor.withOpacity(0.5) : textColor, + letterSpacing: -0.4, fontWeight: fontWeight, ), ), diff --git a/pubspec.lock b/pubspec.lock index 0588d96..30afa54 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -508,6 +508,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.1" + flutter_staggered_animations: + dependency: "direct main" + description: + name: flutter_staggered_animations + sha256: "81d3c816c9bb0dca9e8a5d5454610e21ffb068aedb2bde49d2f8d04f75538351" + url: "https://pub.dev" + source: hosted + version: "1.1.1" flutter_svg: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 4f553c5..64a3c7e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -60,9 +60,10 @@ dependencies: dropdown_search: ^6.0.2 google_maps_flutter: ^2.12.3 flutter_zoom_videosdk: ^2.1.10 + flutter_staggered_animations: ^1.1.1 + smooth_corner: ^1.1.1 web: any - smooth_corner: ^1.1.1 dev_dependencies: flutter_test: @@ -85,32 +86,32 @@ flutter: fonts: - family: Poppins fonts: - - asset: assets/fonts/poppins/Poppins-Black.ttf - weight: 900 - - asset: assets/fonts/poppins/Poppins-ExtraBold.ttf - weight: 800 - - asset: assets/fonts/poppins/Poppins-Bold.ttf - weight: 700 +# - asset: assets/fonts/poppins/Poppins-Black.ttf +# weight: 900 +# - asset: assets/fonts/poppins/Poppins-ExtraBold.ttf +# weight: 800 +# - asset: assets/fonts/poppins/Poppins-Bold.ttf +# weight: 700 - asset: assets/fonts/poppins/Poppins-SemiBold.ttf weight: 600 - - asset: assets/fonts/poppins/Poppins-Medium.ttf - weight: 500 +# - asset: assets/fonts/poppins/Poppins-Medium.ttf +# weight: 500 - asset: assets/fonts/poppins/Poppins-Regular.ttf weight: 400 - - asset: assets/fonts/poppins/Poppins-Light.ttf - weight: 300 - - asset: assets/fonts/poppins/Poppins-ExtraLight.ttf - weight: 200 - - asset: assets/fonts/poppins/Poppins-Thin.ttf - weight: 100 +# - asset: assets/fonts/poppins/Poppins-Light.ttf +# weight: 300 +# - asset: assets/fonts/poppins/Poppins-ExtraLight.ttf +# weight: 200 +# - asset: assets/fonts/poppins/Poppins-Thin.ttf +# weight: 100 - family: GESSTwo fonts: - asset: assets/fonts/gess_two/GE_SS_Two_Bold.otf weight: 600 - - asset: assets/fonts/gess_two/GE_SS_Two_Medium.otf - weight: 500 +# - asset: assets/fonts/gess_two/GE_SS_Two_Medium.otf +# weight: 500 - asset: assets/fonts/gess_two/GE_SS_Two_Light.otf weight: 400