|  |  |  | 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/core/utils/utils.dart'; | 
					
						
							|  |  |  | import 'package:hmg_patient_app_new/extensions/string_extensions.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 { | 
					
						
							|  |  |  |   final int currentIndex; | 
					
						
							|  |  |  |   final ValueChanged<int> onTap; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const BottomNavigation({ | 
					
						
							|  |  |  |     super.key, | 
					
						
							|  |  |  |     required this.currentIndex, | 
					
						
							|  |  |  |     required this.onTap, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   @override | 
					
						
							|  |  |  |   Widget build(BuildContext context) { | 
					
						
							|  |  |  |     final items = [ | 
					
						
							|  |  |  |       BottomNavItem(icon: AppAssets.homeBottom, label: LocaleKeys.home.tr()), | 
					
						
							|  |  |  |       BottomNavItem(icon: AppAssets.myFilesBottom, label: LocaleKeys.myFiles.tr()), | 
					
						
							|  |  |  |       BottomNavItem( | 
					
						
							|  |  |  |         icon: AppAssets.bookAppoBottom, | 
					
						
							|  |  |  |         label: LocaleKeys.appointment.tr(), | 
					
						
							|  |  |  |         iconSize: 27, | 
					
						
							|  |  |  |         isSpecial: true, | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |       BottomNavItem(icon: AppAssets.toDoBottom, label: LocaleKeys.todoList.tr()), | 
					
						
							|  |  |  |       BottomNavItem(icon: AppAssets.servicesBottom, label: LocaleKeys.services2.tr()), | 
					
						
							|  |  |  |     ]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return Container( | 
					
						
							|  |  |  |       decoration: _containerDecoration, | 
					
						
							|  |  |  |       padding: _containerPadding, | 
					
						
							|  |  |  |       child: Row( | 
					
						
							|  |  |  |         mainAxisAlignment: MainAxisAlignment.spaceAround, | 
					
						
							|  |  |  |         children: List.generate( | 
					
						
							|  |  |  |           items.length, | 
					
						
							|  |  |  |               (index) => _buildNavItem(items[index], index), | 
					
						
							|  |  |  |         ), | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   Widget _buildNavItem(BottomNavItem item, int index) { | 
					
						
							|  |  |  |     final bool isSelected = currentIndex == index; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     return GestureDetector( | 
					
						
							|  |  |  |       onTap: () => onTap(index), | 
					
						
							|  |  |  |       behavior: HitTestBehavior.opaque, | 
					
						
							|  |  |  |       child: Column( | 
					
						
							|  |  |  |         mainAxisSize: MainAxisSize.min, | 
					
						
							|  |  |  |         children: [ | 
					
						
							|  |  |  |          Center( | 
					
						
							|  |  |  |               child: Utils.buildSvgWithAssets( | 
					
						
							|  |  |  |                 icon: item.icon, | 
					
						
							|  |  |  |                 height: item.iconSize.h, | 
					
						
							|  |  |  |                 width: item.iconSize.h, | 
					
						
							|  |  |  |                  // iconColor:  isSelected ? Colors.black87 : Colors.black87,
 | 
					
						
							|  |  |  |               ), | 
					
						
							|  |  |  |             ), | 
					
						
							|  |  |  |           const SizedBox(height: 10), | 
					
						
							|  |  |  |           item.label.toText12( | 
					
						
							|  |  |  |             fontWeight:FontWeight.w500, | 
					
						
							|  |  |  |             // color:  Colors.black87,
 | 
					
						
							|  |  |  |             // textAlign: TextAlign.center,
 | 
					
						
							|  |  |  |           ), | 
					
						
							|  |  |  |         SizedBox(height:    item.isSpecial ? 5:0 ) | 
					
						
							|  |  |  |         ], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       ), | 
					
						
							|  |  |  |     ); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BottomNavItem { | 
					
						
							|  |  |  |   final String icon; | 
					
						
							|  |  |  |   final String label; | 
					
						
							|  |  |  |   final double iconSize; | 
					
						
							|  |  |  |   final bool isSpecial; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const BottomNavItem({ | 
					
						
							|  |  |  |     required this.icon, | 
					
						
							|  |  |  |     required this.label, | 
					
						
							|  |  |  |     this.iconSize = 21, | 
					
						
							|  |  |  |     this.isSpecial = false, | 
					
						
							|  |  |  |   }); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Constants
 | 
					
						
							|  |  |  | const EdgeInsets _containerPadding = EdgeInsets.all(15); | 
					
						
							|  |  |  | const BoxDecoration _containerDecoration = BoxDecoration( | 
					
						
							|  |  |  |   color: Colors.white, | 
					
						
							|  |  |  |   border: Border( | 
					
						
							|  |  |  |     top: BorderSide( | 
					
						
							|  |  |  |       color: AppColors.bottomNAVBorder, | 
					
						
							|  |  |  |       width: 0.5, | 
					
						
							|  |  |  |     ), | 
					
						
							|  |  |  |   ), | 
					
						
							|  |  |  | ); |