From f55d82ddb3eec33d5ba9215b10e21070d3ffddc8 Mon Sep 17 00:00:00 2001 From: Sultan khan Date: Wed, 3 Sep 2025 09:29:19 +0300 Subject: [PATCH] bottom navigation --- assets/langs/ar-SA.json | 3 +- assets/langs/en-US.json | 3 +- lib/core/app_assets.dart | 9 +++ lib/generated/locale_keys.g.dart | 1 + lib/presentation/home/landing_page.dart | 2 + lib/theme/colors.dart | 2 + .../bottom_navigation/bottom_navigation.dart | 59 +++++++++++++++++++ 7 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 lib/widgets/bottom_navigation/bottom_navigation.dart diff --git a/assets/langs/ar-SA.json b/assets/langs/ar-SA.json index 0a7ad1b..99867f1 100644 --- a/assets/langs/ar-SA.json +++ b/assets/langs/ar-SA.json @@ -777,5 +777,6 @@ "continuePlan": "متابعة خطة العلاج؟", "aboutApp": "حول التطبيق", "dontHaveAccount": "ليس لديك حساب؟", - "loginOrRegister": "تسجيل الدخول أو التسجيل" + "loginOrRegister": "تسجيل الدخول أو التسجيل", + "myFiles" : "ملفاتي" } \ No newline at end of file diff --git a/assets/langs/en-US.json b/assets/langs/en-US.json index 4c2c5c0..3ab5259 100644 --- a/assets/langs/en-US.json +++ b/assets/langs/en-US.json @@ -773,5 +773,6 @@ "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?", - "loginOrRegister": "Login or Register" + "loginOrRegister": "Login or Register", + "myFiles": "My Files" } \ No newline at end of file diff --git a/lib/core/app_assets.dart b/lib/core/app_assets.dart index bfc1229..cdea2c9 100644 --- a/lib/core/app_assets.dart +++ b/lib/core/app_assets.dart @@ -54,6 +54,15 @@ class AppAssets { static const String add_icon = '$svgBasePath/add_icon.svg'; static const String livecare_icon = '$svgBasePath/livecare_icon.svg'; + //bottom navigation// + + static const String homeBottom = '$svgBasePath/home_bottom.svg'; + static const String bookAppoBottom = '$svgBasePath/book_appo_bottom.svg'; + static const String myFilesBottom = '$svgBasePath/my_files_bottom.svg'; + static const String toDoBottom = '$svgBasePath/todo_bottom.svg'; + static const String servicesBottom = '$svgBasePath/services_bottom.svg'; + + // PNGS // static const String hmg_logo = '$pngBasePath/hmg_logo.png'; static const String livecare_service = '$pngBasePath/livecare_service.png'; diff --git a/lib/generated/locale_keys.g.dart b/lib/generated/locale_keys.g.dart index 6ef6804..72832b1 100644 --- a/lib/generated/locale_keys.g.dart +++ b/lib/generated/locale_keys.g.dart @@ -776,5 +776,6 @@ abstract class LocaleKeys { static const aboutApp = 'aboutApp'; static const dontHaveAccount = 'dontHaveAccount'; static const loginOrRegister = 'loginOrRegister'; + static const myFiles = 'myFiles'; } diff --git a/lib/presentation/home/landing_page.dart b/lib/presentation/home/landing_page.dart index 0397056..7c8e814 100644 --- a/lib/presentation/home/landing_page.dart +++ b/lib/presentation/home/landing_page.dart @@ -13,6 +13,7 @@ import 'package:hmg_patient_app_new/presentation/home/widgets/small_service_card 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:hmg_patient_app_new/widgets/bottom_navigation/bottom_navigation.dart'; import 'package:provider/provider.dart'; import '../../core/app_assets.dart'; @@ -285,6 +286,7 @@ class _LandingPageState extends State { ), ), ), + bottomNavigationBar: BottomNavigation(), ); }); } diff --git a/lib/theme/colors.dart b/lib/theme/colors.dart index 3eacbd6..ae272cb 100644 --- a/lib/theme/colors.dart +++ b/lib/theme/colors.dart @@ -44,4 +44,6 @@ static const Color alertLightColor = Color(0xFFD48D0526); static const Color infoLightColor = Color(0xFF0B85F726); static const Color warningLightColor = Color(0xFFFFCC0026); static const Color greyLightColor = Color(0xFFEFEFF026); + +static const Color bottomNAVBorder = Color(0xFFEEEEEE); } diff --git a/lib/widgets/bottom_navigation/bottom_navigation.dart b/lib/widgets/bottom_navigation/bottom_navigation.dart new file mode 100644 index 0000000..a052bc6 --- /dev/null +++ b/lib/widgets/bottom_navigation/bottom_navigation.dart @@ -0,0 +1,59 @@ +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/utils.dart'; +import 'package:hmg_patient_app_new/generated/locale_keys.g.dart'; +import 'package:hmg_patient_app_new/theme/colors.dart'; + +class BottomNavigation extends StatelessWidget { + const BottomNavigation({super.key}); + + @override + Widget build(BuildContext context) { + return Container( + padding: const EdgeInsets.symmetric(vertical: 12), + decoration: const BoxDecoration( + color: Colors.white, + border: Border( + top: BorderSide(color: AppColors.bottomNAVBorder, width: 0.5), + ), + + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + _buildNavItem(AppAssets.homeBottom, LocaleKeys.home.tr()), + _buildNavItem(AppAssets.myFilesBottom, LocaleKeys.myFiles.tr()), + _buildNavItem(AppAssets.bookAppoBottom, LocaleKeys.appointment.tr(), iconSize: 32), + _buildNavItem(AppAssets.toDoBottom, LocaleKeys.todoList.tr()), + _buildNavItem(AppAssets.servicesBottom, LocaleKeys.services2.tr()), + ], + ), + ); + } + + Widget _buildNavItem(String iconName, String label,{ double iconSize = 24}) { + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + padding: const EdgeInsets.all(10), + child: Utils.buildSvgWithAssets( + icon: iconName, + height: iconSize, + width: iconSize + ), + ), + // const SizedBox(height: 4), + Text( + label, + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: Colors.black87, + ), + ), + ], + ); + } +}