TKK_E32230859/lib/app/modules/navbar/views/navbar_view.dart

96 lines
2.6 KiB
Dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controllers/navbar_controller.dart';
import '../../home/views/home_view.dart';
import '../../notification/views/notification_view.dart';
// import '../../schedule/views/schedule_view.dart';
import '../../profile/views/profile_view.dart';
class NavbarView extends StatelessWidget {
const NavbarView({super.key});
@override
Widget build(BuildContext context) {
final controller = Get.put(NavbarController());
final pages = const [
HomeView(),
NotificationView(),
// ScheduleView(),
ProfileView(),
];
return Obx(
() => Scaffold(
extendBody: true,
body: IndexedStack(
index: controller.selectedIndex.value,
children: pages,
),
bottomNavigationBar: _buildNavBar(controller),
),
);
}
Widget _buildNavBar(NavbarController controller) {
return Container(
margin: const EdgeInsets.only(left: 20, right: 20, bottom: 15),
padding: const EdgeInsets.symmetric(horizontal: 15, vertical: 12),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(20),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.1),
blurRadius: 10,
offset: const Offset(0, -2),
),
],
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
_navItem(controller, Icons.home, 0, 'Home'),
_navItem(controller, Icons.chat_bubble_outline, 1, 'Notification'),
// _navItem(controller, Icons.calendar_today, 2, 'Schedule'),
_navItem(controller, Icons.person_outline, 2, 'Account'),
],
),
);
}
Widget _navItem(
NavbarController controller,
IconData icon,
int index,
String label,
) {
final active = controller.selectedIndex.value == index;
return InkWell(
onTap: () => controller.changeTabIndex(index),
borderRadius: BorderRadius.circular(12),
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: const EdgeInsets.all(8),
child: Icon(
icon,
size: 28,
color: active ? const Color(0xFF0091EA) : Colors.grey[400],
),
),
Text(
label,
style: TextStyle(
color: active ? const Color(0xFF0091EA) : Colors.grey[400],
fontSize: 12,
),
),
],
),
);
}
}