feat: add Poultry Farm Inspection module with navigation and logic

This commit is contained in:
2025-11-18 08:10:19 +03:30
parent 0669e22cfa
commit c4bc31029f
14 changed files with 1638 additions and 135 deletions

View File

@@ -0,0 +1,60 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart';
class PoultryFarmInspectionHomeLogic extends GetxController
with GetTickerProviderStateMixin {
RxInt selectedSegmentIndex = 0.obs;
RxList<Resource<PaginationModel<String>>> inspectionList = RxList([
Resource<PaginationModel<String>>.success(
PaginationModel(results: ["s", "b", "c", "d"]),
),
]);
RxList<Resource<PaginationModel<String>>> inactiveInspectionList = RxList([
Resource<PaginationModel<String>>.success(
PaginationModel(results: ["s", "b", "c", "d"]),
),
]);
RxInt expandedIndex = RxInt(-1);
late TabController tabController;
RxInt selectedTabIndex = 0.obs;
@override
void onInit() {
super.onInit();
tabController = TabController(length: 4, vsync: this);
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
}
void toggleExpanded(int index) {
expandedIndex.value = expandedIndex.value == index ? -1 : index;
}
void changeSegmentIndex(int index) {
if (index == selectedSegmentIndex.value) {
return;
}
expandedIndex.value = -1;
selectedSegmentIndex.value = index;
}
void changeTab(int index) {
if (index == selectedTabIndex.value) {
return;
}
selectedTabIndex.value = index;
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,2 @@
export 'home/logic.dart';
export 'home/view.dart';

View File

@@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rasadyar_core/presentation/common/app_color.dart';
class PoultryFarmInspectionRootLogic extends GetxController {
DateTime? _lastBackPressed;
final pages = [
Container(color: Colors.amber),
Container(color: Colors.blue),
Container(color: Colors.red),
];
RxInt currentPage = 0.obs;
@override
void onReady() {
// TODO: implement onReady
super.onReady();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
}
void changePage(int index) {
currentPage.value = index;
}
void popBackTaped() async {
final now = DateTime.now();
if (_lastBackPressed == null || now.difference(_lastBackPressed!) > Duration(seconds: 2)) {
_lastBackPressed = now;
Get.snackbar(
'خروج از برنامه',
'برای خروج دوباره بازگشت را بزنید',
snackPosition: SnackPosition.TOP,
duration: Duration(seconds: 2),
backgroundColor: AppColor.warning,
);
}
}
}

View File

@@ -0,0 +1,58 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_core/core.dart';
import 'logic.dart';
class PoultryFarmInspectionRootPage extends GetView<PoultryFarmInspectionRootLogic> {
const PoultryFarmInspectionRootPage({super.key});
@override
Widget build(BuildContext context) {
return ChickenBasePage(
isFullScreen: true,
onPopScopTaped: controller.popBackTaped,
child: ObxValue((data) {
return Stack(
children: [
IndexedStack(children: controller.pages, index: data.value),
Positioned(
right: 0,
left: 0,
bottom: 0,
child: RBottomNavigation(
mainAxisAlignment: MainAxisAlignment.spaceAround,
items: [
RBottomNavigationItem(
label: 'بازرسی فعال',
icon: Assets.vec.settingSvg.path,
isSelected: controller.currentPage.value == 0,
onTap: () {
controller.changePage(0);
},
),
RBottomNavigationItem(
label: 'خانه',
icon: Assets.vec.homeSvg.path,
isSelected: controller.currentPage.value == 1,
onTap: () {
controller.changePage(1);
},
),
RBottomNavigationItem(
label: 'پروفایل',
icon: Assets.vec.profileCircleSvg.path,
isSelected: controller.currentPage.value == 2,
onTap: () {
controller.changePage(3);
},
),
],
),
),
],
);
}, controller.currentPage),
);
}
}