pharmacy_mobile/lib/pages/customer_page.dart
2025-02-20 17:20:01 +08:00

116 lines
4.7 KiB
Dart

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:pharmacy_mobile/pages/customer_pages/customer_cart_page.dart';
import 'package:pharmacy_mobile/pages/customer_pages/customer_main_page.dart';
import 'package:pharmacy_mobile/pages/customer_pages/customer_profile_page.dart';
import 'package:pharmacy_mobile/pages/customer_pages/customer_search_page.dart';
import 'package:pharmacy_mobile/widgets/text_widget.dart';
import 'package:animated_notch_bottom_bar/animated_notch_bottom_bar/animated_notch_bottom_bar.dart';
class CustomerPage extends StatefulWidget {
const CustomerPage({super.key});
@override
State<CustomerPage> createState() => _CustomerPageState();
}
class _CustomerPageState extends State<CustomerPage> {
final _pageController = PageController(initialPage: 0);
final NotchBottomBarController _notchController = NotchBottomBarController(index: 0);
void sample() {}
@override
Widget build(BuildContext context) {
final List<Widget> bottomBarPages = [
const CustomerMainPage(),
const CustomerSearchPage(),
const CustomerCartPage(),
const CustomerProfilePage()
];
final Color selectedBarColor = const Color.fromRGBO(241, 255, 255, 0.83);
final Color unselectedBarColor = const Color.fromRGBO(206, 206, 206, 1);
final double barFontSize = 12;
final double barIconInactiveSize = 20;
final double barIconActiveSize = 20;
return PopScope(
canPop: false,
child: Scaffold(
resizeToAvoidBottomInset: false,
body: PageView(
controller: _pageController,
physics: const NeverScrollableScrollPhysics(),
children: List.generate(bottomBarPages.length, (index) => bottomBarPages[index]),
),
extendBody: true,
bottomNavigationBar: AnimatedNotchBottomBar(
notchBottomBarController: _notchController,
showLabel: true,
textOverflow: TextOverflow.visible,
maxLine: 1,
kIconSize: 24,
kBottomRadius: 20.0,
color: const Color.fromRGBO(90, 73, 106, 1),
notchColor: const Color.fromRGBO(182, 143, 210, 1),
removeMargins: false,
bottomBarWidth: 500,
durationInMilliSeconds: 300,
bottomBarItems: [
BottomBarItem(
inActiveItem: FaIcon(FontAwesomeIcons.house, size: barIconInactiveSize, color: unselectedBarColor),
activeItem: FaIcon(
FontAwesomeIcons.house,
size: barIconActiveSize,
color: selectedBarColor,
),
itemLabelWidget: TextWidget(
text: 'Home',
size: barFontSize,
bold: true,
color: unselectedBarColor,
footer: true,
)),
BottomBarItem(
inActiveItem:
FaIcon(FontAwesomeIcons.magnifyingGlass, size: barIconInactiveSize, color: unselectedBarColor),
activeItem: Icon(FontAwesomeIcons.magnifyingGlass, size: barIconActiveSize, color: selectedBarColor),
itemLabelWidget: TextWidget(
text: 'Search',
size: barFontSize,
bold: true,
color: unselectedBarColor,
footer: true,
),
),
BottomBarItem(
inActiveItem:
FaIcon(FontAwesomeIcons.cartShopping, size: barIconInactiveSize, color: unselectedBarColor),
activeItem: FaIcon(FontAwesomeIcons.cartShopping, size: barIconActiveSize, color: selectedBarColor),
itemLabelWidget: TextWidget(
text: 'Cart',
size: barFontSize,
bold: true,
color: unselectedBarColor,
footer: true,
),
),
BottomBarItem(
inActiveItem: Icon(Icons.person, size: barIconInactiveSize, color: unselectedBarColor),
activeItem: Icon(Icons.person, size: barIconActiveSize, color: selectedBarColor),
itemLabelWidget: TextWidget(
text: 'Profile',
size: barFontSize,
bold: true,
color: unselectedBarColor,
footer: true,
),
),
],
onTap: (index) {
_pageController.jumpToPage(index);
},
)));
}
}