Files
kulakpos_app/lib/Screens/Home/home.dart

135 lines
4.6 KiB
Dart
Raw Normal View History

2026-02-07 15:57:09 +07:00
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:flutter_svg/flutter_svg.dart';
import 'package:mobile_pos/Screens/DashBoard/dashboard.dart';
import 'package:mobile_pos/Screens/Home/home_screen.dart';
import 'package:mobile_pos/Screens/Report/reports.dart';
import 'package:mobile_pos/Screens/Settings/settings_screen.dart';
import 'package:mobile_pos/Screens/pos_sale/pos_sale.dart';
import 'package:mobile_pos/constant.dart';
import 'package:mobile_pos/generated/l10n.dart' as lang;
import 'package:mobile_pos/model/business_info_model.dart' as visible;
import '../../GlobalComponents/glonal_popup.dart';
import '../../Provider/profile_provider.dart';
import '../../service/check_actions_when_no_branch.dart';
class Home extends StatefulWidget {
2026-02-11 18:59:12 +07:00
const Home({super.key, this.initialIndex = 0});
final int initialIndex;
2026-02-07 15:57:09 +07:00
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
2026-02-11 18:59:12 +07:00
late int _tabIndex = widget.initialIndex;
2026-02-07 15:57:09 +07:00
late final PageController pageController = PageController(initialPage: _tabIndex);
@override
void dispose() {
pageController.dispose();
super.dispose();
}
void _handleNavigation(
int index,
BuildContext context,
) {
setState(() => _tabIndex = index);
pageController.jumpToPage(index);
}
@override
Widget build(BuildContext context) {
return WillPopScope(
onWillPop: () async =>
await showDialog<bool>(
context: context,
builder: (context) => AlertDialog(
title: Text(lang.S.of(context).areYouSure),
content: Text(lang.S.of(context).doYouWantToExitTheApp),
actions: [
TextButton(onPressed: () => Navigator.pop(context, false), child: Text(lang.S.of(context).no)),
TextButton(onPressed: () => Navigator.pop(context, true), child: Text(lang.S.of(context).yes)),
],
),
) ??
false,
child: Consumer(builder: (context, ref, __) {
ref.watch(getExpireDateProvider(ref));
return GlobalPopup(
child: Scaffold(
body: PageView(
controller: pageController,
physics: const NeverScrollableScrollPhysics(),
onPageChanged: (v) => setState(() => _tabIndex = v),
children: [
HomeScreen(),
PosSaleScreen(),
DashboardScreen(),
Reports(),
SettingScreen(),
],
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _tabIndex,
backgroundColor: Colors.white,
// onTap: (i) => _handleNavigation(i, context, visibility),
onTap: (i) => _handleNavigation(
i,
context,
),
items: [
_buildNavItem(index: 0, activeIcon: 'cHome', icon: 'home', label: lang.S.of(context).home),
_buildNavItem(
index: 1,
activeIcon: 'cPos',
icon: 'pos',
label: lang.S.of(context).pos,
),
_buildNavItem(
index: 2,
activeIcon: 'dashbord1',
icon: 'dashbord',
label: lang.S.of(context).dashboard,
),
_buildNavItem(
index: 3,
activeIcon: 'cFile',
icon: 'file',
label: lang.S.of(context).reports,
),
_buildNavItem(
index: 4,
activeIcon: 'cSetting',
icon: 'setting',
label: lang.S.of(context).setting,
),
],
type: BottomNavigationBarType.fixed,
selectedItemColor: kMainColor,
unselectedItemColor: kGreyTextColor,
selectedLabelStyle: const TextStyle(fontSize: 14),
unselectedLabelStyle: const TextStyle(fontSize: 14),
),
),
);
}),
);
}
BottomNavigationBarItem _buildNavItem(
{required int index, required String activeIcon, required String icon, required String label}) {
return BottomNavigationBarItem(
icon: _tabIndex == index
? SvgPicture.asset('assets/$activeIcon.svg', height: 28, width: 28, fit: BoxFit.scaleDown)
: SvgPicture.asset('assets/$icon.svg',
colorFilter: const ColorFilter.mode(kGreyTextColor, BlendMode.srcIn), height: 24, width: 24),
label: label,
);
}
}