Files
rasadyar_application/packages/chicken/lib/features/poultry_science/inspection/view.dart

700 lines
25 KiB
Dart
Raw Normal View History

2025-09-07 17:20:01 +03:30
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/hatching/hatching_models.dart';
import 'package:rasadyar_chicken/features/poultry_science/data/model/response/hatching_report/hatching_report.dart';
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
2025-09-07 17:20:01 +03:30
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_core/core.dart';
import 'logic.dart';
class InspectionPoultrySciencePage extends GetView<InspectionPoultryScienceLogic> {
const InspectionPoultrySciencePage({super.key});
@override
Widget build(BuildContext context) {
2025-09-24 16:24:45 +03:30
return ChickenBasePage(
2025-09-08 10:18:43 +03:30
hasBack: true,
2025-09-21 15:42:08 +03:30
hasFilter: true,
hasSearch: true,
2025-09-27 09:35:00 +03:30
onFilterTap: () {
Get.bottomSheet(filterBottomSheet());
},
2025-10-07 14:21:09 +03:30
onRefresh: controller.onRefresh,
2025-09-21 15:42:08 +03:30
onSearchChanged: (data) => controller.setSearchValue(data),
backId: poultryScienceActionKey,
2025-09-30 09:56:22 +03:30
routesWidget: ContainerBreadcrumb(rxRoutes: controller.routesName),
2025-10-07 14:21:09 +03:30
child: Column(
children: [
SizedBox(height: 50, child: segmentWidget()),
ObxValue((data) {
return data.value == 0 ? hatchingWidget() : reportWidget();
}, controller.selectedSegmentIndex),
],
),
2025-09-07 17:20:01 +03:30
);
}
2025-09-13 11:41:53 +03:30
Widget hatchingWidget() {
return Expanded(
child: ObxValue((data) {
return RPaginatedListView(
listType: ListType.separated,
resource: data.value,
hasMore: data.value.data?.next != null,
padding: EdgeInsets.fromLTRB(8, 8, 8, 80),
itemBuilder: (context, index) {
var item = data.value.data!.results![index];
return ObxValue((val) {
return ExpandableListItem2(
2025-09-20 13:12:16 +03:30
selected: val.value.isEqual(index),
onTap: () => controller.toggleExpanded(index),
2025-09-13 11:41:53 +03:30
index: index,
child: itemListWidget(item),
secondChild: itemListExpandedWidget(item),
labelColor: AppColor.blueLight,
2025-09-20 15:23:58 +03:30
labelIcon: item.reportInfo?.image == false
? Assets.vec.timerSvg.path
: Assets.vec.checkSquareSvg.path,
2025-10-14 16:24:46 +03:30
labelIconColor: item.reportInfo?.image == false
? AppColor.yellowNormal2
: AppColor.mediumGreyDarkHover,
2025-09-13 11:41:53 +03:30
);
2025-09-20 13:12:16 +03:30
}, controller.expandedIndex);
2025-09-13 11:41:53 +03:30
},
itemCount: data.value.data?.results?.length ?? 0,
separatorBuilder: (context, index) => SizedBox(height: 8.h),
onLoadMore: () async => controller.getHatchingList(true),
);
}, controller.hatchingList),
);
2025-09-07 17:20:01 +03:30
}
Container itemListExpandedWidget(HatchingModel item) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 8),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
child: Column(
spacing: 8,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
item.poultry?.user?.fullname ?? 'N/A',
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(color: AppColor.greenDark),
),
Spacer(),
Visibility(
child: Text(
item.violation == true ? 'پیگیری' : 'عادی',
textAlign: TextAlign.center,
style: AppFonts.yekan10.copyWith(color: AppColor.redDark),
),
),
],
),
Container(
height: 32,
padding: EdgeInsets.symmetric(horizontal: 8),
decoration: ShapeDecoration(
color: AppColor.blueLight,
shape: RoundedRectangleBorder(
side: BorderSide(width: 1, color: AppColor.blueLightHover),
borderRadius: BorderRadius.circular(8),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
2025-09-24 16:24:45 +03:30
Text(
'نژاد:${item.breed?.first.breed ?? 'N/A'}',
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
2025-09-21 15:42:08 +03:30
Text(
' سن ${item.age} (روزه)',
2025-09-07 17:20:01 +03:30
2025-09-21 15:42:08 +03:30
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
2025-09-07 17:20:01 +03:30
),
Text(
' دوره جوجه ریزی:${item.period}',
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
],
),
),
buildRow(title: 'شماره مجوز جوجه ریزی', value: item.licenceNumber ?? 'N/A'),
2025-09-21 15:42:08 +03:30
buildUnitRow(
2025-09-07 17:20:01 +03:30
title: 'حجم جوجه ریزی',
value: item.quantity.separatedByCommaFa,
2025-09-21 15:42:08 +03:30
unit: '(قطعه)',
2025-09-07 17:20:01 +03:30
),
2025-09-22 16:21:17 +03:30
buildUnitRow(
2025-09-24 16:24:45 +03:30
title: 'مانده در سالن',
value: item.leftOver.separatedByCommaFa,
unit: '(قطعه)',
),
buildUnitRow(title: 'تلفات', value: item.losses.separatedByCommaFa, unit: '(قطعه)'),
2025-09-07 17:20:01 +03:30
buildRow(
title: 'دامپزشک فارم',
value: '${item.vetFarm?.vetFarmFullName}(${item.vetFarm?.vetFarmMobile})',
),
buildRow(
title: 'شرح بازرسی',
value: item.reportInfo?.image == false ? 'ارسال تصویر جوجه ریزی فارم ' : 'تکمیل شده',
titleStyle: AppFonts.yekan14.copyWith(
color: (item.reportInfo?.image ?? false) ? AppColor.greenNormal : AppColor.redDark,
),
valueStyle: AppFonts.yekan14.copyWith(
color: (item.reportInfo?.image ?? false) ? AppColor.greenNormal : AppColor.redDark,
),
),
Visibility(
2025-09-08 10:25:25 +03:30
visible: (item.reportInfo?.image == false),
2025-09-07 17:20:01 +03:30
child: RElevated(
text: 'ثبت بازرسی',
isFullWidth: true,
width: 150.w,
height: 40.h,
onPressed: () {
cameraBottomSheet(item.id!);
},
textStyle: AppFonts.yekan20.copyWith(color: Colors.white),
backgroundColor: AppColor.greenNormal,
),
),
],
),
);
}
void cameraBottomSheet(int id) {
Get.bottomSheet(
isDismissible: false,
isScrollControlled: false,
BaseBottomSheet(
2025-09-22 16:21:17 +03:30
height: 350.h,
2025-09-07 17:20:01 +03:30
child: Column(
children: [
2025-09-22 16:21:17 +03:30
ObxValue((data) {
return GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4,
mainAxisSpacing: 8,
crossAxisSpacing: 8,
childAspectRatio: 1,
),
shrinkWrap: true,
itemCount: controller.pickedImages.length + 1,
itemBuilder: (context, index) {
2025-09-24 16:24:45 +03:30
if (index + 1 < 7 && index == data.length) {
return GestureDetector(
onTap: () async {
await controller.pickImages();
},
child: Container(
2025-09-07 17:20:01 +03:30
width: 80.h,
height: 80.h,
decoration: BoxDecoration(
color: AppColor.lightGreyNormal,
borderRadius: BorderRadius.circular(8.r),
),
2025-09-24 16:24:45 +03:30
child: Center(
child: Icon(
Icons.add_a_photo,
color: AppColor.lightGreyDarker,
size: 32.h,
),
),
),
);
} else {
return Container(
width: 80.h,
height: 80.h,
decoration: BoxDecoration(
color: AppColor.lightGreyNormal,
borderRadius: BorderRadius.circular(8.r),
),
child: Stack(
children: [
Positioned.fill(
child: Image.file(File(data[index].path), fit: BoxFit.cover),
),
2025-09-07 17:20:01 +03:30
2025-09-24 16:24:45 +03:30
Positioned(
top: 4,
left: 4,
child: GestureDetector(
onTap: () {
controller.removeImage(index);
},
child: Container(
width: 24.w,
height: 24.h,
clipBehavior: Clip.antiAlias,
padding: EdgeInsets.all(4),
decoration: ShapeDecoration(
color: Colors.white.withValues(alpha: 0.80),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(4),
2025-09-07 17:20:01 +03:30
),
2025-09-24 16:24:45 +03:30
),
child: Assets.vec.trashSvg.svg(
width: 8.w,
height: 8.h,
colorFilter: ColorFilter.mode(
AppColor.redNormal,
BlendMode.srcIn,
2025-09-07 17:20:01 +03:30
),
),
),
),
2025-09-24 16:24:45 +03:30
),
],
),
);
}
},
);
}, controller.pickedImages),
2025-09-07 17:20:01 +03:30
2025-09-22 16:21:17 +03:30
SizedBox(height: 35.h),
Text(
'حداقل ۲ تصویر برای ثبت بازرسی لازم است',
style: AppFonts.yekan12.copyWith(color: AppColor.textColor),
),
SizedBox(height: 8.h),
2025-09-07 17:20:01 +03:30
Row(
spacing: 16,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() {
return RElevated(
height: 40.h,
text: 'ارسال',
backgroundColor: AppColor.greenNormal,
progress: controller.presentUpload.value,
isLoading: controller.isOnUpload.value,
enabled: controller.pickedImages.length >= 2,
onPressed: () async {
controller.submitInspectionReport(id: id);
},
);
}),
ObxValue((data) {
return RElevated(
height: 40.h,
text: 'انصراف',
backgroundColor: AppColor.redNormal,
enabled: !data.value,
onPressed: () {
if (!data.value) {
controller.clearImages();
Get.back();
}
},
);
}, controller.isOnUpload),
],
),
2025-09-22 16:21:17 +03:30
SizedBox(height: 8.h),
2025-09-07 17:20:01 +03:30
],
),
),
2025-09-22 16:21:17 +03:30
).whenComplete(() {
controller.pickedImages.clear();
2025-09-24 16:24:45 +03:30
});
2025-09-07 17:20:01 +03:30
}
Padding segmentWidget() {
return Padding(
padding: const EdgeInsets.fromLTRB(8, 0, 8, 8),
child: Row(
children: [
Expanded(
child: RSegment(
children: ['بازرسی', 'بایگانی'],
selectedIndex: 0,
borderColor: const Color(0xFFB4B4B4),
selectedBorderColor: AppColor.blueNormal,
selectedBackgroundColor: AppColor.blueLight,
onSegmentSelected: (index) => controller.selectedSegmentIndex.value = index,
backgroundColor: AppColor.whiteGreyNormal,
),
),
],
),
);
}
Widget reportWidget() {
2025-09-13 11:41:53 +03:30
return Expanded(
child: ObxValue((data) {
return RPaginatedListView(
listType: ListType.separated,
resource: data.value,
hasMore: data.value.data?.next != null,
padding: EdgeInsets.fromLTRB(8, 8, 8, 80),
itemBuilder: (context, index) {
var item = data.value.data!.results![index];
return ObxValue((val) {
return ExpandableListItem2(
2025-09-20 13:12:16 +03:30
selected: val.value.isEqual(index),
onTap: () => controller.toggleExpanded(index),
2025-09-13 11:41:53 +03:30
index: index,
child: itemListWidgetReport(item),
secondChild: itemListExpandedWidgetReport(item),
2025-09-21 15:42:08 +03:30
labelColor: item.state == 'rejected' ? AppColor.redLight : AppColor.greenLight,
2025-09-29 15:00:31 +03:30
labelIcon: Assets.vec.cubeSearchSvg.path,
2025-09-13 11:41:53 +03:30
);
2025-09-20 13:12:16 +03:30
}, controller.expandedIndex);
2025-09-13 11:41:53 +03:30
},
itemCount: data.value.data?.results?.length ?? 0,
separatorBuilder: (context, index) => SizedBox(height: 8.h),
onLoadMore: () async => controller.getHatchingReport(true),
);
}, controller.hatchingReportList),
);
2025-09-07 17:20:01 +03:30
}
Widget itemListExpandedWidgetReport(HatchingReport item) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 8),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
child: Column(
spacing: 8,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
2025-09-30 11:30:44 +03:30
item.hatching?.poultry?.user?.fullname ?? 'N/A',
2025-09-07 17:20:01 +03:30
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(color: AppColor.greenDark),
),
Spacer(),
Visibility(
child: Text(
item.hatching?.violation == true ? 'پیگیری' : 'عادی',
textAlign: TextAlign.center,
style: AppFonts.yekan10.copyWith(color: AppColor.redDark),
),
),
],
),
Container(
height: 32,
padding: EdgeInsets.symmetric(horizontal: 8),
decoration: ShapeDecoration(
color: AppColor.blueLight,
shape: RoundedRectangleBorder(
side: BorderSide(width: 1, color: AppColor.blueLightHover),
borderRadius: BorderRadius.circular(8),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
spacing: 3,
children: [
Text('نژاد:', style: AppFonts.yekan14.copyWith(color: AppColor.textColor)),
Text(
2025-09-13 11:41:53 +03:30
item.hatching?.chickenBreed ?? 'N/A',
2025-09-07 17:20:01 +03:30
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
],
),
2025-09-21 15:42:08 +03:30
Text(
' سن ${item.hatching?.chickenAge} (روزه)',
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
),
2025-09-07 17:20:01 +03:30
Text(
2025-09-13 11:41:53 +03:30
' دوره جوجه ریزی:${item.hatching?.period}',
2025-09-07 17:20:01 +03:30
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
],
),
),
buildRow(title: 'شماره مجوز جوجه ریزی', value: item.hatching?.licenceNumber ?? 'N/A'),
2025-09-21 15:42:08 +03:30
buildUnitRow(
2025-09-24 16:24:45 +03:30
title: 'حجم جوجه ریزی',
value: item.hatching?.quantity.separatedByCommaFa ?? 'N/A',
2025-09-21 15:42:08 +03:30
2025-09-24 16:24:45 +03:30
unit: '(قطعه)',
2025-09-07 17:20:01 +03:30
),
2025-09-21 15:42:08 +03:30
buildUnitRow(
2025-09-24 16:24:45 +03:30
title: 'مانده در سالن',
value: item.hatching?.leftOver.separatedByCommaFa ?? 'N/A',
unit: '(قطعه)',
),
buildUnitRow(
title: 'تلفات',
value: item.hatching?.losses.separatedByCommaFa ?? 'N/A',
unit: '(قطعه)',
2025-09-13 11:41:53 +03:30
),
2025-09-07 17:20:01 +03:30
buildRow(
title: 'دامپزشک فارم',
2025-09-13 11:41:53 +03:30
value:
2025-09-30 11:30:44 +03:30
'${item.hatching?.vetFarm?.vetFarmFullName}(${item.hatching?.vetFarm?.vetFarmMobile})',
2025-09-07 17:20:01 +03:30
),
buildRow(
title: 'شرح بازرسی',
2025-09-21 15:42:08 +03:30
value: controller.getStatus(item),
titleStyle: AppFonts.yekan14.copyWith(color: controller.getStatusColor(item)),
valueStyle: AppFonts.yekan14.copyWith(color: controller.getStatusColor(item)),
2025-09-07 17:20:01 +03:30
),
2025-09-21 15:42:08 +03:30
if (item.state == 'accepted') ...{
Visibility(
visible: item.realQuantityAi != null,
2025-09-22 16:21:17 +03:30
child: buildRow(
2025-09-24 16:24:45 +03:30
title: 'تعداد تاییده هوش مصنوعی',
value: item.realQuantityAi.separatedByComma,
),
2025-09-21 15:42:08 +03:30
),
Visibility(
visible: item.realQuantity != null,
2025-09-22 16:21:17 +03:30
child: buildRow(
2025-09-24 16:24:45 +03:30
title: 'تعداد تاییده',
value: item.realQuantity.separatedByComma,
2025-09-24 16:24:45 +03:30
),
2025-09-21 15:42:08 +03:30
),
},
if (item.state == 'rejected') ...{
Visibility(
visible: item.messageAi != null,
child: buildRow(title: 'پیام هوش مصنوعی', value: item.messageAi ?? '-'),
),
Visibility(
visible: item.message != null,
child: buildRow(title: 'پیام', value: item.message ?? '-'),
),
Visibility(
visible: item.messageRegistererFullname != null,
child: buildRow(
title: 'ثبت کننده گزارش',
value: item.messageRegistererFullname ?? '-',
),
),
Visibility(
visible: item.messageRegistererMobile != null,
child: buildRow(
title: 'موبایل کننده گزارش',
value: item.messageRegistererMobile ?? '-',
),
),
Visibility(
visible: item.messageRegistererRole != null,
child: buildRow(title: 'نقش کننده گزارش', value: item.messageRegistererRole ?? '-'),
),
},
2025-09-07 17:20:01 +03:30
SizedBox(
height: 140.h,
child: GridView.builder(
shrinkWrap: true,
itemCount: item.image?.length ?? 0,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
mainAxisSpacing: 10,
crossAxisSpacing: 10,
),
2025-09-24 16:24:45 +03:30
itemBuilder: (context, index) => Container(
height: 100.h,
clipBehavior: Clip.hardEdge,
2025-09-30 09:56:22 +03:30
child: Image.network(
item.image?[index] ?? '',
loadingBuilder: (context, child, loadingProgress) {
if (loadingProgress == null) return child;
2025-10-07 14:21:09 +03:30
return Padding(
padding: EdgeInsetsGeometry.all(80),
2025-09-30 09:56:22 +03:30
child: CircularProgressIndicator(
color: AppColor.blueDark,
value: loadingProgress.expectedTotalBytes != null
? loadingProgress.cumulativeBytesLoaded /
(loadingProgress.expectedTotalBytes ?? 1)
: null,
),
);
},
2025-09-24 16:24:45 +03:30
),
2025-09-30 09:56:22 +03:30
decoration: BoxDecoration(borderRadius: BorderRadius.circular(8.r)),
2025-09-24 16:24:45 +03:30
),
2025-09-07 17:20:01 +03:30
),
),
],
),
);
}
Widget itemListWidget(HatchingModel item) {
2025-09-13 11:41:53 +03:30
return Row(
2025-09-07 17:20:01 +03:30
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
SizedBox(width: 20),
Expanded(
flex: 2,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
2025-09-20 15:23:58 +03:30
spacing: 5,
2025-09-07 17:20:01 +03:30
children: [
Text(
item.poultry?.user?.fullname ?? 'N/A',
textAlign: TextAlign.start,
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
),
Text(
item.poultry?.user?.mobile ?? 'N/A',
textAlign: TextAlign.center,
style: AppFonts.yekan14.copyWith(color: AppColor.bgDark),
),
],
),
),
Expanded(
flex: 3,
child: Column(
2025-09-20 15:23:58 +03:30
spacing: 5,
2025-09-07 17:20:01 +03:30
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
item.poultry?.unitName ?? 'N/Aaq',
textAlign: TextAlign.start,
2025-09-20 15:23:58 +03:30
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
2025-09-07 17:20:01 +03:30
),
Text(
item.poultry?.licenceNumber ?? 'N/A',
textAlign: TextAlign.left,
2025-09-20 15:23:58 +03:30
style: AppFonts.yekan12.copyWith(color: AppColor.bgDark),
2025-09-07 17:20:01 +03:30
),
],
),
),
Expanded(
flex: 1,
child: Assets.vec.scanSvg.svg(
width: 32.w,
height: 32.h,
colorFilter: ColorFilter.mode(AppColor.blueNormal, BlendMode.srcIn),
),
),
],
);
}
Row itemListWidgetReport(HatchingReport item) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
SizedBox(width: 20),
Expanded(
flex: 2,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
2025-09-20 15:23:58 +03:30
spacing: 5,
2025-09-07 17:20:01 +03:30
children: [
Text(
2025-09-30 11:30:44 +03:30
item.hatching?.poultry?.user?.fullname ?? 'N/A',
2025-09-07 17:20:01 +03:30
textAlign: TextAlign.start,
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
),
Text(
2025-09-30 11:30:44 +03:30
item.hatching?.poultry?.user?.mobile ?? 'N/A',
2025-09-07 17:20:01 +03:30
textAlign: TextAlign.center,
style: AppFonts.yekan14.copyWith(color: AppColor.bgDark),
),
],
),
),
Expanded(
flex: 3,
child: Column(
2025-09-20 15:23:58 +03:30
spacing: 5,
2025-09-07 17:20:01 +03:30
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
item.hatching?.poultry?.unitName ?? 'N/Aaq',
textAlign: TextAlign.start,
2025-09-20 15:23:58 +03:30
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
2025-09-07 17:20:01 +03:30
),
Text(
item.hatching?.licenceNumber ?? 'N/A',
textAlign: TextAlign.left,
2025-09-20 15:23:58 +03:30
style: AppFonts.yekan12.copyWith(color: AppColor.bgDark),
2025-09-07 17:20:01 +03:30
),
],
),
),
Expanded(
flex: 1,
child: Assets.vec.scanSvg.svg(
width: 32.w,
height: 32.h,
colorFilter: ColorFilter.mode(AppColor.blueNormal, BlendMode.srcIn),
),
),
],
);
}
2025-09-21 15:42:08 +03:30
Widget filterBottomSheet() {
return BaseBottomSheet(
height: 200,
child: Column(
spacing: 16,
children: [
Text('فیلترها', style: AppFonts.yekan16Bold.copyWith(color: AppColor.blueNormal)),
Row(
spacing: 8,
children: [
Expanded(
child: dateFilterWidget(
date: controller.fromDateFilter,
onChanged: (jalali) => controller.fromDateFilter.value = jalali,
),
),
Expanded(
child: dateFilterWidget(
isFrom: false,
date: controller.toDateFilter,
onChanged: (jalali) => controller.toDateFilter.value = jalali,
),
),
],
),
RElevated(
text: 'اعمال فیلتر',
isFullWidth: true,
backgroundColor: AppColor.greenNormal,
onPressed: () {
final isReporter = controller.selectedSegmentIndex.value == 0;
if (isReporter) {
controller.getHatchingReport();
} else {
controller.getHatchingList();
}
Get.back();
},
height: 40,
),
],
),
);
}
2025-09-07 17:20:01 +03:30
}