You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
HMG_Patient_App_New/lib/widgets/bottom_navigation/bottom_navigation.dart

104 lines
2.9 KiB
Dart

2 months ago
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';
2 months ago
import 'package:hmg_patient_app_new/core/utils/utils.dart';
import 'package:hmg_patient_app_new/extensions/string_extensions.dart';
2 months ago
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,
});
2 months ago
@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,
2 months ago
),
BottomNavItem(icon: AppAssets.toDoBottom, label: LocaleKeys.todoList.tr()),
BottomNavItem(icon: AppAssets.servicesBottom, label: LocaleKeys.services2.tr()),
];
return Container(
decoration: _containerDecoration,
padding: _containerPadding,
2 months ago
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: List.generate(
items.length,
(index) => _buildNavItem(items[index], index),
),
2 months ago
),
);
}
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,
2 months ago
),
SizedBox(height: item.isSpecial ? 5:0 )
],
),
2 months ago
);
}
}
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,
),
),
);