Merge branch 'feature/Poultry-Farm-Inspection' into develop

This commit is contained in:
2025-11-23 09:11:28 +03:30
88 changed files with 4323 additions and 614 deletions

10
.vscode/launch.json vendored
View File

@@ -4,23 +4,25 @@
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "rasadyar_app",
"request": "launch",
"type": "dart"
"type": "dart",
"program": "lib/main.dart",
},
{
"name": "rasadyar_app (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
"flutterMode": "profile",
"program": "lib/main.dart",
},
{
"name": "rasadyar_app (release mode)",
"request": "launch",
"type": "dart",
"flutterMode": "release"
"flutterMode": "release",
"program": "lib/main.dart",
}
]
}

View File

@@ -19,7 +19,7 @@ if (keystorePropertiesFile.exists()) {
android {
namespace = "ir.mnpc.rasadyar"
compileSdk = flutter.compileSdkVersion
ndkVersion = "27.0.12077973"
ndkVersion = "28.2.13676358"
compileOptions {
sourceCompatibility = JavaVersion.VERSION_21

View File

@@ -1,5 +1,5 @@
sdk.dir=C:/Users/Housh11/AppData/Local/Android/Sdk
sdk.dir=C:\\Users\\Housh11\\AppData\\Local\\Android\\sdk
flutter.sdk=C:\\src\\flutter
flutter.buildMode=debug
flutter.versionName=1.3.32
flutter.versionCode=29
flutter.versionName=1.3.33
flutter.versionCode=30

View File

@@ -0,0 +1,7 @@
<svg width="36" height="36" viewBox="0 0 36 36" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M12.9163 15.8346C10.383 15.8346 8.33301 13.7846 8.33301 11.2513C8.33301 8.71797 10.383 6.66797 12.9163 6.66797C15.4497 6.66797 17.4997 8.71797 17.4997 11.2513C17.4997 13.7846 15.4497 15.8346 12.9163 15.8346ZM12.9163 9.16797C11.7663 9.16797 10.833 10.1013 10.833 11.2513C10.833 12.4013 11.7663 13.3346 12.9163 13.3346C14.0663 13.3346 14.9997 12.4013 14.9997 11.2513C14.9997 10.1013 14.0663 9.16797 12.9163 9.16797Z" fill="#818181"/>
<path d="M22.9167 35.8333H12.9167C3.86667 35.8333 0 31.9667 0 22.9167V12.9167C0 3.86667 3.86667 0 12.9167 0H19.5833C20.2667 0 20.8333 0.566667 20.8333 1.25C20.8333 1.93333 20.2667 2.5 19.5833 2.5H12.9167C5.23333 2.5 2.5 5.23333 2.5 12.9167V22.9167C2.5 30.6 5.23333 33.3333 12.9167 33.3333H22.9167C30.6 33.3333 33.3333 30.6 33.3333 22.9167V14.5833C33.3333 13.9 33.9 13.3333 34.5833 13.3333C35.2667 13.3333 35.8333 13.9 35.8333 14.5833V22.9167C35.8333 31.9667 31.9667 35.8333 22.9167 35.8333Z" fill="#818181"/>
<path d="M33.3327 7.5H24.166C23.4827 7.5 22.916 6.93333 22.916 6.25C22.916 5.56667 23.4827 5 24.166 5H33.3327C34.016 5 34.5827 5.56667 34.5827 6.25C34.5827 6.93333 34.016 7.5 33.3327 7.5Z" fill="#818181"/>
<path d="M28.75 12.0846C28.0667 12.0846 27.5 11.518 27.5 10.8346V1.66797C27.5 0.984635 28.0667 0.417969 28.75 0.417969C29.4333 0.417969 30 0.984635 30 1.66797V10.8346C30 11.518 29.4333 12.0846 28.75 12.0846Z" fill="#818181"/>
<path d="M2.36585 30.7477C1.96585 30.7477 1.56585 30.5477 1.33252 30.1977C0.949186 29.631 1.09919 28.8477 1.66585 28.4643L9.88252 22.9477C11.6825 21.7477 14.1659 21.881 15.7992 23.2643L16.3492 23.7477C17.1825 24.4643 18.5992 24.4643 19.4159 23.7477L26.3492 17.7977C28.1325 16.281 30.8992 16.281 32.6825 17.7977L35.3992 20.131C35.9159 20.581 35.9825 21.3643 35.5325 21.8977C35.0825 22.4143 34.2992 22.481 33.7659 22.031L31.0492 19.6977C30.2159 18.981 28.7992 18.981 27.9825 19.6977L21.0492 25.6477C19.2825 27.1643 16.4992 27.1643 14.7159 25.6477L14.1659 25.1643C13.3992 24.5143 12.1325 24.4477 11.2825 25.031L3.08252 30.5477C2.84919 30.681 2.59919 30.7477 2.36585 30.7477Z" fill="#818181"/>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

BIN
doc/BuildRow.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

BIN
doc/EmptyWidget.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

BIN
doc/LogoWidget.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

BIN
doc/RErrorWidget.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

BIN
doc/RSegment.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -8,6 +8,7 @@ class TestPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// ignore: unused_local_variable
final TestLogic logic = Get.put(TestLogic());
return Scaffold(

View File

@@ -25,6 +25,7 @@ class DioErrorHandler {
}
//wrong captcha => "detail": "Captcha code is incorrect" - 403
// ignore: unused_element
void _handle403() {}
void _handleGeneric(DioException error) {

View File

@@ -1,4 +1,3 @@
import 'package:rasadyar_chicken/chicken.dart';
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
import 'package:rasadyar_core/core.dart';
@@ -15,7 +14,7 @@ class ChickenLocalDataSourceImp implements ChickenLocalDataSource {
@override
Future<void> initWidleyUsed() async {
List<WidelyUsedLocalItem> tmpList = [
/* List<WidelyUsedLocalItem> tmpList = [
WidelyUsedLocalItem(
index: 0,
pathId: 0,
@@ -43,7 +42,7 @@ class ChickenLocalDataSourceImp implements ChickenLocalDataSource {
iconPath: Assets.vec.cubeRotateSvg.path,
path: ChickenRoutes.buysInProvinceSteward,
),
];
]; */
}
@override

View File

@@ -1,4 +1,4 @@
import 'package:rasadyar_chicken/data/models/response/captcha/captcha_response_model.dart';
import 'package:rasadyar_chicken/data/models/response/user_info/user_info_model.dart';
import 'package:rasadyar_chicken/data/models/response/user_profile_model/user_profile_model.dart';

View File

@@ -11,7 +11,9 @@ class AuthRemoteDataSourceImp extends AuthRemoteDataSource {
AuthRemoteDataSourceImp(this._httpClient);
@override
Future<UserProfileModel?> login({required Map<String, dynamic> authRequest}) async {
Future<UserProfileModel?> login({
required Map<String, dynamic> authRequest,
}) async {
var res = await _httpClient.post<UserProfileModel?>(
'/api/login/',
data: authRequest,
@@ -40,7 +42,7 @@ class AuthRemoteDataSourceImp extends AuthRemoteDataSource {
@override
Future<UserInfoModel?> getUserInfo(String phoneNumber) async {
var res = await _httpClient.post<UserInfoModel?>(
'https://userbackend.rasadyaar.ir/api/send_otp/',
'https://userbackend.rasadyar.com/api/send_otp/',
data: {"mobile": phoneNumber, "state": ""},
fromJson: UserInfoModel.fromJson,
headers: {'Content-Type': 'application/json'},
@@ -56,7 +58,10 @@ class AuthRemoteDataSourceImp extends AuthRemoteDataSource {
await _httpClient.post(
'/steward-app-login/',
data: queryParameters,
headers: {'Content-Type': 'application/json', 'Authorization': 'Bearer $token'},
headers: {
'Content-Type': 'application/json',
'Authorization': 'Bearer $token',
},
);
}
}

View File

@@ -142,7 +142,7 @@ class ChickenRemoteDatasourceImp implements ChickenRemoteDatasource {
required String token,
required Map<String, dynamic> allocation,
}) async {
var res = await _httpClient.put(
await _httpClient.put(
'/steward-allocation/0/',
headers: {'Authorization': 'Bearer $token'},
data: allocation,
@@ -312,7 +312,7 @@ class ChickenRemoteDatasourceImp implements ChickenRemoteDatasource {
required String token,
required CreateStewardFreeBar body,
}) async {
var res = await _httpClient.post(
await _httpClient.post(
'/steward_free_bar/',
headers: {'Authorization': 'Bearer $token'},
data: body.toJson()..removeWhere((key, value) => value==null,),

View File

@@ -14,6 +14,7 @@ abstract class KillRegistrationRequest with _$KillRegistrationRequest {
int? quantity,
String? sendDate,
String? chickenBreed,
// ignore: invalid_annotation_target
@JsonKey(name: "Index_weight") double? indexWeight,
String? losses,
List<dynamic>? auctionList,

View File

@@ -20,6 +20,7 @@ abstract class PoultryOrder with _$PoultryOrder {
double? amount,
String? financialOperation,
int? remainQuantity,
// ignore: invalid_annotation_target
@JsonKey(name: "Index_weight") double? indexWeight,
Hatching? hatching,
String? finalState,

View File

@@ -122,6 +122,15 @@ class AuthLogic extends GetxController with GetTickerProviderStateMixin {
var tmpRoles = result?.role
?.where((element) => element == 'PoultryScience' || element == 'Steward')
.toList();
/*var tmpRoles = result?.role?.where((element) {
return element == 'PoultryScience' ||
element == 'Steward' ||
element == 'CityOperator' ||
element == 'CityJahad' ||
element.toLowerCase().contains("admin");
}).toList();*/
await tokenStorageService.saveRoles(_module, tmpRoles ?? []);
if (rememberMe.value) {
await tokenStorageService.saveUserPass(

View File

@@ -9,20 +9,10 @@ class RoleLogic extends GetxController {
void onInit() {
super.onInit();
List<String> items = tokenService.getUserLocal(Module.chicken)!.roles ?? [];
if (items.isNotEmpty ?? false) {
if (items.isNotEmpty) {
roles.assignAll(items);
}
}
@override
void onReady() {
// TODO: implement onReady
super.onReady();
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
}
}

View File

@@ -1,6 +1,5 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/data/common/fa_user_role.dart';
import 'package:rasadyar_chicken/presentation/widget/app_bar.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_core/core.dart';
@@ -15,11 +14,7 @@ class RolePage extends GetView<RoleLogic> {
isBase: true,
child: Column(
children: [
Assets.images.selectRole.image(
height: 212.h,
width: Get.width.w,
fit: BoxFit.cover,
),
Assets.images.selectRole.image(height: 212.h, width: Get.width.w, fit: BoxFit.cover),
ObxValue((data) {
return Expanded(
child: GridView.builder(
@@ -38,15 +33,9 @@ class RolePage extends GetView<RoleLogic> {
title: role.keys.first,
onTap: () async {
String route = role.values.first;
await controller.gService.saveRoute(
Module.chicken,
route,
);
await controller.gService.saveRoute(Module.chicken, route);
await controller.gService.saveRole(
Module.chicken,
data[index],
);
await controller.gService.saveRole(Module.chicken, data[index]);
Get.offAllNamed(route);
},
);
@@ -58,17 +47,9 @@ class RolePage extends GetView<RoleLogic> {
),
);
}
}
Widget roleCard({
required String title,
Function()? onTap,
int? width,
int? height,
}) {
Widget roleCard({required String title, Function()? onTap, int? width, int? height}) {
return Container(
width: width?.w ?? 128.w,
height: height?.h ?? 48.h,
@@ -84,6 +65,7 @@ Widget roleCard({
child: Text(
title,
style: AppFonts.yekan12Bold.copyWith(color: AppColor.blueNormal),
textAlign: TextAlign.center,
),
),
),

View File

@@ -0,0 +1,152 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart';
import '../widgets/step1_page.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;
RxInt activeStepperIndex = 0.obs;
PageController pageController = PageController(initialPage: 0);
//step1
TextEditingController nameOfThePoultryFarmUnit = TextEditingController();
//step2
RxInt sanitaryConditionOfTheHallIndex = (-1).obs;
RxInt ventilationStatusIndex = (-1).obs;
RxInt beddingStatusIndex = (-1).obs;
RxInt waterQualityIndex = (-1).obs;
RxInt fuelTypeIndex = (-1).obs;
RxInt sampleTypeIndex = (-1).obs;
//step3
RxInt grainQualityInputIndex = (-1).obs;
RxInt generatorOperatingStatusIndex = (-1).obs;
RxInt workerContractStatusIndex = (-1).obs;
RxInt newBeneficiaryRequestIndex = (-1).obs;
//step4
RxInt inspectorConclusionIndex = (-1).obs;
TextEditingController inspectorConclusionDescriptionController =
TextEditingController();
@override
void onReady() {
super.onReady();
activeStepperIndex.listen((value) {
pageController.animateToPage(
value,
duration: Duration(milliseconds: 300),
curve: Curves.linear,
);
});
}
@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;
}
void clearForm() {
nameOfThePoultryFarmUnit.clear();
activeStepperIndex.value = 0;
selectedTabIndex.value = 0;
}
void setSanitaryConditionOfTheHallIndex(int index) {
sanitaryConditionOfTheHallIndex.value =
index == sanitaryConditionOfTheHallIndex.value ? -1 : index;
}
void setFuelTypeIndex(int index) {
fuelTypeIndex.value = index == fuelTypeIndex.value ? -1 : index;
}
void setVentilationStatusIndex(int index) {
ventilationStatusIndex.value = index == ventilationStatusIndex.value
? -1
: index;
}
void setBeddingStatusIndex(int index) {
beddingStatusIndex.value = index == beddingStatusIndex.value ? -1 : index;
}
void setWaterQualityIndex(int index) {
waterQualityIndex.value = index == waterQualityIndex.value ? -1 : index;
}
void setSampleTypeIndex(int index) {
sampleTypeIndex.value = index == sampleTypeIndex.value ? -1 : index;
}
void setGrainQualityInputIndex(int index) {
grainQualityInputIndex.value = index == grainQualityInputIndex.value
? -1
: index;
}
void setGeneratorOperatingStatusIndex(int index) {
generatorOperatingStatusIndex.value =
index == generatorOperatingStatusIndex.value ? -1 : index;
}
void setWorkerContractStatusIndex(int index) {
workerContractStatusIndex.value = index == workerContractStatusIndex.value
? -1
: index;
}
void setNewBeneficiaryRequestIndex(int index) {
newBeneficiaryRequestIndex.value = index == newBeneficiaryRequestIndex.value
? -1
: index;
}
void setInspectorConclusionIndex(int index) {
inspectorConclusionIndex.value = index == inspectorConclusionIndex.value
? -1
: index;
}
}

View File

@@ -0,0 +1,934 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';
import 'package:rasadyar_chicken/presentation/widget/base_page/view.dart';
import 'package:rasadyar_chicken/presentation/widget/info_card/info_card.dart';
import 'package:rasadyar_core/core.dart';
import '../widgets/cu_bottom_sheet.dart';
import 'logic.dart';
class PoultryFarmInspectionHomePage extends GetView<PoultryFarmInspectionHomeLogic> {
const PoultryFarmInspectionHomePage({super.key});
@override
Widget build(BuildContext context) {
return ChickenBasePage(
onFilterTap: () {
//TODO
},
onSearchTap: () {
//TODO
},
onSearchChanged: (data) {
//TODO
},
backId: poultryFirstKey,
child: Stack(
fit: StackFit.expand,
children: [
Positioned.fill(
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
infoCards(),
segmentWidget(),
ObxValue((data) {
return data.value == 0 ? activeInspectionWidget() : inactiveInspectionWidget();
}, controller.selectedSegmentIndex),
],
),
),
Positioned(
right: 10,
bottom: 90.h,
child: RFab.add(
onPressed: () {
Get.bottomSheet(
addOrEditBottomSheet(controller),
isScrollControlled: true,
ignoreSafeArea: false,
).then((value) => controller.clearForm());
},
),
),
],
),
);
}
Padding infoCards() {
return Padding(
padding: const EdgeInsets.fromLTRB(9, 12, 9, 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
spacing: 8,
children: [
cardInfo(value: 2225256, description: 'بازرسی شده', color: const Color(0xFFB6DED8)),
cardInfo(value: 2050, description: 'بازرسی نشده', color: const Color(0xFFE9CED7)),
cardInfo(value: 2225256, description: 'عملکرد مناسب', color: const Color(0xFFCFE0FF)),
cardInfo(value: 55225, description: 'عملکرد ضعیف', color: const Color(0xFFF3D6CB)),
],
),
);
}
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.changeSegmentIndex(index),
backgroundColor: AppColor.whiteGreyNormal,
),
),
],
),
);
}
Widget activeInspectionWidget() {
return Expanded(
child: ObxValue((data) {
return RPaginatedListView(
listType: ListType.separated,
resource: data.first,
hasMore: false,
onLoadMore: () async {},
padding: EdgeInsets.fromLTRB(8, 8, 8, 80),
itemBuilder: (context, index) {
return ObxValue((val) {
return ExpandableListItem2(
selected: val.value.isEqual(index),
onTap: () => controller.toggleExpanded(index),
index: index,
child: activeinspecitonItemListWidget(),
secondChild: avtiveInspectionItemListExpandedWidget(),
labelColor: AppColor.blueLight,
labelIcon: Assets.vec.checkSquareSvg.path,
labelIconColor: AppColor.mediumGreyDarkHover,
);
}, controller.expandedIndex);
},
itemCount: 2,
separatorBuilder: (context, index) => SizedBox(height: 8.h),
);
}, controller.inspectionList),
);
}
Container avtiveInspectionItemListExpandedWidget() {
const farmerName = 'آرمان صادقی';
const showViolationLabel = true;
const violationLabel = 'پیگیری';
const breed = 'راس ۳۰۸';
const ageInDays = '۴۲';
const growPeriod = 'بهار ۱۴۰۴';
const licenceNumber = '۱۲۳۴۵۶۷۸';
const chickVolume = '۲۵,۰۰۰';
const hallRemain = '۲۳,۴۵۰';
const losses = '۱,۵۵۰';
const vetInfo = 'دکتر نرگس مرادی(۰۹۳۵۴۵۶۶۷۷۹)';
const showReportButton = true;
const reportStatus = 'ارسال تصویر جوجه ریزی فارم';
final reportColor = AppColor.redDark;
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(
farmerName,
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(color: AppColor.greenDark),
),
Spacer(),
Visibility(
visible: showViolationLabel,
child: Text(
violationLabel,
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: [
Text('نژاد:$breed', style: AppFonts.yekan14.copyWith(color: AppColor.textColor)),
Text(
' سن $ageInDays (روزه)',
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
),
Text(
' دوره جوجه ریزی:$growPeriod',
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
],
),
),
buildRow(title: 'شماره مجوز جوجه ریزی', value: licenceNumber),
buildUnitRow(title: 'حجم جوجه ریزی', value: chickVolume, unit: '(قطعه)'),
buildUnitRow(title: 'مانده در سالن', value: hallRemain, unit: '(قطعه)'),
buildUnitRow(title: 'تلفات', value: losses, unit: '(قطعه)'),
buildRow(title: 'دامپزشک فارم', value: vetInfo),
buildRow(
title: 'شرح بازرسی',
value: reportStatus,
titleStyle: AppFonts.yekan14.copyWith(color: reportColor),
valueStyle: AppFonts.yekan14.copyWith(color: reportColor),
),
Visibility(
visible: showReportButton,
child: RElevated(
text: 'ثبت بازرسی',
isFullWidth: true,
width: 150.w,
height: 40.h,
onPressed: () {},
textStyle: AppFonts.yekan20.copyWith(color: Colors.white),
backgroundColor: AppColor.greenNormal,
),
),
],
),
);
}
Widget activeinspecitonItemListWidget() {
const farmerName = 'آرمان صادقی';
const farmerMobile = '۰۹۱۲۱۲۳۴۵۶۷';
const unitName = 'فارم نمونه آفتاب';
const unitLicence = 'مجوز ۵۴۲۱-الف';
return Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
SizedBox(width: 20),
Expanded(
flex: 2,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 5,
children: [
Text(
farmerName,
textAlign: TextAlign.start,
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
),
Text(
farmerMobile,
textAlign: TextAlign.center,
style: AppFonts.yekan14.copyWith(color: AppColor.bgDark),
),
],
),
),
Expanded(
flex: 3,
child: Column(
spacing: 5,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
unitName,
textAlign: TextAlign.start,
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
),
Text(
unitLicence,
textAlign: TextAlign.left,
style: AppFonts.yekan12.copyWith(color: AppColor.bgDark),
),
],
),
),
Expanded(
flex: 1,
child: Assets.vec.scanSvg.svg(
width: 32.w,
height: 32.h,
colorFilter: ColorFilter.mode(AppColor.blueNormal, BlendMode.srcIn),
),
),
],
);
}
Widget inactiveInspectionWidget() {
return Expanded(
child: ObxValue((data) {
return RPaginatedListView(
listType: ListType.separated,
resource: data.first,
hasMore: false,
onLoadMore: () async {},
padding: EdgeInsets.fromLTRB(8, 8, 8, 80),
itemBuilder: (context, index) {
return ObxValue((val) {
return ExpandableListItem2(
selected: val.value.isEqual(index),
onTap: () => controller.toggleExpanded(index),
index: index,
child: inActiveinspecitonItemListWidget(),
secondChild: inAvtiveInspectionItemListExpandedWidget(),
labelColor: AppColor.blueLight,
labelIcon: Assets.vec.checkSquareSvg.path,
labelIconColor: AppColor.mediumGreyDarkHover,
);
}, controller.expandedIndex);
},
itemCount: 5,
separatorBuilder: (context, index) => SizedBox(height: 8.h),
);
}, controller.inspectionList),
);
}
Widget inActiveinspecitonItemListWidget() {
const farmerName = 'زهرا موسوی';
const farmerMobile = '۰۹۳۸۸۸۷۷۶۶۵';
const unitName = 'کشت و پرورش افق سبز';
const unitLicence = 'مجوز ۷۶۳۲-ج';
return Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
SizedBox(width: 20),
Expanded(
flex: 2,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 5,
children: [
Text(
farmerName,
textAlign: TextAlign.start,
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
),
Text(
farmerMobile,
textAlign: TextAlign.center,
style: AppFonts.yekan14.copyWith(color: AppColor.bgDark),
),
],
),
),
Expanded(
flex: 3,
child: Column(
spacing: 5,
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
unitName,
textAlign: TextAlign.start,
style: AppFonts.yekan12.copyWith(color: AppColor.blueNormal),
),
Text(
unitLicence,
textAlign: TextAlign.left,
style: AppFonts.yekan12.copyWith(color: AppColor.bgDark),
),
],
),
),
Expanded(
flex: 1,
child: Assets.vec.scanSvg.svg(
width: 32.w,
height: 32.h,
colorFilter: ColorFilter.mode(AppColor.blueNormal, BlendMode.srcIn),
),
),
],
);
}
Container inAvtiveInspectionItemListExpandedWidget() {
const farmerName = 'زهرا موسوی';
const showViolationLabel = false;
const violationLabel = 'عادی';
const breed = 'کاب ۵۰۰';
const ageInDays = '۳۵';
const growPeriod = 'پاییز ۱۴۰۳';
const licenceNumber = '۸۹۴۵۶۱۲۳';
const chickVolume = '۱۸,۵۰۰';
const hallRemain = '۱۷,۹۴۰';
const losses = '۵۶۰';
const vetInfo = 'دکتر حمید نادری(۰۹۱۳۴۴۵۵۶۶۷)';
const reportStatus = 'بازدید تایید شده';
final reportColor = AppColor.greenNormal;
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(
farmerName,
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(color: AppColor.greenDark),
),
Spacer(),
Visibility(
visible: showViolationLabel,
child: Text(
violationLabel,
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: [
Text('نژاد:$breed', style: AppFonts.yekan14.copyWith(color: AppColor.textColor)),
Text(
' سن $ageInDays (روزه)',
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
),
Text(
' دوره جوجه ریزی:$growPeriod',
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
],
),
),
buildRow(title: 'شماره مجوز جوجه ریزی', value: licenceNumber),
buildUnitRow(title: 'حجم جوجه ریزی', value: chickVolume, unit: '(قطعه)'),
buildUnitRow(title: 'مانده در سالن', value: hallRemain, unit: '(قطعه)'),
buildUnitRow(title: 'تلفات', value: losses, unit: '(قطعه)'),
buildRow(title: 'دامپزشک فارم', value: vetInfo),
buildRow(
title: 'شرح بازرسی',
value: reportStatus,
titleStyle: AppFonts.yekan14.copyWith(color: reportColor),
valueStyle: AppFonts.yekan14.copyWith(color: reportColor),
),
ROutlinedElevated(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 4,
children: [
Assets.vec.excelDownloadSvg.svg(
width: 24.w,
height: 24.h,
colorFilter: ColorFilter.mode(AppColor.greenDark, BlendMode.srcIn),
),
Text(
'مشاهده جزییات ',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.greenDark),
),
],
),
borderColor: AppColor.greenDark,
onPressed: () {
Get.bottomSheet(detailsWidget(), isScrollControlled: true, isDismissible: true);
},
),
],
),
);
}
Widget detailsWidget() {
return BaseBottomSheet(
height: Get.height * 0.8,
child: Column(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Column(
children: [
Row(
children: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 4, vertical: 10),
child: Text(
'جزییات',
style: AppFonts.yekan18Bold.copyWith(color: AppColor.iconColor),
),
),
],
),
Divider(color: AppColor.blackLightHover, height: 1, thickness: 1),
ObxValue((data) {
return tabBarWidget(
['اطلاعات', 'پاییش سلامت', 'زیرساخت', 'مستندات'],
controller.selectedTabIndex.value,
(index) => controller.changeTab(index),
);
}, controller.selectedTabIndex),
ObxValue((data) {
switch (data.value) {
case 0:
return infoTable();
case 1:
return healthTable();
case 2:
return infrastructureTable();
case 3:
return documentsTable();
default:
return infoTable();
}
}, controller.selectedTabIndex),
],
),
),
// Expanded در سطح بالاتر
],
),
);
}
Container infoTable() {
return Container(
height: Get.height,
width: Get.width,
child: Column(
children: [
SizedBox(height: 10),
Row(
children: [
Text('مشخصات کلی', style: AppFonts.yekan16Bold.copyWith(color: AppColor.iconColor)),
],
),
SizedBox(height: 10),
Container(
clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
child: Column(
children: [
rTableRow(title: 'نام واحد مرغداری', value: 'لذیذ'),
rTableRow(title: 'کد یکتا / شناسه واحد', value: '2541415'),
rTableRow(title: 'نام مالک / بهره‌بردار', value: 'مرغداری احمدی'),
rTableRow(title: 'موجودی سوخت اضطراری', value: '200 لیتر'),
rTableRow(title: 'شهر/تعاونی', value: 'خرم آباد/تعاونی خرم آباد'),
rTableRow(title: 'شماره تلفن واحد', value: '021-12345678'),
rTableRow(title: 'دامپزشک فارم', value: 'dd dd (05218569685)'),
rTableRow(title: 'سالن', value: '2'),
rTableRow(title: 'تاریخ ثبت جوجه ریزی', value: '1402/09/19 (10:12)'),
rTableRow(title: 'شهر/تعاونی', value: 'خرم آباد/تعاونی خرم آباد'),
rTableRow(title: 'شماره تلفن واحد', value: '021-12345678'),
rTableRow(title: 'دامپزشک فارم', value: 'dd dd (05218569685)'),
rTableRow(title: 'سالن', value: '2'),
rTableRow(title: 'تاریخ ثبت جوجه ریزی', value: '1402/09/19 (10:12)'),
],
),
),
],
),
);
}
Row rTableRow({String? title, String? value}) {
return Row(
children: [
Expanded(
flex: 1,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 9, vertical: 11),
alignment: Alignment.centerRight,
decoration: BoxDecoration(
color: AppColor.bgLight2,
border: Border(bottom: BorderSide(color: AppColor.blackLightHover, width: 1)),
),
child: Text(
title ?? '',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.iconColor),
),
),
),
Expanded(
flex: 1,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 9, vertical: 11),
alignment: Alignment.centerRight,
decoration: BoxDecoration(
border: Border(bottom: BorderSide(color: AppColor.blackLightHover, width: 1)),
),
child: Text(
value ?? '',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor),
),
),
),
],
);
}
Widget tabBarWidget(List<String> tabs, int selectedIndex, Function(int) onTabSelected) {
return SizedBox(
height: 38.h,
width: Get.width,
child: Stack(
fit: StackFit.expand,
children: [
Positioned(
right: 0,
top: 0,
bottom: 0,
child: Row(
children: [
...tabs.map(
(tab) => GestureDetector(
onTap: () => onTabSelected(tabs.indexOf(tab)),
behavior: HitTestBehavior.opaque,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 11),
decoration: BoxDecoration(
border: tab == tabs[selectedIndex]
? Border(bottom: BorderSide(color: AppColor.blueNormalOld, width: 3))
: null,
),
child: Text(
tab,
style: AppFonts.yekan12Bold.copyWith(
color: tab == tabs[selectedIndex]
? AppColor.blueNormalOld
: AppColor.mediumGrey,
),
),
),
),
),
],
),
),
Positioned(
bottom: 0,
left: 0,
right: 0,
child: Divider(color: AppColor.blackLightHover, height: 1, thickness: 1),
),
],
),
);
}
Widget healthTable() {
return Container(
height: Get.height,
width: Get.width,
child: Column(
children: [
SizedBox(height: 10),
Row(
children: [
Text('پاییش سلامت', style: AppFonts.yekan16Bold.copyWith(color: AppColor.iconColor)),
],
),
SizedBox(height: 10),
Container(
clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
child: Column(
children: [
rTableRow(title: 'نام واحد مرغداری', value: 'لذیذ'),
rTableRow(title: 'کد یکتا / شناسه واحد', value: '2541415'),
rTableRow(title: 'نام مالک / بهره‌بردار', value: 'مرغداری احمدی'),
rTableRow(title: 'موجودی سوخت اضطراری', value: '200 لیتر'),
rTableRow(title: 'شهر/تعاونی', value: 'خرم آباد/تعاونی خرم آباد'),
rTableRow(title: 'شماره تلفن واحد', value: '021-12345678'),
rTableRow(title: 'دامپزشک فارم', value: 'dd dd (05218569685)'),
rTableRow(title: 'سالن', value: '2'),
rTableRow(title: 'تاریخ ثبت جوجه ریزی', value: '1402/09/19 (10:12)'),
rTableRow(title: 'شهر/تعاونی', value: 'خرم آباد/تعاونی خرم آباد'),
rTableRow(title: 'شماره تلفن واحد', value: '021-12345678'),
rTableRow(title: 'دامپزشک فارم', value: 'dd dd (05218569685)'),
rTableRow(title: 'سالن', value: '2'),
rTableRow(title: 'تاریخ ثبت جوجه ریزی', value: '1402/09/19 (10:12)'),
],
),
),
],
),
);
}
Widget infrastructureTable() {
return Container(
height: Get.height,
width: Get.width,
child: Column(
children: [
SizedBox(height: 10),
Row(
children: [
Text('زیرساخت', style: AppFonts.yekan16Bold.copyWith(color: AppColor.iconColor)),
],
),
SizedBox(height: 10),
Container(
clipBehavior: Clip.hardEdge,
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
child: Column(
children: [
rTableRow(title: 'نام واحد مرغداری', value: 'لذیذ'),
rTableRow(title: 'کد یکتا / شناسه واحد', value: '2541415'),
rTableRow(title: 'نام مالک / بهره‌بردار', value: 'مرغداری احمدی'),
rTableRow(title: 'موجودی سوخت اضطراری', value: '200 لیتر'),
rTableRow(title: 'شهر/تعاونی', value: 'خرم آباد/تعاونی خرم آباد'),
rTableRow(title: 'شماره تلفن واحد', value: '021-12345678'),
rTableRow(title: 'دامپزشک فارم', value: 'dd dd (05218569685)'),
rTableRow(title: 'سالن', value: '2'),
rTableRow(title: 'تاریخ ثبت جوجه ریزی', value: '1402/09/19 (10:12)'),
rTableRow(title: 'شهر/تعاونی', value: 'خرم آباد/تعاونی خرم آباد'),
rTableRow(title: 'شماره تلفن واحد', value: '021-12345678'),
rTableRow(title: 'دامپزشک فارم', value: 'dd dd (05218569685)'),
rTableRow(title: 'سالن', value: '2'),
rTableRow(title: 'تاریخ ثبت جوجه ریزی', value: '1402/09/19 (10:12)'),
],
),
),
],
),
);
}
Widget documentsTable() {
return Container(
height: Get.height,
width: Get.width,
child: Column(
children: [
SizedBox(height: 10),
Row(
children: [
Text('مستندات', style: AppFonts.yekan16Bold.copyWith(color: AppColor.iconColor)),
],
),
SizedBox(height: 16),
Container(
height: 135.h,
width: Get.width,
decoration: BoxDecoration(
color: AppColor.bgLight,
borderRadius: BorderRadius.circular(8),
),
child: Column(
spacing: 10,
children: [
SizedBox(
height: 100.h,
width: Get.width,
child: ListView.separated(
itemCount: 10,
padding: EdgeInsets.symmetric(horizontal: 12),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return Container(
width: 80.w,
height: 80.h,
decoration: BoxDecoration(
color: Color(0x33000000),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage("https://picsum.photos/150/150?random=$index"),
),
borderRadius: BorderRadius.circular(8),
),
);
},
separatorBuilder: (context, index) => SizedBox(width: 10),
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 18),
child: Row(
children: [
Text(
'200 فارم در این سالن تخمین زده شده است.',
textAlign: TextAlign.right,
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor),
),
],
),
),
],
),
),
SizedBox(height: 16),
Container(
height: 135.h,
width: Get.width,
decoration: BoxDecoration(
color: AppColor.bgLight,
borderRadius: BorderRadius.circular(8),
),
child: Column(
spacing: 10,
children: [
SizedBox(
height: 100.h,
width: Get.width,
child: ListView.separated(
itemCount: 10,
padding: EdgeInsets.symmetric(horizontal: 12),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return Container(
width: 80.w,
height: 80.h,
decoration: BoxDecoration(
color: Color(0x33000000),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
"https://picsum.photos/150/150?random=${index * 2 + 1}",
),
),
borderRadius: BorderRadius.circular(8),
),
);
},
separatorBuilder: (context, index) => SizedBox(width: 10),
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 18),
child: Row(
children: [
Text(
'انبار نهاده ها',
textAlign: TextAlign.right,
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor),
),
],
),
),
],
),
),
SizedBox(height: 16),
Container(
height: 135.h,
width: Get.width,
decoration: BoxDecoration(
color: AppColor.bgLight,
borderRadius: BorderRadius.circular(8),
),
child: Column(
spacing: 10,
children: [
SizedBox(
height: 100.h,
width: Get.width,
child: ListView.separated(
itemCount: 10,
padding: EdgeInsets.symmetric(horizontal: 12),
scrollDirection: Axis.horizontal,
itemBuilder: (context, index) {
return Container(
width: 80.w,
height: 80.h,
decoration: BoxDecoration(
color: Color(0x33000000),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(
"https://picsum.photos/150/150?random=${index * 3 + 1}",
),
),
borderRadius: BorderRadius.circular(8),
),
);
},
separatorBuilder: (context, index) => SizedBox(width: 10),
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 18),
child: Row(
children: [
Text(
'تلفات',
textAlign: TextAlign.right,
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor),
),
],
),
),
],
),
),
],
),
);
}
}

View File

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

View File

@@ -0,0 +1,59 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_farm_inspection/home/logic.dart';
import 'package:rasadyar_core/core.dart';
Widget farmInfoWidget({
required PoultryFarmInspectionHomeLogic controller,
required String title,
required Widget child,
EdgeInsets? padding,
}) {
return Stack(
clipBehavior: Clip.none,
children: [
Positioned.fill(
child: Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 0.50, color: AppColor.mediumGrey),
),
padding:
padding ?? EdgeInsets.symmetric(horizontal: 12.w, vertical: 11.h),
child: child,
),
),
Positioned(
top: -17,
right: 7,
child: Container(
padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 5.h),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 0.50, color: AppColor.mediumGrey),
),
child: Text(
title,
style: AppFonts.yekan14.copyWith(color: AppColor.iconColor),
),
),
),
],
);
}
Widget cardInfo({required Widget child, EdgeInsets? padding}) {
return Container(
width: Get.width,
padding: padding ?? EdgeInsets.symmetric(horizontal: 12.w, vertical: 14.h),
decoration: BoxDecoration(
color: AppColor.bgLight,
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 1, color: AppColor.blackLight),
),
child: child,
);
}

View File

@@ -0,0 +1,224 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart';
import '../home/logic.dart';
import 'step1_page.dart';
import 'step2_page.dart';
import 'step3_page.dart';
import 'step4_page.dart';
import 'step5_page.dart';
Widget addOrEditBottomSheet(PoultryFarmInspectionHomeLogic controller) {
List<Widget> pages = [
step1Page(controller),
step2Page(controller),
step3Page(controller),
step4Page(controller),
step5Page(controller),
];
return BaseBottomSheet(
height: Get.height,
rootChild: Column(
children: [
ObxValue((data) {
return stepper(activeStep: data.value);
}, controller.activeStepperIndex),
Expanded(
child: PageView.builder(
physics: const NeverScrollableScrollPhysics(),
reverse: true,
controller: controller.pageController,
itemBuilder: (context, index) => pages[index],
),
),
ObxValue((data) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 16),
child: Row(
spacing: 16,
children: [
Expanded(
child: RElevated(
height: 40.h,
backgroundColor: AppColor.greenNormal,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.arrow_back_ios, color: Colors.white),
Text('ادامه'),
],
),
onPressed: () {
if (controller.activeStepperIndex.value <4) {
controller.activeStepperIndex.value++;
}
},
),
),
Expanded(
child: ROutlinedElevated(
borderColor: AppColor.error,
height: 40.h,
child: Text('برگشت'),
enabled: controller.activeStepperIndex.value > 0,
onPressed: () {
if (controller.activeStepperIndex.value > 0) {
controller.activeStepperIndex.value--;
}
},
),
),
],
),
);
}, controller.activeStepperIndex),
],
),
);
}
class stepper extends StatelessWidget {
const stepper({super.key, required this.activeStep});
final int activeStep;
@override
Widget build(BuildContext context) {
return Directionality(
textDirection: TextDirection.ltr,
child: SizedBox(
height: 24,
width: Get.width,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: activeStep >= 0
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
shape: BoxShape.circle,
),
width: 24.w,
height: 24.h,
child: Text(
'1',
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(
color: activeStep >= 0 ? Colors.white : AppColor.iconColor,
),
),
),
Expanded(
child: Divider(
color: activeStep >= 1
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
thickness: 8,
),
),
Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: activeStep >= 1
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
shape: BoxShape.circle,
),
width: 24.w,
height: 24.h,
child: Text(
'2',
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(
color: activeStep >= 1 ? Colors.white : AppColor.iconColor,
),
),
),
Expanded(
child: Divider(
color: activeStep >= 2
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
thickness: 8,
),
),
Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: activeStep >= 2
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
shape: BoxShape.circle,
),
width: 24.w,
height: 24.h,
child: Text(
'3',
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(
color: activeStep >= 2 ? Colors.white : AppColor.iconColor,
),
),
),
Expanded(
child: Divider(
color: activeStep >= 3
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
thickness: 8,
),
),
Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: activeStep >= 3
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
shape: BoxShape.circle,
),
width: 24.w,
height: 24.h,
child: Text(
'4',
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(
color: activeStep >= 3 ? Colors.white : AppColor.iconColor,
),
),
),
Expanded(
child: Divider(
color: activeStep >= 4
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
thickness: 8,
),
),
Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: activeStep >= 4
? AppColor.greenNormalHover
: AppColor.whiteNormalActive,
shape: BoxShape.circle,
),
width: 24.w,
height: 24.h,
child: Text(
'5',
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(
color: activeStep >= 3 ? Colors.white : AppColor.iconColor,
),
),
),
],
),
),
);
}
}

View File

@@ -0,0 +1,166 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_farm_inspection/widgets/card_info.dart';
import 'package:rasadyar_core/core.dart';
import '../home/logic.dart';
Widget step1Page(PoultryFarmInspectionHomeLogic controller) {
return SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
SizedBox(height: 25.h),
Container(
height: 610.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'اطلاعات پایه واحد',
child: basicUnitInformation(controller),
),
),
SizedBox(height: 30.h),
Container(
height: 400.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'اطلاعات جوجه ریزی',
child: hatchingInformation(controller),
),
),
SizedBox(height: 16.h),
],
),
);
}
Column basicUnitInformation(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نام واحد مرغداری',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'کد یکتا / شناسه واحد',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نام مالک / بهره‌بردار',
filled: true,
filledColor: AppColor.bgLight,
),
ResourceOverlayDropdown(
items: Resource.success(['مالک', 'بهره‌بردار', 'مشاور', 'دیگر']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'نوع مالکیت'),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'کد ملی بهره‌بردار',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'شماره تماس بهره‌بردار',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'ظرفیت اسمی سالن‌ها',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نوع سیستم پرورش',
filled: true,
filledColor: AppColor.bgLight,
),
RElevated(
isFullWidth: true,
height: 40.h,
backgroundColor: AppColor.greenNormal,
onPressed: () {},
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 4,
children: [
Icon(Icons.my_location_rounded, color: Colors.white, size: 24),
Text('دریافت موقعیت جغرافیایی', style: AppFonts.yekan14.copyWith(color: Colors.white)),
],
),
),
],
);
}
Column hatchingInformation(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تاریخ جوجه ریزی',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد جوجه‌ریزی اولیه',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'منبع تهیه جوجه',
filled: true,
filledColor: AppColor.bgLight,
),
ResourceOverlayDropdown(
items: Resource.success(['سرابی', 'پژدر', 'روتوایلر', 'دیگر']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'نوع نژاد'),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'گرید جوجه',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میانگین وزن جوجه در ورود',
filled: true,
filledColor: AppColor.bgLight,
),
],
);
}

View File

@@ -0,0 +1,499 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_farm_inspection/widgets/card_info.dart';
import 'package:rasadyar_core/core.dart';
import '../home/logic.dart';
Widget step2Page(PoultryFarmInspectionHomeLogic controller) {
return SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
SizedBox(height: 35.h),
Container(
height: 760.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'وضعیت عمومی سالن',
child: generalConditionOfTheHall(controller),
),
),
SizedBox(height: 30.h),
Container(
height: 430.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'تلفات',
child: casualtiesInformation(controller),
),
),
SizedBox(height: 24.h),
Container(
height: 450.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'بیماری‌ها و وضعیت سلامت',
child: diseasesAndHealthInformation(controller),
),
),
],
),
);
}
Column generalConditionOfTheHall(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 12),
cardInfo(
padding: EdgeInsets.fromLTRB(0, 12, 12, 6),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
height: 80.h,
width: 80.w,
padding: EdgeInsets.all(22),
decoration: BoxDecoration(
color: Color(0xFFE9E9E9),
border: Border.all(width: 1, color: AppColor.blackLightHover),
borderRadius: BorderRadius.circular(8),
),
child: Assets.vec.galleryAddSvg.svg(width: 36, height: 36),
),
],
),
),
Text(
'تعداد موجود فعلی',
style: AppFonts.yekan14.copyWith(color: AppColor.textColorLight),
),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'وضعیت بهداشتی سالن',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
formChips(
selectedIndex: data.value,
index: 0,
label: 'عالی',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
formChips(
selectedIndex: data.value,
index: 1,
label: 'خوب',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
formChips(
selectedIndex: data.value,
index: 2,
label: 'متوسط',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
formChips(
selectedIndex: data.value,
index: 3,
label: 'ضعیف',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
],
);
}, controller.sanitaryConditionOfTheHallIndex),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text('وضعیت تهویه', style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2)),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setVentilationStatusIndex(index),
selectedIndex: data.value,
index: 0,
label: 'خشک',
),
formChips(
onTap: (index) => controller.setVentilationStatusIndex(index),
selectedIndex: data.value,
index: 1,
label: 'نیمه‌مرطوب',
),
formChips(
onTap: (index) => controller.setVentilationStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'مرطوب',
),
],
);
}, controller.ventilationStatusIndex),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text('وضعیت بستر', style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2)),
ObxValue((data) {
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
spacing: 8,
children: [
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 0,
label: 'خشک',
),
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 1,
label: 'نیمه‌مرطوب',
),
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'مرطوب',
),
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'نیازمند اصلاح',
),
],
),
);
}, controller.beddingStatusIndex),
],
),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'دمای سالن',
filled: true,
filledColor: AppColor.bgLight,
maxLines: 1,
minLines: 1,
keyboardType: TextInputType.number,
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'کیفیت آب مصرفی',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setWaterQualityIndex(index),
selectedIndex: data.value,
index: 0,
label: 'چاه',
),
formChips(
onTap: (index) => controller.setWaterQualityIndex(index),
selectedIndex: data.value,
index: 1,
label: 'شهری',
),
formChips(
onTap: (index) => controller.setWaterQualityIndex(index),
selectedIndex: data.value,
index: 2,
label: 'تصفیه‌شده',
),
],
);
}, controller.waterQualityIndex),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'کیفیت آب مصرفی',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
formChips(
onTap: (index) => controller.setFuelTypeIndex(index),
selectedIndex: data.value,
index: 0,
label: 'گازوییل',
),
formChips(
onTap: (index) => controller.setFuelTypeIndex(index),
selectedIndex: data.value,
index: 1,
label: 'بنزین',
),
formChips(
onTap: (index) => controller.setFuelTypeIndex(index),
selectedIndex: data.value,
index: 2,
label: 'گاز',
),
formChips(
selectedIndex: data.value,
index: 3,
label: 'نفت',
onTap: (index) => controller.setFuelTypeIndex(index),
),
],
);
}, controller.fuelTypeIndex),
],
),
),
],
);
}
ChoiceChip formChips({
required int selectedIndex,
required int index,
required String label,
required Function(int) onTap,
}) {
return ChoiceChip(
selectedColor: AppColor.green1Normal,
labelStyle: index == selectedIndex
? AppFonts.yekan14Bold.copyWith(color: Colors.white)
: AppFonts.yekan14.copyWith(color: AppColor.textColor),
surfaceTintColor: Colors.white,
checkmarkColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
side: index == selectedIndex
? BorderSide.none
: BorderSide(width: 1, color: AppColor.blackLightHover),
),
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 6),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
label: Text(label),
selected: index == selectedIndex,
onSelected: (value) => onTap(index),
);
}
Column casualtiesInformation(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد تلفات عادی دوره',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تلفات غیرعادی',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'منبع تهیه جوجه',
filled: true,
filledColor: AppColor.bgLight,
),
ResourceOverlayDropdown(
items: Resource.success(['بیماری', 'قطعی برق', 'استرس گرمایی', 'مشکلات دانه']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'علت احتمالی تلفات غیرعادی'),
),
ResourceOverlayDropdown(
items: Resource.success(['انجام نشد', 'انجام شد']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'نمونه‌برداری انجام‌شده'),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text('نوع نمونه', style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2)),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setSampleTypeIndex(index),
selectedIndex: data.value,
index: 0,
label: 'رنده',
),
formChips(
onTap: (index) => controller.setSampleTypeIndex(index),
selectedIndex: data.value,
index: 1,
label: 'لاشه',
),
formChips(
onTap: (index) => controller.setSampleTypeIndex(index),
selectedIndex: data.value,
index: 2,
label: 'ترکیبی',
),
],
);
}, controller.sampleTypeIndex),
],
),
),
],
);
}
Column diseasesAndHealthInformation(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
ResourceOverlayDropdown(
items: Resource.success(['بیماری', 'قطعی برق', 'استرس گرمایی', 'مشکلات دانه']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'وجود علائم بیماری در گله'),
),
ResourceOverlayDropdown(
items: Resource.success(['انجام نشد', 'انجام شد']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'نوع بیماری تشخیص داده‌شده / مشکوک'),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تاریخ واکسیناسیون‌های انجام‌شده',
filled: true,
filledColor: AppColor.bgLight,
),
ResourceOverlayDropdown(
items: Resource.success([
'واکسن 1',
'واکسن 2',
'واکسن 3',
'واکسن 4',
'واکسن 5',
'واکسن 6',
'واکسن 7',
'واکسن 8',
'واکسن 9',
'واکسن 10',
]),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'نوع واکسن'),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'شرکت تولیدکننده',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نام مسئول فنی بهداشتی',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نام مسئول فنی نظام مهندسی',
filled: true,
filledColor: AppColor.bgLight,
),
],
);
}

View File

@@ -0,0 +1,719 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_farm_inspection/widgets/card_info.dart';
import 'package:rasadyar_core/core.dart';
import '../home/logic.dart';
Widget step3Page(PoultryFarmInspectionHomeLogic controller) {
return SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
SizedBox(height: 35.h),
Container(
height: 410.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'نهاده و خوراک',
child: agriculturalInput(controller),
),
),
SizedBox(height: 30.h),
Container(
height: 650.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'زیرساخت و انرژی',
child: infrastructureAndEnergy(controller),
),
),
SizedBox(height: 24.h),
Container(
height: 405.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'نیروی انسانی',
child: humanResources(controller),
),
),
SizedBox(height: 24.h),
Container(
height: 440.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'تسهیلات و حمایت‌ها',
child: facilitiesAndSupport(controller),
),
),
],
),
);
}
Column agriculturalInput2(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
cardInfo(
padding: EdgeInsets.fromLTRB(0, 12, 12, 6),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
height: 80.h,
width: 80.w,
padding: EdgeInsets.all(22),
decoration: BoxDecoration(
color: Color(0xFFE9E9E9),
border: Border.all(width: 1, color: AppColor.blackLightHover),
borderRadius: BorderRadius.circular(8),
),
child: Assets.vec.galleryAddSvg.svg(width: 36, height: 36),
),
],
),
),
Text(
'تعداد موجود فعلی',
style: AppFonts.yekan14.copyWith(color: AppColor.textColorLight),
),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'وضعیت بهداشتی سالن',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
formChips(
selectedIndex: data.value,
index: 0,
label: 'عالی',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
formChips(
selectedIndex: data.value,
index: 1,
label: 'خوب',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
formChips(
selectedIndex: data.value,
index: 2,
label: 'متوسط',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
formChips(
selectedIndex: data.value,
index: 3,
label: 'ضعیف',
onTap: (index) => controller.setSanitaryConditionOfTheHallIndex(index),
),
],
);
}, controller.sanitaryConditionOfTheHallIndex),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text('وضعیت تهویه', style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2)),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setVentilationStatusIndex(index),
selectedIndex: data.value,
index: 0,
label: 'خشک',
),
formChips(
onTap: (index) => controller.setVentilationStatusIndex(index),
selectedIndex: data.value,
index: 1,
label: 'نیمه‌مرطوب',
),
formChips(
onTap: (index) => controller.setVentilationStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'مرطوب',
),
],
);
}, controller.ventilationStatusIndex),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text('وضعیت بستر', style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2)),
ObxValue((data) {
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
spacing: 8,
children: [
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 0,
label: 'خشک',
),
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 1,
label: 'نیمه‌مرطوب',
),
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'مرطوب',
),
formChips(
onTap: (index) => controller.setBeddingStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'نیازمند اصلاح',
),
],
),
);
}, controller.beddingStatusIndex),
],
),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'دمای سالن',
filled: true,
filledColor: AppColor.bgLight,
maxLines: 1,
minLines: 1,
keyboardType: TextInputType.number,
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'کیفیت آب مصرفی',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setWaterQualityIndex(index),
selectedIndex: data.value,
index: 0,
label: 'چاه',
),
formChips(
onTap: (index) => controller.setWaterQualityIndex(index),
selectedIndex: data.value,
index: 1,
label: 'شهری',
),
formChips(
onTap: (index) => controller.setWaterQualityIndex(index),
selectedIndex: data.value,
index: 2,
label: 'تصفیه‌شده',
),
],
);
}, controller.waterQualityIndex),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'کیفیت آب مصرفی',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
formChips(
onTap: (index) => controller.setFuelTypeIndex(index),
selectedIndex: data.value,
index: 0,
label: 'گازوییل',
),
formChips(
onTap: (index) => controller.setFuelTypeIndex(index),
selectedIndex: data.value,
index: 1,
label: 'بنزین',
),
formChips(
onTap: (index) => controller.setFuelTypeIndex(index),
selectedIndex: data.value,
index: 2,
label: 'گاز',
),
formChips(
selectedIndex: data.value,
index: 3,
label: 'نفت',
onTap: (index) => controller.setFuelTypeIndex(index),
),
],
);
}, controller.fuelTypeIndex),
],
),
),
],
);
}
ChoiceChip formChips({
required int selectedIndex,
required int index,
required String label,
required Function(int) onTap,
}) {
return ChoiceChip(
selectedColor: AppColor.green1Normal,
labelStyle: index == selectedIndex
? AppFonts.yekan14Bold.copyWith(color: Colors.white)
: AppFonts.yekan14.copyWith(color: AppColor.textColor),
surfaceTintColor: Colors.white,
checkmarkColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
side: index == selectedIndex
? BorderSide.none
: BorderSide(width: 1, color: AppColor.blackLightHover),
),
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 6),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
label: Text(label),
selected: index == selectedIndex,
onSelected: (value) => onTap(index),
);
}
Column infrastructureAndEnergy(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نوع ژنراتور',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'ظرفیت (KVA)',
filled: true,
filledColor: AppColor.bgLight,
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'وضعیت عملکرد ژنراتور',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setGeneratorOperatingStatusIndex(index),
selectedIndex: data.value,
index: 0,
label: 'سالم',
),
formChips(
onTap: (index) => controller.setGeneratorOperatingStatusIndex(index),
selectedIndex: data.value,
index: 1,
label: 'نیمه‌سالم',
),
formChips(
onTap: (index) => controller.setGeneratorOperatingStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'معیوب',
),
],
);
}, controller.generatorOperatingStatusIndex),
],
),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میزان موجودی سوخت اضطراری (لیتر)',
filled: true,
filledColor: AppColor.bgLight,
),
ResourceOverlayDropdown(
items: Resource.success(['بیماری', 'قطعی برق', 'استرس گرمایی', 'مشکلات دانه']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'علت احتمالی تلفات غیرعادی'),
),
ResourceOverlayDropdown(
items: Resource.success(['ندارد', 'دارد']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'سابقه قطعی برق دوره جاری'),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد تلفات',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'مدت قطعی',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'توضیحات تکمیلی',
filled: true,
maxLines: 3,
minLines: 3,
filledColor: AppColor.bgLight,
),
],
);
}
Column agriculturalInput(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میزان نهاده مصرفی تا روز بازدید (کیلوگرم)',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میزان نهاده موجود در انبار',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میزان نهاده خریداری‌شده و حمل‌نشده از بازارگاه',
filled: true,
filledColor: AppColor.bgLight,
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text('کیفیت دانه', style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2)),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setSampleTypeIndex(index),
selectedIndex: data.value,
index: 0,
label: 'خوب',
),
formChips(
onTap: (index) => controller.setSampleTypeIndex(index),
selectedIndex: data.value,
index: 1,
label: 'متوسط',
),
formChips(
onTap: (index) => controller.setGrainQualityInputIndex(index),
selectedIndex: data.value,
index: 2,
label: 'ضعیف',
),
],
);
}, controller.grainQualityInputIndex),
],
),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'فرمول دانه (در صورت ارائه)',
filled: true,
minLines: 3,
maxLines: 3,
filledColor: AppColor.bgLight,
),
],
);
}
Column humanResources(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد افراد شاغل',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد افراد بومی',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد افراد غیر بومی',
filled: true,
maxLines: 3,
minLines: 3,
filledColor: AppColor.bgLight,
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'وضعیت قرارداد کارگران',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setWorkerContractStatusIndex(index),
selectedIndex: data.value,
index: 0,
label: 'دائم',
),
formChips(
onTap: (index) => controller.setWorkerContractStatusIndex(index),
selectedIndex: data.value,
index: 1,
label: 'موقت',
),
formChips(
onTap: (index) => controller.setWorkerContractStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'روزمزدی',
),
],
);
}, controller.workerContractStatusIndex),
],
),
),
ResourceOverlayDropdown(
items: Resource.success(['آموزش‌ ندیده است', 'آموزش‌ دیده است']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'آموزش‌دیده در حوزه بهداشت و امنیت زیستی'),
),
],
);
}
Column facilitiesAndSupport(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تسهیلات دریافتی فعال',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نوع تسهیلات',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'مبلغ',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'سال دریافت',
filled: true,
filledColor: AppColor.bgLight,
),
ResourceOverlayDropdown(
items: Resource.success(['دریافت نشده', 'دریافت شده']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'وضعیت بازپرداخت'),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'درخواست جدید بهره‌بردار',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 0,
label: 'نهاده',
),
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 1,
label: 'تسهیلات',
),
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 2,
label: 'واکسن',
),
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 3,
label: 'تجهیزات',
),
],
),
);
}, controller.newBeneficiaryRequestIndex),
],
),
),
],
);
}

View File

@@ -0,0 +1,487 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_farm_inspection/widgets/card_info.dart';
import 'package:rasadyar_core/core.dart';
import '../home/logic.dart';
Widget step4Page(PoultryFarmInspectionHomeLogic controller) {
return SingleChildScrollView(
physics: BouncingScrollPhysics(),
child: Column(
children: [
SizedBox(height: 35.h),
Container(
height: 455.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'مستندات',
child: documents(controller),
),
),
SizedBox(height: 30.h),
Container(
height: 220.h,
clipBehavior: Clip.none,
width: Get.width,
child: farmInfoWidget(
controller: controller,
title: 'جمع‌بندی بازرس',
child: inspectorConclusion(controller),
),
),
SizedBox(height: 24.h),
],
),
);
}
Column documents(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
cardInfo(
padding: EdgeInsets.fromLTRB(0, 12, 12, 6),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
SizedBox(height: 10.h),
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
height: 80.h,
width: 80.w,
padding: EdgeInsets.all(22),
decoration: BoxDecoration(
color: Color(0xFFE9E9E9),
border: Border.all(width: 1, color: AppColor.blackLightHover),
borderRadius: BorderRadius.circular(8),
),
child: Assets.vec.galleryAddSvg.svg(width: 36, height: 36),
),
],
),
),
Text(
'ثبت عکس سالن (حداقل ۳ زاویه) *',
style: AppFonts.yekan14.copyWith(color: AppColor.textColorLight),
),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(0, 12, 12, 6),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
height: 80.h,
width: 80.w,
padding: EdgeInsets.all(22),
decoration: BoxDecoration(
color: Color(0xFFE9E9E9),
border: Border.all(width: 1, color: AppColor.blackLightHover),
borderRadius: BorderRadius.circular(8),
),
child: Assets.vec.galleryAddSvg.svg(width: 36, height: 36),
),
],
),
),
Text(
'ثبت عکس انبار نهاده‌ها',
style: AppFonts.yekan14.copyWith(color: AppColor.textColorLight),
),
],
),
),
cardInfo(
padding: EdgeInsets.fromLTRB(0, 12, 12, 6),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Container(
height: 80.h,
width: 80.w,
padding: EdgeInsets.all(22),
decoration: BoxDecoration(
color: Color(0xFFE9E9E9),
border: Border.all(width: 1, color: AppColor.blackLightHover),
borderRadius: BorderRadius.circular(8),
),
child: Assets.vec.galleryAddSvg.svg(width: 36, height: 36),
),
],
),
),
Text('ثبت عکس تلفات', style: AppFonts.yekan14.copyWith(color: AppColor.textColorLight)),
],
),
),
],
);
}
ChoiceChip formChips({
required int selectedIndex,
required int index,
required String label,
required Function(int) onTap,
}) {
return ChoiceChip(
selectedColor: AppColor.green1Normal,
labelStyle: index == selectedIndex
? AppFonts.yekan14Bold.copyWith(color: Colors.white)
: AppFonts.yekan14.copyWith(color: AppColor.textColor),
surfaceTintColor: Colors.white,
checkmarkColor: Colors.white,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
side: index == selectedIndex
? BorderSide.none
: BorderSide(width: 1, color: AppColor.blackLightHover),
),
padding: EdgeInsets.symmetric(horizontal: 12, vertical: 6),
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
label: Text(label),
selected: index == selectedIndex,
onSelected: (value) => onTap(index),
);
}
Column inspectorConclusion(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'وضعیت کلی واحد',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return SingleChildScrollView(
scrollDirection: Axis.horizontal,
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setInspectorConclusionIndex(index),
selectedIndex: data.value,
index: 0,
label: 'تایید شده',
),
formChips(
onTap: (index) => controller.setInspectorConclusionIndex(index),
selectedIndex: data.value,
index: 1,
label: 'نیازمند اصلاح',
),
formChips(
onTap: (index) => controller.setInspectorConclusionIndex(index),
selectedIndex: data.value,
index: 2,
label: 'پرریسک',
),
],
),
);
}, controller.inspectorConclusionIndex),
],
),
),
RTextField(
controller: controller.inspectorConclusionDescriptionController,
hintText: 'توصیه‌ها / اخطارها / اقدامات اصلاحی ...',
hintStyle: AppFonts.yekan14.copyWith(color: AppColor.textColorLight),
maxLines: 3,
minLines: 3,
filled: true,
filledColor: AppColor.bgLight,
),
],
);
}
Column agriculturalInput(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میزان نهاده مصرفی تا روز بازدید (کیلوگرم)',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میزان نهاده موجود در انبار',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'میزان نهاده خریداری‌شده و حمل‌نشده از بازارگاه',
filled: true,
filledColor: AppColor.bgLight,
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text('کیفیت دانه', style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2)),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setSampleTypeIndex(index),
selectedIndex: data.value,
index: 0,
label: 'خوب',
),
formChips(
onTap: (index) => controller.setSampleTypeIndex(index),
selectedIndex: data.value,
index: 1,
label: 'متوسط',
),
formChips(
onTap: (index) => controller.setGrainQualityInputIndex(index),
selectedIndex: data.value,
index: 2,
label: 'ضعیف',
),
],
);
}, controller.grainQualityInputIndex),
],
),
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'فرمول دانه (در صورت ارائه)',
filled: true,
minLines: 3,
maxLines: 3,
filledColor: AppColor.bgLight,
),
],
);
}
Column humanResources(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد افراد شاغل',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد افراد بومی',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تعداد افراد غیر بومی',
filled: true,
maxLines: 3,
minLines: 3,
filledColor: AppColor.bgLight,
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'وضعیت قرارداد کارگران',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setWorkerContractStatusIndex(index),
selectedIndex: data.value,
index: 0,
label: 'دائم',
),
formChips(
onTap: (index) => controller.setWorkerContractStatusIndex(index),
selectedIndex: data.value,
index: 1,
label: 'موقت',
),
formChips(
onTap: (index) => controller.setWorkerContractStatusIndex(index),
selectedIndex: data.value,
index: 2,
label: 'روزمزدی',
),
],
);
}, controller.workerContractStatusIndex),
],
),
),
ResourceOverlayDropdown(
items: Resource.success(['آموزش‌ ندیده است', 'آموزش‌ دیده است']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'آموزش‌دیده در حوزه بهداشت و امنیت زیستی'),
),
],
);
}
Column facilitiesAndSupport(PoultryFarmInspectionHomeLogic controller) {
return Column(
spacing: 10,
children: [
SizedBox(height: 1.h),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'تسهیلات دریافتی فعال',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'نوع تسهیلات',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'مبلغ',
filled: true,
filledColor: AppColor.bgLight,
),
RTextField(
controller: controller.nameOfThePoultryFarmUnit,
label: 'سال دریافت',
filled: true,
filledColor: AppColor.bgLight,
),
ResourceOverlayDropdown(
items: Resource.success(['دریافت نشده', 'دریافت شده']),
itemBuilder: (item) => Text(item),
labelBuilder: (selected) => Text(selected ?? 'وضعیت بازپرداخت'),
),
cardInfo(
padding: EdgeInsets.fromLTRB(12, 12, 12, 12),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
spacing: 9,
children: [
Text(
'درخواست جدید بهره‌بردار',
style: AppFonts.yekan14Bold.copyWith(color: AppColor.textColor2),
),
ObxValue((data) {
return Row(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 10,
children: [
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 0,
label: 'نهاده',
),
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 1,
label: 'تسهیلات',
),
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 2,
label: 'واکسن',
),
formChips(
onTap: (index) => controller.setNewBeneficiaryRequestIndex(index),
selectedIndex: data.value,
index: 3,
label: 'تجهیزات',
),
],
);
}, controller.newBeneficiaryRequestIndex),
],
),
),
],
);
}

View File

@@ -136,7 +136,7 @@ class GenocidePage extends GetView<GenocideLogic> {
),
Text(
'تعداد:${item.quantity.separatedByComma ?? '-'} (قطعه)',
'تعداد:${item.quantity.separatedByComma} (قطعه)',
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
],
@@ -149,7 +149,7 @@ class GenocidePage extends GetView<GenocideLogic> {
value: (item.freeSaleInProvince ?? false) ? 'آزاد' : 'دولتی ',
),
buildRow(title: 'نوع کشتار ', value: controller.getKillType(item)),
buildRow(title: 'درخواست', value: controller.getRequestType(item) ?? 'N/A'),
buildRow(title: 'درخواست', value: controller.getRequestType(item)),
buildRow(title: 'میانگین وزنی', value: '${(item.indexWeight)} (کیلوگرم)'),
buildRow(title: 'قیمت مرغدار', value: '${item.amount.separatedByComma} (ریال)'),
@@ -231,7 +231,7 @@ class GenocidePage extends GetView<GenocideLogic> {
),
Text(
'تعداد:${item.quantity.separatedByComma ?? '-'} (قطعه)',
'تعداد:${item.quantity.separatedByComma} (قطعه)',
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
),
],

View File

@@ -465,7 +465,7 @@ class InspectionPoultrySciencePage extends GetView<InspectionPoultryScienceLogic
visible: item.realQuantity != null,
child: buildRow(
title: 'تعداد تاییده',
value: item.realQuantity.separatedByComma ?? '-',
value: item.realQuantity.separatedByComma,
),
),
},

View File

@@ -31,5 +31,11 @@ class PoultryActionLogic extends GetxController {
route: ChickenRoutes.activeHatchingPoultryScience,
icon: Assets.vec.activeFramSvg.path,
),
PoultryActionItem(
title: "بازرسی مزارع طیور",
route: ChickenRoutes.poultryFarmInspectionHome,
icon: Assets.vec.activeFramSvg.path,
),
].obs;
}

View File

@@ -31,7 +31,6 @@ class PoultryActionPage extends GetView<PoultryActionLogic> {
title: item.title,
vecIcon: item.icon,
onTap: () async {
Get.toNamed(item.route, id: poultryFirstKey);
},
);

View File

@@ -4,7 +4,6 @@ import 'package:rasadyar_chicken/data/di/chicken_di.dart';
import 'package:rasadyar_chicken/data/repositories/poultry_science/poultry_science_repository.dart';
import 'package:rasadyar_chicken/presentation/pages/common/profile/view.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_science/home/view.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_science/poultry_action/view.dart';
import 'package:rasadyar_chicken/presentation/routes/pages.dart';
import 'package:rasadyar_chicken/presentation/routes/routes.dart';
import 'package:rasadyar_chicken/presentation/utils/nested_keys_utils.dart';

View File

@@ -83,7 +83,6 @@ class BuyInProvinceLogic extends GetxController {
}
Future<void> onRefresh() async {
final isWaiting = selectedSegmentIndex.value == 0;
await rootLogic.onRefresh();
await Future.wait([buyWaitingLogic.getWaitingArrivals(), buyAllLogic.getAllArrivals()]);
}

View File

@@ -42,11 +42,7 @@ class BuyInProvinceAllLogic extends GetxController {
});
}
@override
void onClose() {
// TODO: implement onClose
super.onClose();
}
Future<void> getAllArrivals([bool isLoadingMore = false]) async {
if (isLoadingMore) {
@@ -71,8 +67,8 @@ class BuyInProvinceAllLogic extends GetxController {
search: 'filter',
role: 'Steward',
value: searchedValue.value,
fromDate: fromDateFilter.value?.toDateTime(),
toDate: toDateFilter.value?.toDateTime(),
fromDate: fromDateFilter.value.toDateTime(),
toDate: toDateFilter.value.toDateTime(),
),
),
onSuccess: (res) async {

View File

@@ -48,10 +48,7 @@ class BuyInProvinceWaitingLogic extends GetxController {
});
}
@override
void onClose() {
super.onClose();
}
void setSearchValue(String? data) {
searchedValue.value = data?.trim();
@@ -80,8 +77,8 @@ class BuyInProvinceWaitingLogic extends GetxController {
search: 'filter',
role: 'Steward',
value: searchedValue.value,
fromDate: fromDateFilter.value?.toDateTime(),
toDate: toDateFilter.value?.toDateTime(),
fromDate: fromDateFilter.value.toDateTime(),
toDate: toDateFilter.value.toDateTime(),
),
),
onSuccess: (res) async {

View File

@@ -428,7 +428,7 @@ class BuyOutOfProvincePage extends GetView<BuyOutOfProvinceLogic> {
enabled: controller.isSubmitButtonEnabled.value,
onPressed: isOnEdit
? () async {
var res = await controller.editStewardPurchaseOutOfProvince();
await controller.editStewardPurchaseOutOfProvince();
Get.back();
}
: () async {

View File

@@ -1,6 +1,5 @@
import 'package:rasadyar_chicken/data/models/response/bar_information/bar_information.dart';
import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart';
import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart';
import 'package:rasadyar_chicken/presentation/pages/steward/root/logic.dart';
import 'package:rasadyar_core/core.dart';

View File

@@ -225,9 +225,6 @@ class StewardRootLogic extends GetxController {
final nestedKeyId = getNestedKey();
GlobalKey<NavigatorState>? currentNestedKey = Get.nestedKey(nestedKeyId);
final currentRoute = currentNestedKey?.currentState;
fLog("onPopScopTaped ==> ${currentNestedKey?.currentState?.canPop()}");
if (currentNestedKey?.currentState?.canPop() == true) {
iLog(currentNestedKey?.currentState?.canPop());
iLog(currentNestedKey?.currentContext);

View File

@@ -25,8 +25,9 @@ class StewardRootPage extends GetView<StewardRootLogic> {
onGenerateRoute: (settings) {
final page = ChickenPages.pages.firstWhere(
(e) => e.name == settings.name,
orElse: () =>
ChickenPages.pages.firstWhere((e) => e.name == ChickenRoutes.buySteward),
orElse: () => ChickenPages.pages.firstWhere(
(e) => e.name == ChickenRoutes.buySteward,
),
);
return buildRouteFromGetPage(page);
@@ -37,8 +38,9 @@ class StewardRootPage extends GetView<StewardRootLogic> {
onGenerateRoute: (settings) {
final page = ChickenPages.pages.firstWhere(
(e) => e.name == settings.name,
orElse: () =>
ChickenPages.pages.firstWhere((e) => e.name == ChickenRoutes.saleSteward),
orElse: () => ChickenPages.pages.firstWhere(
(e) => e.name == ChickenRoutes.saleSteward,
),
);
return buildRouteFromGetPage(page);
@@ -46,15 +48,18 @@ class StewardRootPage extends GetView<StewardRootLogic> {
),
Navigator(
key: Get.nestedKey(stewardThirdKey),
onGenerateRoute: (settings) => GetPageRoute(page: () => controller.pages[2]),
onGenerateRoute: (settings) =>
GetPageRoute(page: () => controller.pages[2]),
),
Navigator(
key: Get.nestedKey(stewardFourthKey),
onGenerateRoute: (settings) => GetPageRoute(page: () => controller.pages[3]),
onGenerateRoute: (settings) =>
GetPageRoute(page: () => controller.pages[3]),
),
Navigator(
key: Get.nestedKey(stewardFifthKey),
onGenerateRoute: (settings) => GetPageRoute(page: () => controller.pages[4]),
onGenerateRoute: (settings) =>
GetPageRoute(page: () => controller.pages[4]),
),
],
index: data.value,
@@ -150,7 +155,10 @@ class StewardRootPage extends GetView<StewardRootLogic> {
return Container(
height: 70,
width: Get.width / 2,
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
clipBehavior: Clip.hardEdge,
child: Row(
children: [
@@ -171,7 +179,9 @@ class StewardRootPage extends GetView<StewardRootLogic> {
Text(
'بارهای امروز',
textAlign: TextAlign.right,
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
style: AppFonts.yekan14.copyWith(
color: AppColor.blueNormal,
),
),
],
),
@@ -238,7 +248,9 @@ class StewardRootPage extends GetView<StewardRootLogic> {
Text(
title,
textAlign: TextAlign.right,
style: AppFonts.yekan14.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan14.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
],
),
@@ -261,12 +273,16 @@ class StewardRootPage extends GetView<StewardRootLogic> {
Text(
description,
textAlign: TextAlign.right,
style: AppFonts.yekan16.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan16.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
Text(
unit,
textAlign: TextAlign.center,
style: AppFonts.yekan12.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan12.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
],
),
@@ -311,17 +327,23 @@ class StewardRootPage extends GetView<StewardRootLogic> {
Text(
title,
textAlign: TextAlign.right,
style: AppFonts.yekan14.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan14.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
Text(
description,
textAlign: TextAlign.right,
style: AppFonts.yekan16.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan16.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
Text(
unit,
textAlign: TextAlign.center,
style: AppFonts.yekan12.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan12.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
],
),
@@ -369,14 +391,18 @@ class StewardRootPage extends GetView<StewardRootLogic> {
padding: EdgeInsets.all(4),
decoration: ShapeDecoration(
color: const Color(0xFFBECDFF),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Container(
width: 40,
height: 40,
decoration: ShapeDecoration(
color: AppColor.blueNormal,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: SvgGenImage.vec(iconPath).svg(
width: 24,
@@ -386,7 +412,10 @@ class StewardRootPage extends GetView<StewardRootLogic> {
),
),
),
Text(title, style: AppFonts.yekan10.copyWith(color: AppColor.blueNormal)),
Text(
title,
style: AppFonts.yekan10.copyWith(color: AppColor.blueNormal),
),
],
);
}
@@ -403,16 +432,24 @@ class StewardRootPage extends GetView<StewardRootLogic> {
padding: EdgeInsets.all(4),
decoration: ShapeDecoration(
color: const Color(0xFFD9F7F0),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
child: Assets.vec.messageAddSvg.svg(
width: 40,
height: 40,
colorFilter: ColorFilter.mode(AppColor.greenNormal, BlendMode.srcIn),
colorFilter: ColorFilter.mode(
AppColor.greenNormal,
BlendMode.srcIn,
),
fit: BoxFit.cover,
),
),
Text('افزودن', style: AppFonts.yekan10.copyWith(color: AppColor.greenDarkHover)),
Text(
'افزودن',
style: AppFonts.yekan10.copyWith(color: AppColor.greenDarkHover),
),
],
);
}
@@ -559,7 +596,9 @@ class StewardRootPage extends GetView<StewardRootLogic> {
child: Text(
title,
textAlign: TextAlign.right,
style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
style: AppFonts.yekan14.copyWith(
color: AppColor.darkGreyDarkHover,
),
),
),
Flexible(
@@ -567,7 +606,9 @@ class StewardRootPage extends GetView<StewardRootLogic> {
child: Text(
value,
textAlign: TextAlign.center,
style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
style: AppFonts.yekan14.copyWith(
color: AppColor.darkGreyDarkHover,
),
),
),
],
@@ -593,7 +634,9 @@ class StewardRootPage extends GetView<StewardRootLogic> {
Text(
'اطلاعات ارسالی',
textAlign: TextAlign.right,
style: AppFonts.yekan16Bold.copyWith(color: AppColor.blueNormal),
style: AppFonts.yekan16Bold.copyWith(
color: AppColor.blueNormal,
),
),
const SizedBox(height: 12),
buildRow(

View File

@@ -474,7 +474,7 @@ class SalesInProvincePage extends GetView<SalesInProvinceLogic> {
Expanded(
child: ObxValue((data) {
return Text(
date.value?.formatCompactDate() ?? Jalali.now().formatCompactDate(),
date.value.formatCompactDate(),
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(color: AppColor.lightGreyNormalActive),
);

View File

@@ -46,7 +46,7 @@ Widget addOrEditBottomSheet(SalesInProvinceLogic controller, {bool isEditMode =
);
},
borderColor: AppColor.darkGreyLight,
initText: (data.value ?? Jalali.now()).formatCompactDate(),
initText: (data.value).formatCompactDate(),
);
}, controller.fromDateFilter),
Visibility(

View File

@@ -36,7 +36,8 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
ObxValue((data) {
return RPaginatedListView(
onLoadMore: () async => controller.getOutProvinceSales(true),
onLoadMore: () async =>
controller.getOutProvinceSales(true),
hasMore: data.value.data?.next != null,
listType: ListType.separated,
resource: data.value,
@@ -70,19 +71,27 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
children: [
RFab.add(
onPressed: () {
Get.bottomSheet(addOrEditSaleBottomSheet(), isScrollControlled: true).then((
value,
) {
Get.bottomSheet(
addOrEditSaleBottomSheet(),
isScrollControlled: true,
).then((value) {
controller.clearSaleForm();
});
},
),
Spacer(),
RFab(
icon: Icon(CupertinoIcons.person_add_solid, color: Colors.white, size: 35.w),
icon: Icon(
CupertinoIcons.person_add_solid,
color: Colors.white,
size: 35.w,
),
backgroundColor: AppColor.blueNormal,
onPressed: () {
Get.toNamed(ChickenRoutes.salesOutOfProvinceBuyerSteward, id: stewardSecondKey);
Get.toNamed(
ChickenRoutes.salesOutOfProvinceBuyerSteward,
id: stewardSecondKey,
);
},
),
SizedBox(width: 25),
@@ -176,7 +185,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
itemListExpandedWidget(StewardFreeSaleBar item, int index) {
return Container(
padding: EdgeInsets.symmetric(horizontal: 8),
decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
),
child: Column(
spacing: 8,
children: [
@@ -208,12 +220,16 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
children: [
Text(
item.date?.toJalali.formatter.wN ?? 'ندارد',
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
style: AppFonts.yekan14.copyWith(
color: AppColor.textColor,
),
),
Text(
'${item.date?.toJalali.formatter.d} ${item.date?.toJalali.formatter.mN ?? 'ندارد'}',
style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
style: AppFonts.yekan14.copyWith(
color: AppColor.blueNormal,
),
),
],
),
@@ -230,7 +246,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
],
),
),
buildRow(title: 'مشخصات خریدار', value: item.buyer?.fullname ?? 'ندارد'),
buildRow(
title: 'مشخصات خریدار',
value: item.buyer?.fullname ?? 'ندارد',
),
buildRow(title: 'تلفن خریدار', value: item.buyer?.mobile ?? 'ندارد'),
buildRow(title: 'نام واحد', value: item.buyer?.unitName ?? 'ندارد'),
buildRow(
@@ -248,7 +267,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
value: item.productionDate?.toJalali.formatCompactDate() ?? 'ندارد',
),
buildRow(title: 'انبار فروش', value: '${item.quota?.faTitle}'),
buildRow(title: 'کد قرنطینه ', value: item.clearanceCode ?? 'بدون کد'),
buildRow(
title: 'کد قرنطینه ',
value: item.clearanceCode ?? 'بدون کد',
),
buildRow(
title: 'حجم تقریبی لاشه ',
@@ -261,7 +283,9 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
children: [
Text(
'کد احراز',
style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
style: AppFonts.yekan14.copyWith(
color: AppColor.darkGreyDarkHover,
),
),
Spacer(),
RElevated(
@@ -271,7 +295,9 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
backgroundColor: AppColor.blueDarkHover,
text: 'ارسال کد',
onPressed: () {
Get.bottomSheet(bottomSendOtpSheetSellCode(item)).then((value) {
Get.bottomSheet(bottomSendOtpSheetSellCode(item)).then((
value,
) {
controller.otpCode.value = '';
controller.otpCodeSell.clear();
});
@@ -280,7 +306,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
],
)
: buildRow(title: 'کد احراز ', value: '${item.registerCode}'),
buildRow(title: 'کد قرنطینه ', value: item.clearanceCode ?? 'بدون کد'),
buildRow(
title: 'کد قرنطینه ',
value: item.clearanceCode ?? 'بدون کد',
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
@@ -338,7 +367,9 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
children: [
Text(
isOnEdit ? 'ویرایش فروش' : 'افزودن فروش',
style: AppFonts.yekan16Bold.copyWith(color: AppColor.blueNormal),
style: AppFonts.yekan16Bold.copyWith(
color: AppColor.blueNormal,
),
),
_productDropDown(),
@@ -360,7 +391,9 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
label: 'تاریخ',
onTap: () {
Get.bottomSheet(
modalDatePicker((value) => controller.setSaleDate(value)),
modalDatePicker(
(value) => controller.setSaleDate(value),
),
);
},
borderColor: AppColor.darkGreyLight,
@@ -375,7 +408,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
border: Border.all(color: AppColor.darkGreyLight, width: 1),
border: Border.all(
color: AppColor.darkGreyLight,
width: 1,
),
),
child: Stack(
fit: StackFit.expand,
@@ -383,7 +419,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
clipBehavior: Clip.none,
children: [
Positioned(
child: Container(color: Colors.white, child: Text("انبار")),
child: Container(
color: Colors.white,
child: Text("انبار"),
),
top: -10,
right: 8,
),
@@ -404,7 +443,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
child: Row(
children: [
Radio(value: 1),
Text('دولتی', style: AppFonts.yekan14),
Text(
'دولتی',
style: AppFonts.yekan14,
),
],
),
),
@@ -418,7 +460,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
child: Row(
children: [
Radio(value: 2),
Text('آزاد', style: AppFonts.yekan14),
Text(
'آزاد',
style: AppFonts.yekan14,
),
],
),
),
@@ -435,7 +480,8 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
Obx(() {
return MonthlyDataCalendar(
label: 'تاریخ تولید گوشت',
selectedDate: controller.productionDate.value?.formatCompactDate(),
selectedDate: controller.productionDate.value
?.formatCompactDate(),
onDateSelect: (value) {
controller.setProductionDate(value);
},
@@ -445,7 +491,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
);
}),
Visibility(visible: isOnEdit == false, child: _buyerWidget()),
Visibility(
visible: isOnEdit == false,
child: _buyerWidget(),
),
RTextField(
controller: controller.saleWeightController,
@@ -500,7 +549,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
border: Border.all(color: AppColor.darkGreyLight, width: 1),
border: Border.all(
color: AppColor.darkGreyLight,
width: 1,
),
),
child: Stack(
fit: StackFit.expand,
@@ -508,7 +560,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
clipBehavior: Clip.none,
children: [
Positioned(
child: Container(color: Colors.white, child: Text("فروش")),
child: Container(
color: Colors.white,
child: Text("فروش"),
),
top: -10,
right: 8,
),
@@ -522,7 +577,12 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
children: [
Expanded(
child: GestureDetector(
onTap: (controller.broadcastPrice.value?.active ?? false)
onTap:
(controller
.broadcastPrice
.value
?.active ??
false)
? () {
controller.saleType.value = 2;
}
@@ -532,13 +592,20 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
Radio(
value: 1,
enabled:
controller.broadcastPrice.value?.active ?? false,
controller
.broadcastPrice
.value
?.active ??
false,
),
Text(
'قیمت مصوب',
style: AppFonts.yekan14.copyWith(
color:
(controller.broadcastPrice.value?.active ??
(controller
.broadcastPrice
.value
?.active ??
false)
? AppColor.textColor
: AppColor.labelTextColor,
@@ -557,7 +624,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
child: Row(
children: [
Radio(value: 2),
Text('قیمت آزاد', style: AppFonts.yekan14),
Text(
'قیمت آزاد',
style: AppFonts.yekan14,
),
],
),
),
@@ -584,7 +654,8 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
filled: true,
readonly: data.value == 1,
onChanged: (p0) {
controller.pricePerKilo.value = int.tryParse(p0.clearComma) ?? 0;
controller.pricePerKilo.value =
int.tryParse(p0.clearComma) ?? 0;
},
keyboardType: TextInputType.number,
label: 'قیمت هر کیلو (ريال)',
@@ -639,7 +710,9 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
text: isOnEdit ? 'ویرایش' : 'ثبت',
onPressed: data.value
? () async {
var res = isOnEdit ? await controller.editSale() : await controller.createSale();
isOnEdit
? await controller.editSale()
: await controller.createSale();
}
: null,
height: 40,
@@ -684,7 +757,10 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
Text(item?.name ?? 'انتخاب محصول'),
Spacer(),
ObxValue((data) {
return Visibility(visible: data.value != null, child: Text('موجودی: $data'));
return Visibility(
visible: data.value != null,
child: Text('موجودی: $data'),
);
}, controller.remainingStock),
],
),
@@ -716,15 +792,23 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
Assets.vec.calendarSvg.svg(
width: 24,
height: 24,
colorFilter: const ColorFilter.mode(AppColor.bgDark, BlendMode.srcIn),
colorFilter: const ColorFilter.mode(
AppColor.bgDark,
BlendMode.srcIn,
),
),
Text(
title ?? 'تاریخ',
style: AppFonts.yekan16.copyWith(color: AppColor.bgDark),
),
Text(title ?? 'تاریخ', style: AppFonts.yekan16.copyWith(color: AppColor.bgDark)),
Expanded(
child: ObxValue((data) {
return Text(
date.value.formatCompactDate(),
textAlign: TextAlign.center,
style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyDark),
style: AppFonts.yekan16.copyWith(
color: AppColor.darkGreyDark,
),
);
}, date),
),
@@ -806,7 +890,9 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
height: 40.h,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(8),
border: borderColor != null ? Border.all(width: 1, color: borderColor) : null,
border: borderColor != null
? Border.all(width: 1, color: borderColor)
: null,
),
clipBehavior: Clip.hardEdge,
child: Row(
@@ -868,12 +954,16 @@ class SalesOutOfProvincePage extends GetView<SalesOutOfProvinceLogic> {
maxLines: 1,
textDirection: TextDirection.ltr,
overflow: TextOverflow.ellipsis,
style: AppFonts.yekan14.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan14.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
Text(
unit,
textAlign: TextAlign.center,
style: AppFonts.yekan12.copyWith(color: AppColor.mediumGreyDarkActive),
style: AppFonts.yekan12.copyWith(
color: AppColor.mediumGreyDarkActive,
),
),
],
),

View File

@@ -175,7 +175,7 @@ class SalesOutOfProvinceBuyersLogic extends GetxController {
mobile: buyerPhoneController.text,
role: 'Steward',
);
final res = await rootLogic.chickenRepository.createOutProvinceCarcassesBuyer(
await rootLogic.chickenRepository.createOutProvinceCarcassesBuyer(
token: rootLogic.tokenService.accessToken.value!,
body: buyer,
);

View File

@@ -2,6 +2,7 @@ import 'package:rasadyar_chicken/presentation/pages/common/auth/logic.dart';
import 'package:rasadyar_chicken/presentation/pages/common/auth/view.dart';
import 'package:rasadyar_chicken/presentation/pages/common/role/logic.dart';
import 'package:rasadyar_chicken/presentation/pages/common/role/view.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_farm_inspection/poultry_farm_inspection.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_science/active_hatching/logic.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_science/active_hatching/view.dart';
import 'package:rasadyar_chicken/presentation/pages/poultry_science/farm/logic.dart';
@@ -69,7 +70,6 @@ sealed class ChickenPages {
page: () => HomePage(),
middlewares: [AuthMiddleware()],
binding: BindingsBuilder(() {
Get.put(HomeLogic());
Get.lazyPut(() => BaseLogic());
}),
@@ -223,5 +223,16 @@ sealed class ChickenPages {
}),
),
//endregion
//region Poultry Farm Inspection
GetPage(
name: ChickenRoutes.poultryFarmInspectionHome,
page: () => PoultryFarmInspectionHomePage(),
binding: BindingsBuilder(() {
Get.lazyPut(() => PoultryFarmInspectionHomeLogic());
Get.lazyPut(() => BaseLogic(), fenix: true);
}),
),
//endregion
];
}

View File

@@ -35,7 +35,11 @@ sealed class ChickenRoutes {
static const genocidePoultryScience = '$_poultryScience/genocidePoultryScience';
static const killingRegistrationPoultryScience = '$genocidePoultryScience/KillingRegistration';
//endregion
//region poultry Farm Inspection
static const _poultryFarmInspection = '$_base/poultryFarmInspection';
static const poultryFarmInspectionHome = '$_poultryFarmInspection/Home';
//endregion
}

View File

@@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart';
Widget cardInfo({required int value, required String description, required Color color}) {
return Container(
width: 90.w,
height: 53.h,
decoration: BoxDecoration(
color: color,
borderRadius: BorderRadius.circular(8),
border: Border.all(width: 0.50, color: const Color.fromARGB(54, 169, 169, 169)),
),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
spacing: 4,
children: [
Text(
value.separatedByCommaFa,
style: AppFonts.yekan13Bold.copyWith(color: AppColor.textColor),
),
Text(description, style: AppFonts.yekan10.copyWith(color: AppColor.textColor)),
],
),
);
}

View File

@@ -1,9 +1,9 @@
name: rasadyar_chicken
description: A starting point for Dart libraries or applications.
version: 1.3.18
version: 1.3.20
environment:
sdk: ^3.9.2
sdk: ^3.10.0
dependencies:

View File

@@ -229,14 +229,14 @@ void main() {
data: expectedUserInfo,
statusCode: 200,
requestOptions: RequestOptions(
path: 'https://userbackend.rasadyaar.ir/api/send_otp/',
path: 'https://userbackend.rasadyar.com/api/send_otp/',
),
),
);
when(
() => mockDioRemote.post<UserInfoModel?>(
'https://userbackend.rasadyaar.ir/api/send_otp/',
'https://userbackend.rasadyar.com/api/send_otp/',
data: {"mobile": phoneNumber, "state": ""},
fromJson: any(named: 'fromJson'),
headers: any(named: 'headers'),
@@ -250,7 +250,7 @@ void main() {
expect(result, equals(expectedUserInfo));
verify(
() => mockDioRemote.post<UserInfoModel?>(
'https://userbackend.rasadyaar.ir/api/send_otp/',
'https://userbackend.rasadyar.com/api/send_otp/',
data: {"mobile": phoneNumber, "state": ""},
fromJson: UserInfoModel.fromJson,
headers: {'Content-Type': 'application/json'},
@@ -267,14 +267,14 @@ void main() {
data: null,
statusCode: 404,
requestOptions: RequestOptions(
path: 'https://userbackend.rasadyaar.ir/api/send_otp/',
path: 'https://userbackend.rasadyar.com/api/send_otp/',
),
),
);
when(
() => mockDioRemote.post<UserInfoModel?>(
'https://userbackend.rasadyaar.ir/api/send_otp/',
'https://userbackend.rasadyar.com/api/send_otp/',
data: {"mobile": phoneNumber, "state": ""},
fromJson: any(named: 'fromJson'),
headers: any(named: 'headers'),
@@ -288,7 +288,7 @@ void main() {
expect(result, isNull);
verify(
() => mockDioRemote.post<UserInfoModel?>(
'https://userbackend.rasadyaar.ir/api/send_otp/',
'https://userbackend.rasadyar.com/api/send_otp/',
data: {"mobile": phoneNumber, "state": ""},
fromJson: UserInfoModel.fromJson,
headers: {'Content-Type': 'application/json'},

View File

@@ -4,27 +4,14 @@ import 'package:rasadyar_chicken/data/data_source/local/chicken_local.dart';
import 'package:rasadyar_chicken/data/data_source/remote/chicken/chicken_remote.dart';
import 'package:rasadyar_chicken/data/models/local/widely_used_local_model.dart';
import 'package:rasadyar_chicken/data/models/request/create_steward_free_bar/create_steward_free_bar.dart';
import 'package:rasadyar_chicken/data/models/request/steward_free_sale_bar/steward_free_sale_bar_request.dart';
import 'package:rasadyar_chicken/data/models/request/submit_steward_allocation/submit_steward_allocation.dart';
import 'package:rasadyar_chicken/data/models/response/allocated_made/allocated_made.dart';
import 'package:rasadyar_chicken/data/models/response/bar_information/bar_information.dart';
import 'package:rasadyar_chicken/data/models/response/broadcast_price/broadcast_price.dart';
import 'package:rasadyar_chicken/data/models/response/dashboard_kill_house_free_bar/dashboard_kill_house_free_bar.dart';
import 'package:rasadyar_chicken/data/models/response/guild/guild_model.dart';
import 'package:rasadyar_chicken/data/models/response/guild_profile/guild_profile.dart';
import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart';
import 'package:rasadyar_chicken/data/models/response/iran_province_city/iran_province_city_model.dart';
import 'package:rasadyar_chicken/data/models/response/kill_house_poultry/kill_house_poultry.dart';
import 'package:rasadyar_chicken/data/models/response/kill_house_distribution_info/kill_house_distribution_info.dart';
import 'package:rasadyar_chicken/data/models/response/out_province_carcasses_buyer/out_province_carcasses_buyer.dart';
import 'package:rasadyar_chicken/data/models/response/roles_products/roles_products.dart';
import 'package:rasadyar_chicken/data/models/response/segmentation_model/segmentation_model.dart';
import 'package:rasadyar_chicken/data/models/response/steward_free_bar/steward_free_bar.dart';
import 'package:rasadyar_chicken/data/models/response/steward_free_bar_dashboard/steward_free_bar_dashboard.dart';
import 'package:rasadyar_chicken/data/models/response/steward_free_sale_bar/steward_free_sale_bar.dart';
import 'package:rasadyar_chicken/data/models/response/steward_sales_info_dashboard/steward_sales_info_dashboard.dart';
import 'package:rasadyar_chicken/data/models/response/user_profile/user_profile.dart';
import 'package:rasadyar_chicken/data/models/response/waiting_arrival/waiting_arrival.dart';
import 'package:rasadyar_chicken/data/repositories/chicken/chicken_repository_imp.dart';
import 'package:rasadyar_core/core.dart';

View File

@@ -73,5 +73,5 @@ export 'utils/logger_utils.dart';
export 'utils/map_utils.dart';
export 'utils/network/network.dart';
export 'utils/route_utils.dart';
export 'utils/separator_input_formatter.dart';
export 'utils/text_input_formatter/separator_input_formatter.dart';
export 'utils/utils.dart';

View File

@@ -4,136 +4,319 @@ class AppColor {
AppColor._();
//region --- Blue Colors ---
static const Color blueLight = Color(0xFFeaefff); // #eaefff rgb(234, 239, 255)
static const Color blueLightHover = Color(0xFFe0e7ff); // #e0e7ff rgb(224, 231, 255)
static const Color blueLightActive = Color(0xFFbecdff); // #becdff rgb(190, 205, 255)
static const Color blueNormalOld = Color(0xFF2d5fff); // #2d5fff rgb(45, 95, 255)
static const Color blueLight = Color(
0xFFeaefff,
); // #eaefff rgb(234, 239, 255)
static const Color blueLightHover = Color(
0xFFe0e7ff,
); // #e0e7ff rgb(224, 231, 255)
static const Color blueLightActive = Color(
0xFFbecdff,
); // #becdff rgb(190, 205, 255)
static const Color blueNormalOld = Color(
0xFF2d5fff,
); // #2d5fff rgb(45, 95, 255)
static const Color blueNormal = blueDark;
static const Color blueNormalHover = Color(0xFF2956e6); // #2956e6 rgb(41, 86, 230)
static const Color blueNormalActive = Color(0xFF244ccc); // #244ccc rgb(36, 76, 204)
static const Color blueNormalHover = Color(
0xFF2956e6,
); // #2956e6 rgb(41, 86, 230)
static const Color blueNormalActive = Color(
0xFF244ccc,
); // #244ccc rgb(36, 76, 204)
static const Color blueDark = Color(0xFF2247bf); // #2247bf rgb(34, 71, 191)
static const Color blueDarkHover = Color(0xFF1b3999); // #1b3999 rgb(27, 57, 153)
static const Color blueDarkActive = Color(0xFF142b73); // #142b73 rgb(20, 43, 115)
static const Color blueDarkHover = Color(
0xFF1b3999,
); // #1b3999 rgb(27, 57, 153)
static const Color blueDarkActive = Color(
0xFF142b73,
); // #142b73 rgb(20, 43, 115)
static const Color blueDarker = Color(0xFF102159); // #102159 rgb(16, 33, 89)
static const Color blueFlashing = Color(0xFF6F91FF); // #6F91FF rgb(111, 145, 255)
static const Color blueFlashing = Color(
0xFF6F91FF,
); // #6F91FF rgb(111, 145, 255)
//endregion
//region --- Green Colors ---
static const Color greenLight = Color(0xFFe6faf5); // #e6faf5 rgb(230, 250, 245)
static const Color greenLightHover = Color(0xFFd9f7f0); // #d9f7f0 rgb(217, 247, 240)
static const Color greenLightActive = Color(0xFFb0efdf); // #b0efdf rgb(176, 239, 223)
static const Color greenNormal = Color(0xFF00cc99); // #00cc99 rgb(0, 204, 153)
static const Color greenNormalHover = Color(0xFF00b88a); // #00b88a rgb(0, 184, 138)
static const Color greenNormalActive = Color(0xFF00a37a); // #00a37a rgb(0, 163, 122)
static const Color greenLight = Color(
0xFFe6faf5,
); // #e6faf5 rgb(230, 250, 245)
static const Color greenLightHover = Color(
0xFFd9f7f0,
); // #d9f7f0 rgb(217, 247, 240)
static const Color greenLightActive = Color(
0xFFb0efdf,
); // #b0efdf rgb(176, 239, 223)
static const Color greenNormal = Color(
0xFF00cc99,
); // #00cc99 rgb(0, 204, 153)
static const Color greenNormalHover = Color(
0xFF00b88a,
); // #00b88a rgb(0, 184, 138)
static const Color greenNormalActive = Color(
0xFF00a37a,
); // #00a37a rgb(0, 163, 122)
static const Color greenDark = Color(0xFF009973); // #009973 rgb(0, 153, 115)
static const Color greenDarkHover = Color(0xFF007a5c); // #007a5c rgb(0, 122, 92)
static const Color greenDarkActive = Color(0xFF005c45); // #005c45 rgb(0, 92, 69)
static const Color greenDarkHover = Color(
0xFF007a5c,
); // #007a5c rgb(0, 122, 92)
static const Color greenDarkActive = Color(
0xFF005c45,
); // #005c45 rgb(0, 92, 69)
static const Color greenDarker = Color(0xFF004736); // #004736 rgb(0, 71, 54)
//endregion
//region --- Black Colors ---
static const Color blackLight = Color(0xFFe6e6e6); // #e6e6e6 rgb(230, 230, 230)
static const Color blackLightHover = Color(0xFFd9d9d9); // #d9d9d9 rgb(217, 217, 217)
static const Color blackLightActive = Color(0xFFb0b0b0); // #b0b0b0 rgb(176, 176, 176)
static const Color blackLight = Color(
0xFFe6e6e6,
); // #e6e6e6 rgb(230, 230, 230)
static const Color blackLightHover = Color(
0xFFd9d9d9,
); // #d9d9d9 rgb(217, 217, 217)
static const Color blackLightActive = Color(
0xFFb0b0b0,
); // #b0b0b0 rgb(176, 176, 176)
static const Color blackNormal = Color(0xFF000000); // #000000 rgb(0, 0, 0)
static const Color blackNormalHover = Color(0xFF000000); // #000000 rgb(0, 0, 0)
static const Color blackNormalActive = Color(0xFF000000); // #000000 rgb(0, 0, 0)
static const Color blackNormalHover = Color(
0xFF000000,
); // #000000 rgb(0, 0, 0)
static const Color blackNormalActive = Color(
0xFF000000,
); // #000000 rgb(0, 0, 0)
static const Color blackDark = Color(0xFF000000); // #000000 rgb(0, 0, 0)
static const Color blackDarkHover = Color(0xFF000000); // #000000 rgb(0, 0, 0)
static const Color blackDarkActive = Color(0xFF000000); // #000000 rgb(0, 0, 0)
static const Color blackDarkActive = Color(
0xFF000000,
); // #000000 rgb(0, 0, 0)
static const Color blackDarker = Color(0xFF000000); // #000000 rgb(0, 0, 0)
//endregion
//region --- Grey Colors ---
static const Color darkGreyLight = Color(0xFFeaeaea); // #eaeaea rgb(234, 234, 234)
static const Color darkGreyLightHover = Color(0xFFdfdfdf); // #dfdfdf rgb(223, 223, 223)
static const Color darkGreyLightActive = Color(0xFFbdbdbd); // #bdbdbd rgb(189, 189, 189)
static const Color darkGreyNormal = Color(0xFF2a2a2a); // #2a2a2a rgb(42, 42, 42)
static const Color darkGreyNormalHover = Color(0xFF262626); // #262626 rgb(38, 38, 38)
static const Color darkGreyNormalActive = Color(0xFF222222); // #222222 rgb(34, 34, 34)
static const Color darkGreyDark = Color(0xFF202020); // #202020 rgb(32, 32, 32)
static const Color darkGreyDarkHover = Color(0xFF191919); // #191919 rgb(25, 25, 25)
static const Color darkGreyDarkActive = Color(0xFF131313); // #131313 rgb(19, 19, 19)
static const Color darkGreyDarker = Color(0xFF0f0f0f); // #0f0f0f rgb(15, 15, 15)
static const Color darkGreyLight = Color(
0xFFeaeaea,
); // #eaeaea rgb(234, 234, 234)
static const Color darkGreyLightHover = Color(
0xFFdfdfdf,
); // #dfdfdf rgb(223, 223, 223)
static const Color darkGreyLightActive = Color(
0xFFbdbdbd,
); // #bdbdbd rgb(189, 189, 189)
static const Color darkGreyNormal = Color(
0xFF2a2a2a,
); // #2a2a2a rgb(42, 42, 42)
static const Color darkGreyNormalHover = Color(
0xFF262626,
); // #262626 rgb(38, 38, 38)
static const Color darkGreyNormalActive = Color(
0xFF222222,
); // #222222 rgb(34, 34, 34)
static const Color darkGreyDark = Color(
0xFF202020,
); // #202020 rgb(32, 32, 32)
static const Color darkGreyDarkHover = Color(
0xFF191919,
); // #191919 rgb(25, 25, 25)
static const Color darkGreyDarkActive = Color(
0xFF131313,
); // #131313 rgb(19, 19, 19)
static const Color darkGreyDarker = Color(
0xFF0f0f0f,
); // #0f0f0f rgb(15, 15, 15)
//endregion
//region ---Medium Grey Colors ---
static const Color mediumGreyLight = Color(0xFFf4f4f4); // #f4f4f4 rgb(244, 244, 244)
static const Color mediumGreyLightHover = Color(0xFFeeeeee); // #eeeeee rgb(238, 238, 238)
static const Color mediumGreyLightActive = Color(0xFFdcdcdc); // #dcdcdc rgb(220, 220, 220)
static const Color mediumGreyNormal = Color(0xFF8f8f8f); // #8f8f8f rgb(143, 143, 143)
static const Color mediumGreyNormalHover = Color(0xFF818181); // #818181 rgb(129, 129, 129)
static const Color mediumGreyNormalActive = Color(0xFF727272); // #727272 rgb(114, 114, 114)
static const Color mediumGreyDark = Color(0xFF6b6b6b); // #6b6b6b rgb(107, 107, 107)
static const Color mediumGreyDarkHover = Color(0xFF565656); // #565656 rgb(86, 86, 86)
static const Color mediumGreyDarkActive = Color(0xFF404040); // #404040 rgb(64, 64, 64)
static const Color mediumGreyDarker = Color(0xFF323232); // #323232 rgb(50, 50, 50)
static const Color customGrey = Color(0xFF808081); // #808081 rgb(128, 128, 129)
static const Color mediumGrey = Color(
0xFF979797,
); // #979797 rgb(151, 151, 151)
static const Color mediumGreyLight = Color(
0xFFf4f4f4,
); // #f4f4f4 rgb(244, 244, 244)
static const Color mediumGreyLightHover = Color(
0xFFeeeeee,
); // #eeeeee rgb(238, 238, 238)
static const Color mediumGreyLightActive = Color(
0xFFdcdcdc,
); // #dcdcdc rgb(220, 220, 220)
static const Color mediumGreyNormal = Color(
0xFF8f8f8f,
); // #8f8f8f rgb(143, 143, 143)
static const Color mediumGreyNormalHover = Color(
0xFF818181,
); // #818181 rgb(129, 129, 129)
static const Color mediumGreyNormalActive = Color(
0xFF727272,
); // #727272 rgb(114, 114, 114)
static const Color mediumGreyDark = Color(
0xFF6b6b6b,
); // #6b6b6b rgb(107, 107, 107)
static const Color mediumGreyDarkHover = Color(
0xFF565656,
); // #565656 rgb(86, 86, 86)
static const Color mediumGreyDarkActive = Color(
0xFF404040,
); // #404040 rgb(64, 64, 64)
static const Color mediumGreyDarker = Color(
0xFF323232,
); // #323232 rgb(50, 50, 50)
static const Color customGrey = Color(
0xFF808081,
); // #808081 rgb(128, 128, 129)
//endregion
//region ---Light Grey Colors ---
static const Color lightGreyLight = Color(0xFFfdfdfd); // #fdfdfd rgb(253, 253, 253)
static const Color lightGreyLightHover = Color(0xFFfcfcfc); // #fcfcfc rgb(252, 252, 252)
static const Color lightGreyLightActive = Color(0xFFfafafa); // #fafafa rgb(250, 250, 250)
static const Color lightGreyNormal = Color(0xFFeeeeee); // #eeeeee rgb(238, 238, 238)
static const Color lightGreyNormalHover = Color(0xFFd6d6d6); // #d6d6d6 rgb(214, 214, 214)
static const Color lightGreyNormalActive = Color(0xFFbebebe); // #bebebe rgb(190, 190, 190)
static const Color lightGreyDark = Color(0xFFb3b3b3); // #b3b3b3 rgb(179, 179, 179)
static const Color lightGreyDarkHover = Color(0xFF8f8f8f); // #8f8f8f rgb(143, 143, 143)
static const Color lightGreyDarkActive = Color(0xFF6b6b6b); // #6b6b6b rgb(107, 107, 107)
static const Color lightGreyDarker = Color(0xFF535353); // #535353 rgb(83, 83, 83)
static const Color lightGreyLight = Color(
0xFFfdfdfd,
); // #fdfdfd rgb(253, 253, 253)
static const Color lightGreyLightHover = Color(
0xFFfcfcfc,
); // #fcfcfc rgb(252, 252, 252)
static const Color lightGreyLightActive = Color(
0xFFfafafa,
); // #fafafa rgb(250, 250, 250)
static const Color lightGreyNormal = Color(
0xFFeeeeee,
); // #eeeeee rgb(238, 238, 238)
static const Color lightGreyNormalHover = Color(
0xFFd6d6d6,
); // #d6d6d6 rgb(214, 214, 214)
static const Color lightGreyNormalActive = Color(
0xFFbebebe,
); // #bebebe rgb(190, 190, 190)
static const Color lightGreyDark = Color(
0xFFb3b3b3,
); // #b3b3b3 rgb(179, 179, 179)
static const Color lightGreyDarkHover = Color(
0xFF8f8f8f,
); // #8f8f8f rgb(143, 143, 143)
static const Color lightGreyDarkActive = Color(
0xFF6b6b6b,
); // #6b6b6b rgb(107, 107, 107)
static const Color lightGreyDarker = Color(
0xFF535353,
); // #535353 rgb(83, 83, 83)
//endregion
//region ---WhiteGrey Colors ---
static const Color whiteGreyLight = Color(0xFFfefefe); // #fefefe rgb(254, 254, 254)
static const Color whiteGreyLightHover = Color(0xFFfefefe); // #fefefe rgb(254, 254, 254)
static const Color whiteGreyLightActive = Color(0xFFfdfdfd); // #fdfdfd rgb(253, 253, 253)
static const Color whiteGreyNormal = Color(0xFFf9f9f9); // #f9f9f9 rgb(249, 249, 249)
static const Color whiteGreyNormalHover = Color(0xFFe0e0e0); // #e0e0e0 rgb(224, 224, 224)
static const Color whiteGreyNormalActive = Color(0xFFc7c7c7); // #c7c7c7 rgb(199, 199, 199)
static const Color whiteGreyDark = Color(0xFFbbbbbb); // #bbbbbb rgb(187, 187, 187)
static const Color whiteGreyDarkHover = Color(0xFF959595); // #959595 rgb(149, 149, 149)
static const Color whiteGreyDarkActive = Color(0xFF707070); // #707070 rgb(112, 112, 112)
static const Color whiteGreyDarker = Color(0xFF575757); // #575757 rgb(87, 87, 87)
static const Color whiteGreyLight = Color(
0xFFfefefe,
); // #fefefe rgb(254, 254, 254)
static const Color whiteGreyLightHover = Color(
0xFFfefefe,
); // #fefefe rgb(254, 254, 254)
static const Color whiteGreyLightActive = Color(
0xFFfdfdfd,
); // #fdfdfd rgb(253, 253, 253)
static const Color whiteGreyNormal = Color(
0xFFf9f9f9,
); // #f9f9f9 rgb(249, 249, 249)
static const Color whiteGreyNormalHover = Color(
0xFFe0e0e0,
); // #e0e0e0 rgb(224, 224, 224)
static const Color whiteGreyNormalActive = Color(
0xFFc7c7c7,
); // #c7c7c7 rgb(199, 199, 199)
static const Color whiteGreyDark = Color(
0xFFbbbbbb,
); // #bbbbbb rgb(187, 187, 187)
static const Color whiteGreyDarkHover = Color(
0xFF959595,
); // #959595 rgb(149, 149, 149)
static const Color whiteGreyDarkActive = Color(
0xFF707070,
); // #707070 rgb(112, 112, 112)
static const Color whiteGreyDarker = Color(
0xFF575757,
); // #575757 rgb(87, 87, 87)
//endregion
//region ---White Colors ---
static const Color whiteLight = Color(0xFFffffff); // #ffffff rgb(255, 255, 255)
static const Color whiteLightHover = Color(0xFFffffff); // #ffffff rgb(255, 255, 255)
static const Color whiteLightActive = Color(0xFFffffff); // #ffffff rgb(255, 255, 255)
static const Color whiteNormal = Color(0xFFffffff); // #ffffff rgb(255, 255, 255)
static const Color whiteNormalHover = Color(0xFFe6e6e6); // #e6e6e6 rgb(230, 230, 230)
static const Color whiteNormalActive = Color(0xFFcccccc); // #cccccc rgb(204, 204, 204)
static const Color whiteDark = Color(0xFFbfbfbf); // #bfbfbf rgb(191, 191, 191)
static const Color whiteDarkHover = Color(0xFF999999); // #999999 rgb(153, 153, 153)
static const Color whiteDarkActive = Color(0xFF737373); // #737373 rgb(115, 115, 115)
static const Color whiteLight = Color(
0xFFffffff,
); // #ffffff rgb(255, 255, 255)
static const Color whiteLightHover = Color(
0xFFffffff,
); // #ffffff rgb(255, 255, 255)
static const Color whiteLightActive = Color(
0xFFffffff,
); // #ffffff rgb(255, 255, 255)
static const Color whiteNormal = Color(
0xFFffffff,
); // #ffffff rgb(255, 255, 255)
static const Color whiteNormalHover = Color(
0xFFe6e6e6,
); // #e6e6e6 rgb(230, 230, 230)
static const Color whiteNormalActive = Color(
0xFFcccccc,
); // #cccccc rgb(204, 204, 204)
static const Color whiteDark = Color(
0xFFbfbfbf,
); // #bfbfbf rgb(191, 191, 191)
static const Color whiteDarkHover = Color(
0xFF999999,
); // #999999 rgb(153, 153, 153)
static const Color whiteDarkActive = Color(
0xFF737373,
); // #737373 rgb(115, 115, 115)
static const Color whiteDarker = Color(0xFF595959); // #595959 rgb(89, 89, 89)
//endregion
//region --- green1 Colors ---
static const Color green1Light = Color(0xFFe6f6f4); // #e6f6f4 rgb(230, 246, 244)
static const Color green1LightHover = Color(0xFFd9f2ef); // #d9f2ef rgb(217, 242, 239)
static const Color green1LightActive = Color(0xFFb0e4dd); // #b0e4dd rgb(176, 228, 221)
static const Color green1Normal = Color(0xFF00a991); // #00a991 rgb(0, 169, 145)
static const Color green1NormalHover = Color(0xFF009883); // #009883 rgb(0, 152, 131)
static const Color green1NormalActive = Color(0xFF008774); // #008774 rgb(0, 135, 116)
static const Color green1Light = Color(
0xFFe6f6f4,
); // #e6f6f4 rgb(230, 246, 244)
static const Color green1LightHover = Color(
0xFFd9f2ef,
); // #d9f2ef rgb(217, 242, 239)
static const Color green1LightActive = Color(
0xFFb0e4dd,
); // #b0e4dd rgb(176, 228, 221)
static const Color green1Normal = Color(
0xFF00a991,
); // #00a991 rgb(0, 169, 145)
static const Color green1NormalHover = Color(
0xFF009883,
); // #009883 rgb(0, 152, 131)
static const Color green1NormalActive = Color(
0xFF008774,
); // #008774 rgb(0, 135, 116)
static const Color green1Dark = Color(0xFF007f6d); // #007f6d rgb(0, 127, 109)
static const Color green1DarkHover = Color(0xFF006557); // #006557 rgb(0, 101, 87)
static const Color green1DarkActive = Color(0xFF004c41); // #004c41 rgb(0, 76, 65)
static const Color green1DarkHover = Color(
0xFF006557,
); // #006557 rgb(0, 101, 87)
static const Color green1DarkActive = Color(
0xFF004c41,
); // #004c41 rgb(0, 76, 65)
static const Color green1Darker = Color(0xFF003b33); // #003b33 rgb(0, 59, 51)
//endregion
//region --- Yellow Colors ---
static const Color yellowLight = Color(0xFFfff9e6); // #fff9e6 rgb(255, 249, 230)
static const Color yellowLightHover = Color(0xFFfff6da); // #fff6da rgb(255, 246, 218)
static const Color yellowLightActive = Color(0xFFffecb2); // #ffecb2 rgb(255, 236, 178)
static const Color yellowNormal = Color(0xFFffc107); // #ffc107 rgb(255, 193, 7)
static const Color yellowNormal2 = Color(0xFFFF9800); // #FF9800 rgb(255, 152, 0)
static const Color yellowNormalHover = Color(0xFFe6ae06); // #e6ae06 rgb(230, 174, 6)
static const Color yellowNormalActive = Color(0xFFcc9a06); // #cc9a06 rgb(204, 154, 6)
static const Color yellowLight = Color(
0xFFfff9e6,
); // #fff9e6 rgb(255, 249, 230)
static const Color yellowLightHover = Color(
0xFFfff6da,
); // #fff6da rgb(255, 246, 218)
static const Color yellowLightActive = Color(
0xFFffecb2,
); // #ffecb2 rgb(255, 236, 178)
static const Color yellowNormal = Color(
0xFFffc107,
); // #ffc107 rgb(255, 193, 7)
static const Color yellowNormal2 = Color(
0xFFFF9800,
); // #FF9800 rgb(255, 152, 0)
static const Color yellowNormalHover = Color(
0xFFe6ae06,
); // #e6ae06 rgb(230, 174, 6)
static const Color yellowNormalActive = Color(
0xFFcc9a06,
); // #cc9a06 rgb(204, 154, 6)
static const Color yellowDark = Color(0xFFbf9105); // #bf9105 rgb(191, 145, 5)
static const Color yellowDarkHover = Color(0xFF997404); // #997404 rgb(153, 116, 4)
static const Color yellowDarkActive = Color(0xFF735703); // #735703 rgb(115, 87, 3)
static const Color yellowDarkHover = Color(
0xFF997404,
); // #997404 rgb(153, 116, 4)
static const Color yellowDarkActive = Color(
0xFF735703,
); // #735703 rgb(115, 87, 3)
static const Color yellowDarker = Color(0xFF594402); // #594402 rgb(89, 68, 2)
// #594402 rgb(89, 68, 2)
@@ -141,44 +324,81 @@ class AppColor {
//region --- red Colors ---
static const Color redLight = Color(0xFFfdeeee); // #fdeeee rgb(253, 238, 238)
static const Color redLightHover = Color(0xFFfce6e6); // #fce6e6 rgb(252, 230, 230)
static const Color redLightActive = Color(0xFFf9cbcb); // #f9cbcb rgb(249, 203, 203)
static const Color redLightHover = Color(
0xFFfce6e6,
); // #fce6e6 rgb(252, 230, 230)
static const Color redLightActive = Color(
0xFFf9cbcb,
); // #f9cbcb rgb(249, 203, 203)
static const Color redNormal = Color(0xFFeb5757); // #eb5757 rgb(235, 87, 87)
static const Color redNormalHover = Color(0xFFd44e4e); // #d44e4e rgb(212, 78, 78)
static const Color redNormalActive = Color(0xFFbc4646); // #bc4646 rgb(188, 70, 70)
static const Color redNormalHover = Color(
0xFFd44e4e,
); // #d44e4e rgb(212, 78, 78)
static const Color redNormalActive = Color(
0xFFbc4646,
); // #bc4646 rgb(188, 70, 70)
static const Color redDark = Color(0xFFb04141); // #b04141 rgb(176, 65, 65)
static const Color redDarkHover = Color(0xFF8d3434); // #8d3434 rgb(141, 52, 52)
static const Color redDarkActive = Color(0xFF6a2727); // #6a2727 rgb(106, 39, 39)
static const Color redDarkHover = Color(
0xFF8d3434,
); // #8d3434 rgb(141, 52, 52)
static const Color redDarkActive = Color(
0xFF6a2727,
); // #6a2727 rgb(106, 39, 39)
static const Color redDarker = Color(0xFF521e1e); // #521e1e rgb(82, 30, 30)
static const Color redDarkerText = Color(0xFFD24E4E); // #D34E4E rgba(211, 78, 78, 1)
static const Color redDarkerText = Color(
0xFFD24E4E,
); // #D34E4E rgba(211, 78, 78, 1)
static const Color redLight2 = Color(0xFFEDDCE0); // #EDDCE0 rgb(237, 220, 224)
static const Color redLightActive2 = Color(0xFFE0BCC5); // #E0BCC5 rgb(224, 188, 197)
static const Color redLight2 = Color(
0xFFEDDCE0,
); // #EDDCE0 rgb(237, 220, 224)
static const Color redLightActive2 = Color(
0xFFE0BCC5,
); // #E0BCC5 rgb(224, 188, 197)
//endregion
//region --- Teal Colors ---
static const Color tealLight = Color(0xFFe8f6f8); // #e8f6f8 rgb(232, 246, 248)
static const Color tealLightHover = Color(0xFFdcf1f4); // #dcf1f4 rgb(220, 241, 244)
static const Color tealLightActive = Color(0xFFb7e2e9); // #b7e2e9 rgb(183, 226, 233)
static const Color tealNormal = Color(0xFF17a2b8); // #17a2b8 rgb(23, 162, 184)
static const Color tealNormalHover = Color(0xFF1592a6); // #1592a6 rgb(21, 146, 166)
static const Color tealNormalActive = Color(0xFF128293); // #128293 rgb(18, 130, 147)
static const Color tealLight = Color(
0xFFe8f6f8,
); // #e8f6f8 rgb(232, 246, 248)
static const Color tealLightHover = Color(
0xFFdcf1f4,
); // #dcf1f4 rgb(220, 241, 244)
static const Color tealLightActive = Color(
0xFFb7e2e9,
); // #b7e2e9 rgb(183, 226, 233)
static const Color tealNormal = Color(
0xFF17a2b8,
); // #17a2b8 rgb(23, 162, 184)
static const Color tealNormalHover = Color(
0xFF1592a6,
); // #1592a6 rgb(21, 146, 166)
static const Color tealNormalActive = Color(
0xFF128293,
); // #128293 rgb(18, 130, 147)
static const Color tealDark = Color(0xFF117a8a); // #117a8a rgb(17, 122, 138)
static const Color tealDarkHover = Color(0xFF0e616e); // #0e616e rgb(14, 97, 110)
static const Color tealDarkActive = Color(0xFF0a4953); // #0a4953 rgb(10, 73, 83)
static const Color tealDarkHover = Color(
0xFF0e616e,
); // #0e616e rgb(14, 97, 110)
static const Color tealDarkActive = Color(
0xFF0a4953,
); // #0a4953 rgb(10, 73, 83)
static const Color tealDarker = Color(0xFF083940); // #083940 rgb(8, 57, 64)
static const Color bgLight = Color(0xFFF5F5F5); // #083940 rgb(8, 57, 64)
static const Color bgIcon = Color(0xFF797979); // #797979
static const Color bgDark = Color(0xFF979797); // #083940 rgb(8, 57, 64)
static const Color textColor = Color(0xFF5B5B5B); // #083940 rgb(8, 57, 64)
static const Color textColor2 = Color(0xFF636363); // #636363 rgb(99, 99, 99)
static const Color labelTextColor = Color(0xFF808080);
static const Color textColorLight = Color(0xFFB2B2B2);
static const Color iconColor = Color(0xFF444444); // #444444 rgb(68, 68, 68)
static const Color borderColor = Color(0xFFC7CFCD); // #C7CFCD rgb(199, 207, 205)`
static const Color borderColor = Color(
0xFFC7CFCD,
); // #C7CFCD rgb(199, 207, 205)`
static const Color unselectTextColor = Color(0xFF888888); //
static const Color accent1 = Color(0xffffe5ce); //
static const Color bgLight2 = Color(0xFFEFEFEF); // #EFEFEF rgb(239, 239, 239)
//endregion
//region --- category Colors ---

View File

@@ -187,6 +187,9 @@ class $AssetsIconsGen {
/// File path: assets/icons/filter_outline.svg
SvgGenImage get filterOutline => const SvgGenImage('assets/icons/filter_outline.svg');
/// File path: assets/icons/gallery_add.svg
SvgGenImage get galleryAdd => const SvgGenImage('assets/icons/gallery_add.svg');
/// File path: assets/icons/gps.svg
SvgGenImage get gps => const SvgGenImage('assets/icons/gps.svg');
@@ -418,6 +421,7 @@ class $AssetsIconsGen {
farms,
filter,
filterOutline,
galleryAdd,
gps,
hashtag,
home,
@@ -674,6 +678,9 @@ class $AssetsVecGen {
/// File path: assets/vec/filter_outline.svg.vec
SvgGenImage get filterOutlineSvg => const SvgGenImage.vec('assets/vec/filter_outline.svg.vec');
/// File path: assets/vec/gallery_add.svg.vec
SvgGenImage get galleryAddSvg => const SvgGenImage.vec('assets/vec/gallery_add.svg.vec');
/// File path: assets/vec/gps.svg.vec
SvgGenImage get gpsSvg => const SvgGenImage.vec('assets/vec/gps.svg.vec');
@@ -905,6 +912,7 @@ class $AssetsVecGen {
farmsSvg,
filterSvg,
filterOutlineSvg,
galleryAddSvg,
gpsSvg,
hashtagSvg,
homeSvg,

View File

@@ -95,8 +95,8 @@ class _WaveBottomNavigationState extends State<WaveBottomNavigation> {
animation: _controller,
builder: (context, child) {
double value = 0.0;
final scale = _calculateScale(_controller.page ?? _controller.initialPage.toDouble() ?? 0.0, index);
value = index - (_controller.page ?? _controller.initialPage.toDouble() ?? 0.0);
final scale = _calculateScale(_controller.page ?? _controller.initialPage.toDouble(), index);
value = index - (_controller.page ?? _controller.initialPage.toDouble());
value = (value).clamp(-1, 1);
double offset = value * 30;
if (value.abs() < 0.2 || value.abs() > 0.2) {

View File

@@ -220,7 +220,7 @@ class _RFabState extends State<RFab> {
shape: WidgetStatePropertyAll(
CircleBorder(side: BorderSide(width: 1, color: Colors.transparent)),
),
fixedSize: WidgetStatePropertyAll(Size(widget.radius ?? 56, widget.radius ?? 56)),
fixedSize: WidgetStatePropertyAll(Size(widget.radius, widget.radius)),
padding: WidgetStatePropertyAll(EdgeInsets.zero),
),
child: widget.isLoading

View File

@@ -1,11 +1,6 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rasadyar_core/presentation/common/app_color.dart';
import 'package:rasadyar_core/presentation/widget/draggable_bottom_sheet/draggable_bottom_sheet_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class DraggableBottomSheet extends StatelessWidget {
final DraggableBottomSheetController controller;

View File

@@ -180,39 +180,4 @@ class RListView<T> extends StatelessWidget {
return onRefresh != null ? RefreshIndicator(onRefresh: onRefresh!, child: list) : list;
}
}
RListView._({
required this.type,
required this.scrollDirection,
required this.reverse,
required this.controller,
required this.primary,
required this.physics,
required this.scrollBehavior,
required this.shrinkWrap,
required this.center,
required this.cacheExtent,
required this.semanticChildCount,
required this.itemCount,
required this.dragStartBehavior,
required this.keyboardDismissBehavior,
required this.restorationId,
required this.clipBehavior,
required this.hitTestBehavior,
required this.prototypeItem,
required this.padding,
required this.itemExtent,
required this.itemExtentBuilder,
required this.findChildIndexCallback,
required this.itemBuilder,
required this.separatorBuilder,
required this.addAutomaticKeepAlives,
required this.addRepaintBoundaries,
required this.addSemanticIndexes,
required this.loadingWidget,
required this.emptyWidget,
required this.errorWidget,
required this.resource,
required this.onRefresh,
});
}

View File

@@ -0,0 +1,55 @@
import 'package:flutter/material.dart';
import 'package:rasadyar_core/core.dart';
class RStepper extends StatelessWidget {
const RStepper({
super.key,
required this.activeStepColor,
this.deactiveStepColor,
this.dividerColor,
required this.stepsCount,
required this.activeStep,
});
final Color activeStepColor;
final Color? deactiveStepColor;
final Color? dividerColor;
final int stepsCount;
final int activeStep;
@override
Widget build(BuildContext context) {
return SizedBox(
height: 24.h,
width: Get.width,
child: Row(
children: List.generate(stepsCount, (index) {
final isFirst = index == 0;
return SizedBox(
width: (Get.width) / (stepsCount - 1),
child: Container(
alignment: Alignment.center,
decoration: BoxDecoration(
color: index == activeStep
? activeStepColor
: deactiveStepColor ?? AppColor.whiteNormalActive,
shape: BoxShape.circle,
),
width: 24.w,
height: 24.h,
child: Center(
child: Text(
(index + 1).toString(),
style: AppFonts.yekan14.copyWith(color: AppColor.textColor),
textAlign: TextAlign.center,
),
),
),
);
}),
),
);
}
}

View File

@@ -45,6 +45,7 @@ export 'overlay_dropdown_widget/resource_overlay_dropdown.dart';
export 'pagination/pagination_from_until.dart';
export 'pagination/show_more.dart';
export 'slider/slider.dart';
export 'stepper/r_stepper.dart';
export 'tabs/new_tab.dart';
export 'tabs/r_segment.dart';
export 'tabs/tab.dart';

View File

@@ -4,6 +4,11 @@ import 'package:dio/dio.dart';
import 'package:flutter/services.dart';
import 'package:path_provider/path_provider.dart';
/// A class that allows you to download and install an APK file.
/// Example:
/// ```dart
/// await ApkUpdater.downloadAndInstall();
/// ```
class ApkUpdater {
static const _channel = MethodChannel('apk_installer');
@@ -13,7 +18,6 @@ class ApkUpdater {
final dir = await getExternalStorageDirectory();
final path = "${dir!.path}/update.apk";
final file = File(path);
await dio.download(apkUrl, path);

View File

@@ -1,5 +1,10 @@
import 'package:rasadyar_core/core.dart';
/// Pick a camera image.
/// Example:
/// ```dart
/// await pickCameraImage();
/// ```
Future<XFile?> pickCameraImage({
double? maxWidth,
double? maxHeight,
@@ -21,6 +26,11 @@ Future<XFile?> pickCameraImage({
return tmpImage;
}
/// Pick a gallery image.
/// Example:
/// ```dart
/// await pickGalleryImage();
/// ```
Future<XFile?> pickGalleryImage({
double? maxWidth,
double? maxHeight,

View File

@@ -2,12 +2,16 @@ import 'package:intl/intl.dart';
import 'package:persian_datetime_picker/persian_datetime_picker.dart';
extension XDateTime2 on DateTime {
get formattedJalaliDate {
/// Convert the date time to a Jalali date.
/// Example: DateTime(2025, 1, 1) -> '1404/01/01'
String get formattedJalaliDate {
final jalaliDate = Jalali.fromDateTime(this);
return "${jalaliDate.year}/${jalaliDate.month.toString().padLeft(2, '0')}/${jalaliDate.day.toString().padLeft(2, '0')}";
}
get formattedYHMS {
/// Convert the date time to a YHMS date.
/// Example: DateTime(2025, 1, 1) -> '2025-01-01 00:00:00'
String get formattedYHMS {
return DateFormat('yyyy-MM-dd HH:mm:ss').format(this);
}
}

View File

@@ -1,14 +1,17 @@
import 'package:intl/intl.dart';
extension XNumExtension on num? {
/// Convert the number to a string with comma separator.
/// Example: 1000 -> '۱,۰۰۰'
String get separatedByCommaFa {
final formatter = NumberFormat('#,###', 'fa_IR');
return this == null ? '':formatter.format(this);
return this == null ? '' : formatter.format(this);
}
/// Convert the number to a string with comma separator.
/// Example: 1000 -> '1,000'
String get separatedByComma {
final formatter = NumberFormat('#,###', 'en_US');
return this == null ? '':formatter.format(this);
return this == null ? '' : formatter.format(this);
}
}

View File

@@ -2,49 +2,92 @@ import 'package:intl/intl.dart';
import 'package:persian_datetime_picker/persian_datetime_picker.dart';
extension XString on String? {
/// Convert the string to a number with comma separator.
/// Example: '1000' -> '1,000'
/// Example: '1000000' -> '1,000,000'
/// Example: '1000000000' -> '1,000,000,000'
String get separatedByComma {
final formatter = NumberFormat('#,###');
final number = num.tryParse(this ?? '');
return number != null ? formatter.format(number) : (this ?? '');
}
/// Clear the comma from the string.
/// Example: '1,000' -> '1000'
/// Example: '1,000,000' -> '1000000'
/// Example: '1,000,000,000' -> '1000000000'
String get clearComma {
return (this ?? '').replaceAll(RegExp(r'\D'), '');
}
/// Add the count extension to the string.
/// Example: '1' -> '1 قطعه'
/// Example: '10' -> '10 قطعه'
/// Example: '100' -> '100 قطعه'
String get addCountEXT {
return '$this قطعه';
}
/// Add the day extension to the string.
/// Example: '1' -> '1 روزه'
/// Example: '10' -> '10 روزه'
/// Example: '100' -> '100 روزه'
String get addDayEXT {
return '$thisروزه';
}
/// Add the kg extension to the string.
/// Example: '1' -> '1 کیلوگرم'
/// Example: '10' -> '10 کیلوگرم'
/// Example: '100' -> '100 کیلوگرم'
String get addKgFa {
return '${this ?? 0}کیلوگرم ';
}
/// Add the kg extension to the string.
/// Example: '1' -> '1 کیلوگرم'
/// Example: '10' -> '10 کیلوگرم'
/// Example: '100' -> '100 کیلوگرم'
String get addKgFaWithParentheses {
return '${this ?? 0} (کیلوگرم)';
}
/// Add the kg extension to the string.
/// Example: '1' -> '1 KG'
/// Example: '10' -> '10 KG'
/// Example: '100' -> '100 KG'
String get addKg {
return '$this KG';
}
/// Add the real extension to the string.
/// Example: '1' -> '1 ریال'
/// Example: '10' -> '10 ریال'
/// Example: '100' -> '100 ریال'
String get addReal {
return ' $this ریال';
}
/// Convert the string to a DateTime.
/// Example: '2025-01-01' -> DateTime(2025, 1, 1)
/// Example: '2025-01-01 12:00:00' -> DateTime(2025, 1, 1, 12, 0, 0)
DateTime get toDateTime => DateTime.parse(this ?? '');
/// Convert the string to a Jalali date.
/// Example: '2025/01/01' -> '1404-01-01'
/// Example: '2025-01-01' -> '1404-01-01'
/// Example: '2025-01-01 12:00:00' -> '1404-01-01 12:00:00'
String get formattedJalaliDate {
String tmp = (this != null && this!.contains("/")) ? this!.replaceAll("/", "-") : (this ?? "");
String tmp = (this != null && this!.contains("/"))
? this!.replaceAll("/", "-")
: (this ?? "");
final dateTime = DateTime.parse(tmp);
final jalaliDate = Jalali.fromDateTime(dateTime);
return "${jalaliDate.year}/${jalaliDate.month.toString().padLeft(2, '0')}/${jalaliDate.day.toString().padLeft(2, '0')}";
}
/// Convert the string to a Jalali date and time.
/// Example: '2025-01-01 12:00:00' -> Jalali(year: 1404, month: 1, day: 1, hour: 12, minute: 0, second: 0)
String get formattedJalaliDateYHMS {
final dateTime = DateTime.parse(this ?? '');
final jalaliDate = Jalali.fromDateTime(dateTime);
@@ -55,15 +98,35 @@ extension XString on String? {
return DateFormat('yyyy-MM-dd HH:mm:ss').format(toDateTime);
}
/// Convert the string to a Jalali date.
/// Example: '2025-01-01' -> Jalali(year: 1404, month: 1, day: 1)
/// Example: '2025-01-01 12:00:00' -> Jalali(year: 1404, month: 1, day: 1, hour: 12, minute: 0, second: 0)
Jalali get toJalali {
final dateTime = DateTime.parse(this ?? '');
return Jalali.fromDateTime(dateTime);
}
/// Get the version number from the string.
/// Example: '1.0.0' -> 100
/// Example: '1.0.0.0' -> 1000
int get versionNumber => int.parse(this?.replaceAll(".", '') ?? '0');
/// Check if the string is a valid version number.
/// Example: '۹' -> true
/// Example: '۱۲۳۴۵۶۷۸۹۰' -> true
/// Example: '1234567890' -> false
bool get isDifferentDigits {
final regex = RegExp(r'[۰-۹٠-٩]');
return regex.hasMatch(this ?? '');
}
/// Normalize the string to remove extra spaces and convert to lowercase.
/// Example: " Hello World " -> "hello world"
/// Example: "Hello World" -> "hello world"
/// Example: "hello world" -> "hello world"
/// Example: "HELLO WORLD" -> "hello world"
/// Example: "Hello World" -> "hello world"
/// Example: "Hello World" -> "hello world"
String? get normalize =>
this?.toLowerCase().trim().replaceAll(RegExp(r'\s+'), ' ');
}

View File

@@ -2,9 +2,16 @@ import 'dart:io';
import 'logger_utils.dart';
/// Get the file size in KB.
/// Example:
/// ```dart
/// getFileSizeInKB('path/to/file.jpg');
/// ```
void getFileSizeInKB(String filePath, {String? tag}) {
final file = File(filePath);
final bytes = file.lengthSync();
var size = (bytes / 1024).ceil();
iLog('${tag ?? 'Picked'} image Size: $size , fileName : ${file.path.split('/').last}');
}
iLog(
'${tag ?? 'Picked'} image Size: $size , fileName : ${file.path.split('/').last}',
);
}

View File

@@ -1,5 +1,6 @@
import 'package:rasadyar_core/presentation/utils/data_time_utils.dart';
/// Build a query params map.
Map<String, dynamic> buildQueryParams({
Map<String, dynamic>? queryParams,
String? search,
@@ -49,6 +50,7 @@ Map<String, dynamic> buildQueryParams({
return params;
}
/// Build a raw query params map.
Map<String, dynamic>? buildRawQueryParams({
Map<String, dynamic>? queryParams,
String? search,
@@ -101,20 +103,21 @@ Map<String, dynamic>? buildRawQueryParams({
}
if (centerLat != null) {
params['center_lat'] = centerLat ?? '';
params['center_lat'] = centerLat;
}
if (centerLng != null) {
params['center_lon'] = centerLng ?? '';
params['center_lon'] = centerLng;
}
if (radius != null) {
params['radius'] = radius ?? '';
params['radius'] = radius;
}
return params.keys.isEmpty ? null : params;
}
/// A map of English digits to Persian digits.
const Map<String, String> digitMap = {
'۰': '0',
'۱': '1',

View File

@@ -2,12 +2,12 @@ import 'dart:math';
final _random = Random();
/// Generate a random integer between min and max.
int randomInt(int min, int max) {
return min + _random.nextInt(max - min + 1);
}
/// Generate a random double between min and max.
double randomDouble(double min, double max) {
return min + _random.nextDouble() * (max - min);
}

View File

@@ -1,5 +1,10 @@
import 'package:flutter/foundation.dart';
/// Parse a list in isolate.
/// Example:
/// ```dart
/// await parseListInIsolate<T>(list, fromJson);
/// ```
List<T> _parserList<T>(Map<String, dynamic> args) {
final list = args['list'] as List<dynamic>;
final T Function(Map<String, dynamic>) fromJson =
@@ -8,6 +13,11 @@ List<T> _parserList<T>(Map<String, dynamic> args) {
return list.map<T>((e) => fromJson(e as Map<String, dynamic>)).toList();
}
/// Parse a list in isolate.
/// Example:
/// ```dart
/// await parseListInIsolate<T>(list, fromJson);
/// ```
Future<List<T>> parseListInIsolate<T>(
List<dynamic> list,
T Function(Map<String, dynamic>) fromJson,

View File

@@ -1,8 +1,14 @@
import 'package:flutter/services.dart';
/// A text input formatter that allows only one decimal point and one digit before the decimal point.
/// Example: '1234567890' -> '1234567890'
/// Example: '1234567890.1234567890' -> '1234567890.1'
class FirstDigitDecimalFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(TextEditingValue oldValue, TextEditingValue newValue) {
TextEditingValue formatEditUpdate(
TextEditingValue oldValue,
TextEditingValue newValue,
) {
String digit = newValue.text.replaceAll(RegExp(r'[^0-9]'), "");
late String res;

View File

@@ -2,6 +2,11 @@ import 'package:flutter/services.dart';
import '../map_utils.dart';
/// A text input formatter that converts English digits to Persian digits.
/// Example: '1234567890' -> '۱۲۳۴۵۶۷۸۹۰'
/// Example: '۱۲۳۴۵۶۷۸۹۰' -> '۱۲۳۴۵۶۷۸۹۰'
/// Example: '1234567890.1234567890' -> '۱۲۳۴۵۶۷۸۹۰.۱۲۳۴۵۶۷۸۹۰'
/// Example: '۱۲۳۴۵۶۷۸۹۰.۱۲۳۴۵۶۷۸۹۰' -> '۱۲۳۴۵۶۷۸۹۰.۱۲۳۴۵۶۷۸۹۰'
class PersianFormatter extends TextInputFormatter {
String _convert(String input) {
final buffer = StringBuffer();

View File

@@ -1,6 +1,12 @@
import 'package:flutter/services.dart';
import 'package:intl/intl.dart';
/// A text input formatter that formats numbers with a separator.
/// Example:
/// ```dart
/// SeparatorInputFormatter()
/// ```
class SeparatorInputFormatter extends TextInputFormatter {
final NumberFormat _formatter;

View File

@@ -13,6 +13,6 @@ export 'network/network.dart';
export 'number_utils.dart';
export 'parser.dart';
export 'route_utils.dart';
export 'separator_input_formatter.dart';
export 'text_input_formatter/separator_input_formatter.dart';
export 'text_input_formatter/first_digit_decimal_formatter.dart';
export 'text_input_formatter/persian_formatter.dart';

View File

@@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: dd3d2ad434b9510001d089e8de7556d50c834481b9abc2891a0184a8493a19dc
sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d
url: "https://pub.dev"
source: hosted
version: "89.0.0"
version: "91.0.0"
analyzer:
dependency: "direct overridden"
description:
name: analyzer
sha256: c22b6e7726d1f9e5db58c7251606076a71ca0dbcf76116675edfadbec0c9e875
sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08
url: "https://pub.dev"
source: hosted
version: "8.2.0"
version: "8.4.1"
android_intent_plus:
dependency: "direct main"
description:
@@ -77,10 +77,10 @@ packages:
dependency: transitive
description:
name: build
sha256: "5b887c55a0f734b433b3b2d89f9cd1f99eb636b17e268a5b4259258bc916504b"
sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9
url: "https://pub.dev"
source: hosted
version: "4.0.0"
version: "4.0.2"
build_config:
dependency: transitive
description:
@@ -93,18 +93,18 @@ packages:
dependency: transitive
description:
name: build_daemon
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
url: "https://pub.dev"
source: hosted
version: "4.0.4"
version: "4.1.1"
build_runner:
dependency: "direct dev"
description:
name: build_runner
sha256: "804c47c936df75e1911c19a4fb8c46fa8ff2b3099b9f2b2aa4726af3774f734b"
sha256: "7b5b569f3df370590a85029148d6fc66c7d0201fc6f1847c07dd85d365ae9fcd"
url: "https://pub.dev"
source: hosted
version: "2.8.0"
version: "2.10.3"
built_collection:
dependency: transitive
description:
@@ -237,18 +237,18 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
version: "0.3.5"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.dev"
source: hosted
version: "3.0.6"
version: "3.0.7"
cupertino_icons:
dependency: "direct main"
description:
@@ -277,10 +277,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697
sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "3.1.3"
dartx:
dependency: "direct main"
description:
@@ -309,10 +309,10 @@ packages:
dependency: "direct main"
description:
name: device_info_plus
sha256: "49413c8ca514dea7633e8def233b25efdf83ec8522955cc2c0e3ad802927e7c6"
sha256: dd0e8e02186b2196c7848c9d394a5fd6e5b57a43a546082c5820b1ec72317e33
url: "https://pub.dev"
source: hosted
version: "12.1.0"
version: "12.2.0"
device_info_plus_platform_interface:
dependency: transitive
description:
@@ -325,10 +325,10 @@ packages:
dependency: "direct main"
description:
name: device_preview_plus
sha256: "2ebe9cf25ed46875c9c1b745d0438df9e4c49f7bcf9ea466c88efbcffcc73ab7"
sha256: eb3e67929c9f04759e0d3708ad91d1018235549bcf8699f8a94909684c6555ae
url: "https://pub.dev"
source: hosted
version: "2.5.1"
version: "2.5.5"
dio:
dependency: "direct main"
description:
@@ -381,34 +381,34 @@ packages:
dependency: transitive
description:
name: file_selector_linux
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
sha256: "80a877f5ec570c4fb3b40720a70b6f31e8bb1315a464b4d3e92fe82754d4b21a"
url: "https://pub.dev"
source: hosted
version: "0.9.3+2"
version: "0.9.3+3"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c"
sha256: "44f24d102e368370951b98ffe86c7325b38349e634578312976607d28cc6d747"
url: "https://pub.dev"
source: hosted
version: "0.9.4+4"
version: "0.9.4+6"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85"
url: "https://pub.dev"
source: hosted
version: "2.6.2"
version: "2.7.0"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b"
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
url: "https://pub.dev"
source: hosted
version: "0.9.3+4"
version: "0.9.3+5"
fixnum:
dependency: transitive
description:
@@ -511,10 +511,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
url: "https://pub.dev"
source: hosted
version: "2.0.30"
version: "2.0.32"
flutter_rating_bar:
dependency: "direct main"
description:
@@ -591,10 +591,10 @@ packages:
dependency: "direct main"
description:
name: flutter_svg
sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678
sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.2.2"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -689,10 +689,10 @@ packages:
dependency: "direct main"
description:
name: get_it
sha256: a4292e7cf67193f8e7c1258203104eb2a51ec8b3a04baa14695f4064c144297b
sha256: ae78de7c3f2304b8d81f2bb6e320833e5e81de942188542328f074978cc0efa9
url: "https://pub.dev"
source: hosted
version: "8.2.0"
version: "8.3.0"
get_test:
dependency: "direct dev"
description:
@@ -729,34 +729,34 @@ packages:
dependency: "direct main"
description:
name: hive_ce
sha256: d678b1b2e315c18cd7ed8fd79eda25d70a1f3852d6988bfe5461cffe260c60aa
sha256: "81d39a03c4c0ba5938260a8c3547d2e71af59defecea21793d57fc3551f0d230"
url: "https://pub.dev"
source: hosted
version: "2.14.0"
version: "2.15.1"
hive_ce_flutter:
dependency: "direct main"
description:
name: hive_ce_flutter
sha256: f5bd57fda84402bca7557fedb8c629c96c8ea10fab4a542968d7b60864ca02cc
sha256: "26d656c9e8974f0732f1d09020e2d7b08ba841b8961a02dbfb6caf01474b0e9a"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
version: "2.3.3"
hive_ce_generator:
dependency: "direct dev"
description:
name: hive_ce_generator
sha256: "8c677690c8ead43778ddf7ed8ff17e852dd5d22d082c75182b072842c0dc5055"
sha256: b19ac263cb37529513508ba47352c41e6de72ba879952898d9c18c9c8a955921
url: "https://pub.dev"
source: hosted
version: "1.9.5"
version: "1.10.0"
http:
dependency: transitive
description:
name: http
sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
version: "1.6.0"
http_multi_server:
dependency: transitive
description:
@@ -809,18 +809,18 @@ packages:
dependency: "direct main"
description:
name: image_picker
sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041"
sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.2.1"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "8dfe08ea7fcf7467dbaf6889e72eebd5e0d6711caae201fdac780eb45232cd02"
sha256: a1cd1584fae64f6ecca63113fd5450e3483c097cc05e43a2f073330f62adcabe
url: "https://pub.dev"
source: hosted
version: "0.8.13+3"
version: "0.8.13+8"
image_picker_for_web:
dependency: transitive
description:
@@ -833,10 +833,10 @@ packages:
dependency: transitive
description:
name: image_picker_ios
sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e
sha256: "997d100ce1dda5b1ba4085194c5e36c9f8a1fb7987f6a36ab677a344cd2dc986"
url: "https://pub.dev"
source: hosted
version: "0.8.13"
version: "0.8.13+2"
image_picker_linux:
dependency: transitive
description:
@@ -849,18 +849,18 @@ packages:
dependency: transitive
description:
name: image_picker_macos
sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
version: "0.2.2+1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665"
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
version: "2.11.1"
image_picker_windows:
dependency: transitive
description:
@@ -1017,10 +1017,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.17.0"
mgrs_dart:
dependency: transitive
description:
@@ -1153,18 +1153,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
sha256: "95c68a74d3cab950fd0ed8073d9fab15c1c06eb1f3eec68676e87aabc9ecee5a"
url: "https://pub.dev"
source: hosted
version: "2.2.18"
version: "2.2.21"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
sha256: "97390a0719146c7c3e71b6866c34f1cde92685933165c1c671984390d2aca776"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.4.4"
path_provider_linux:
dependency: transitive
description:
@@ -1377,18 +1377,18 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
sha256: bd14436108211b0d4ee5038689a56d4ae3620fd72fd6036e113bf1345bc74d9e
sha256: "07d552dbe8e71ed720e5205e760438ff4ecfb76ec3b32ea664350e2ca4b0c43b"
url: "https://pub.dev"
source: hosted
version: "2.4.13"
version: "2.4.16"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
url: "https://pub.dev"
source: hosted
version: "2.5.4"
version: "2.5.6"
shared_preferences_linux:
dependency: transitive
description:
@@ -1478,10 +1478,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: ccf30b0c9fbcd79d8b6f5bfac23199fb354938436f62475e14aea0f29ee0f800
sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243"
url: "https://pub.dev"
source: hosted
version: "4.0.1"
version: "4.0.2"
source_helper:
dependency: transitive
description:
@@ -1514,14 +1514,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
sqflite:
dependency: transitive
description:
@@ -1614,26 +1606,26 @@ packages:
dependency: "direct dev"
description:
name: test
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7"
url: "https://pub.dev"
source: hosted
version: "1.26.2"
version: "1.26.3"
test_api:
dependency: transitive
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.dev"
source: hosted
version: "0.7.6"
version: "0.7.7"
test_core:
dependency: transitive
description:
name: test_core
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0"
url: "https://pub.dev"
source: hosted
version: "0.6.11"
version: "0.6.12"
time:
dependency: transitive
description:
@@ -1662,10 +1654,10 @@ packages:
dependency: transitive
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8
url: "https://pub.dev"
source: hosted
version: "4.5.1"
version: "4.5.2"
vector_graphics:
dependency: transitive
description:
@@ -1710,10 +1702,10 @@ packages:
dependency: transitive
description:
name: watcher
sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c"
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
url: "https://pub.dev"
source: hosted
version: "1.1.3"
version: "1.1.4"
web:
dependency: transitive
description:
@@ -1750,10 +1742,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03"
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.dev"
source: hosted
version: "5.14.0"
version: "5.15.0"
win32_registry:
dependency: transitive
description:
@@ -1803,5 +1795,5 @@ packages:
source: hosted
version: "2.1.0"
sdks:
dart: ">=3.9.2 <4.0.0"
flutter: ">=3.35.4"
dart: ">=3.10.0 <4.0.0"
flutter: ">=3.35.7"

View File

@@ -4,7 +4,7 @@ publish_to: none
version: 1.3.0
environment:
sdk: ^3.9.2
sdk: ^3.10.0
dependencies:
flutter:

View File

@@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: da0d9209ca76bde579f2da330aeb9df62b6319c834fa7baae052021b0462401f
sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d
url: "https://pub.dev"
source: hosted
version: "85.0.0"
version: "91.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: "974859dc0ff5f37bc4313244b3218c791810d03ab3470a579580279ba971a48d"
sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08
url: "https://pub.dev"
source: hosted
version: "7.7.1"
version: "8.4.1"
android_intent_plus:
dependency: transitive
description:
@@ -77,10 +77,10 @@ packages:
dependency: transitive
description:
name: build
sha256: ce76b1d48875e3233fde17717c23d1f60a91cc631597e49a400c89b475395b1d
sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "4.0.2"
build_config:
dependency: transitive
description:
@@ -93,34 +93,18 @@ packages:
dependency: transitive
description:
name: build_daemon
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
url: "https://pub.dev"
source: hosted
version: "4.0.4"
build_resolvers:
dependency: transitive
description:
name: build_resolvers
sha256: d1d57f7807debd7349b4726a19fd32ec8bc177c71ad0febf91a20f84cd2d4b46
url: "https://pub.dev"
source: hosted
version: "3.0.3"
version: "4.1.1"
build_runner:
dependency: "direct dev"
description:
name: build_runner
sha256: b24597fceb695969d47025c958f3837f9f0122e237c6a22cb082a5ac66c3ca30
sha256: "7b5b569f3df370590a85029148d6fc66c7d0201fc6f1847c07dd85d365ae9fcd"
url: "https://pub.dev"
source: hosted
version: "2.7.1"
build_runner_core:
dependency: transitive
description:
name: build_runner_core
sha256: "066dda7f73d8eb48ba630a55acb50c4a84a2e6b453b1cb4567f581729e794f7b"
url: "https://pub.dev"
source: hosted
version: "9.3.1"
version: "2.10.3"
built_collection:
dependency: transitive
description:
@@ -253,18 +237,18 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
version: "0.3.5"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.dev"
source: hosted
version: "3.0.6"
version: "3.0.7"
cupertino_icons:
dependency: transitive
description:
@@ -293,10 +277,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: "8a0e5fba27e8ee025d2ffb4ee820b4e6e2cf5e4246a6b1a477eb66866947e0bb"
sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b
url: "https://pub.dev"
source: hosted
version: "3.1.1"
version: "3.1.3"
dartx:
dependency: transitive
description:
@@ -325,10 +309,10 @@ packages:
dependency: transitive
description:
name: device_info_plus
sha256: "49413c8ca514dea7633e8def233b25efdf83ec8522955cc2c0e3ad802927e7c6"
sha256: dd0e8e02186b2196c7848c9d394a5fd6e5b57a43a546082c5820b1ec72317e33
url: "https://pub.dev"
source: hosted
version: "12.1.0"
version: "12.2.0"
device_info_plus_platform_interface:
dependency: transitive
description:
@@ -341,10 +325,10 @@ packages:
dependency: transitive
description:
name: device_preview_plus
sha256: "2ebe9cf25ed46875c9c1b745d0438df9e4c49f7bcf9ea466c88efbcffcc73ab7"
sha256: eb3e67929c9f04759e0d3708ad91d1018235549bcf8699f8a94909684c6555ae
url: "https://pub.dev"
source: hosted
version: "2.5.1"
version: "2.5.5"
dio:
dependency: transitive
description:
@@ -397,34 +381,34 @@ packages:
dependency: transitive
description:
name: file_selector_linux
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
sha256: "80a877f5ec570c4fb3b40720a70b6f31e8bb1315a464b4d3e92fe82754d4b21a"
url: "https://pub.dev"
source: hosted
version: "0.9.3+2"
version: "0.9.3+3"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c"
sha256: "44f24d102e368370951b98ffe86c7325b38349e634578312976607d28cc6d747"
url: "https://pub.dev"
source: hosted
version: "0.9.4+4"
version: "0.9.4+6"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85"
url: "https://pub.dev"
source: hosted
version: "2.6.2"
version: "2.7.0"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b"
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
url: "https://pub.dev"
source: hosted
version: "0.9.3+4"
version: "0.9.3+5"
fixnum:
dependency: transitive
description:
@@ -527,10 +511,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
url: "https://pub.dev"
source: hosted
version: "2.0.30"
version: "2.0.32"
flutter_rating_bar:
dependency: transitive
description:
@@ -607,10 +591,10 @@ packages:
dependency: transitive
description:
name: flutter_svg
sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678
sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.2.2"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -705,10 +689,10 @@ packages:
dependency: transitive
description:
name: get_it
sha256: a4292e7cf67193f8e7c1258203104eb2a51ec8b3a04baa14695f4064c144297b
sha256: ae78de7c3f2304b8d81f2bb6e320833e5e81de942188542328f074978cc0efa9
url: "https://pub.dev"
source: hosted
version: "8.2.0"
version: "8.3.0"
get_test:
dependency: "direct dev"
description:
@@ -745,34 +729,34 @@ packages:
dependency: transitive
description:
name: hive_ce
sha256: d678b1b2e315c18cd7ed8fd79eda25d70a1f3852d6988bfe5461cffe260c60aa
sha256: "81d39a03c4c0ba5938260a8c3547d2e71af59defecea21793d57fc3551f0d230"
url: "https://pub.dev"
source: hosted
version: "2.14.0"
version: "2.15.1"
hive_ce_flutter:
dependency: transitive
description:
name: hive_ce_flutter
sha256: f5bd57fda84402bca7557fedb8c629c96c8ea10fab4a542968d7b60864ca02cc
sha256: "26d656c9e8974f0732f1d09020e2d7b08ba841b8961a02dbfb6caf01474b0e9a"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
version: "2.3.3"
hive_ce_generator:
dependency: "direct dev"
description:
name: hive_ce_generator
sha256: a169feeff2da9cc2c417ce5ae9bcebf7c8a95d7a700492b276909016ad70a786
sha256: b19ac263cb37529513508ba47352c41e6de72ba879952898d9c18c9c8a955921
url: "https://pub.dev"
source: hosted
version: "1.9.3"
version: "1.10.0"
http:
dependency: transitive
description:
name: http
sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
version: "1.6.0"
http_multi_server:
dependency: transitive
description:
@@ -825,18 +809,18 @@ packages:
dependency: transitive
description:
name: image_picker
sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041"
sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.2.1"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "8dfe08ea7fcf7467dbaf6889e72eebd5e0d6711caae201fdac780eb45232cd02"
sha256: a1cd1584fae64f6ecca63113fd5450e3483c097cc05e43a2f073330f62adcabe
url: "https://pub.dev"
source: hosted
version: "0.8.13+3"
version: "0.8.13+8"
image_picker_for_web:
dependency: transitive
description:
@@ -849,10 +833,10 @@ packages:
dependency: transitive
description:
name: image_picker_ios
sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e
sha256: "997d100ce1dda5b1ba4085194c5e36c9f8a1fb7987f6a36ab677a344cd2dc986"
url: "https://pub.dev"
source: hosted
version: "0.8.13"
version: "0.8.13+2"
image_picker_linux:
dependency: transitive
description:
@@ -865,18 +849,18 @@ packages:
dependency: transitive
description:
name: image_picker_macos
sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
version: "0.2.2+1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665"
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
version: "2.11.1"
image_picker_windows:
dependency: transitive
description:
@@ -993,10 +977,10 @@ packages:
dependency: transitive
description:
name: logger
sha256: "55d6c23a6c15db14920e037fe7e0dc32e7cdaf3b64b4b25df2d541b5b6b81c0c"
sha256: a7967e31b703831a893bbc3c3dd11db08126fe5f369b5c648a36f821979f5be3
url: "https://pub.dev"
source: hosted
version: "2.6.1"
version: "2.6.2"
logging:
dependency: transitive
description:
@@ -1033,10 +1017,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.17.0"
mgrs_dart:
dependency: transitive
description:
@@ -1057,10 +1041,10 @@ packages:
dependency: transitive
description:
name: mockito
sha256: "2314cbe9165bcd16106513df9cf3c3224713087f09723b128928dc11a4379f99"
sha256: "4feb43bc4eb6c03e832f5fcd637d1abb44b98f9cfa245c58e27382f58859f8f6"
url: "https://pub.dev"
source: hosted
version: "5.5.0"
version: "5.5.1"
mocktail:
dependency: "direct dev"
description:
@@ -1169,18 +1153,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
sha256: "95c68a74d3cab950fd0ed8073d9fab15c1c06eb1f3eec68676e87aabc9ecee5a"
url: "https://pub.dev"
source: hosted
version: "2.2.18"
version: "2.2.21"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
sha256: "97390a0719146c7c3e71b6866c34f1cde92685933165c1c671984390d2aca776"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.4.4"
path_provider_linux:
dependency: transitive
description:
@@ -1355,7 +1339,7 @@ packages:
path: "../core"
relative: true
source: path
version: "1.2.0+2"
version: "1.3.0"
rive:
dependency: transitive
description:
@@ -1400,18 +1384,18 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
sha256: bd14436108211b0d4ee5038689a56d4ae3620fd72fd6036e113bf1345bc74d9e
sha256: "07d552dbe8e71ed720e5205e760438ff4ecfb76ec3b32ea664350e2ca4b0c43b"
url: "https://pub.dev"
source: hosted
version: "2.4.13"
version: "2.4.16"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
url: "https://pub.dev"
source: hosted
version: "2.5.4"
version: "2.5.6"
shared_preferences_linux:
dependency: transitive
description:
@@ -1501,10 +1485,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: "7b19d6ba131c6eb98bfcbf8d56c1a7002eba438af2e7ae6f8398b2b0f4f381e3"
sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243"
url: "https://pub.dev"
source: hosted
version: "3.1.0"
version: "4.0.2"
source_helper:
dependency: transitive
description:
@@ -1537,14 +1521,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
sqflite:
dependency: transitive
description:
@@ -1637,26 +1613,26 @@ packages:
dependency: "direct dev"
description:
name: test
sha256: "65e29d831719be0591f7b3b1a32a3cda258ec98c58c7b25f7b84241bc31215bb"
sha256: "75906bf273541b676716d1ca7627a17e4c4070a3a16272b7a3dc7da3b9f3f6b7"
url: "https://pub.dev"
source: hosted
version: "1.26.2"
version: "1.26.3"
test_api:
dependency: transitive
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.dev"
source: hosted
version: "0.7.6"
version: "0.7.7"
test_core:
dependency: transitive
description:
name: test_core
sha256: "80bf5a02b60af04b09e14f6fe68b921aad119493e26e490deaca5993fef1b05a"
sha256: "0cc24b5ff94b38d2ae73e1eb43cc302b77964fbf67abad1e296025b78deb53d0"
url: "https://pub.dev"
source: hosted
version: "0.6.11"
version: "0.6.12"
time:
dependency: transitive
description:
@@ -1665,14 +1641,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "2.1.5"
timing:
dependency: transitive
description:
name: timing
sha256: "62ee18aca144e4a9f29d212f5a4c6a053be252b895ab14b5821996cff4ed90fe"
url: "https://pub.dev"
source: hosted
version: "1.0.2"
typed_data:
dependency: transitive
description:
@@ -1693,10 +1661,10 @@ packages:
dependency: transitive
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8
url: "https://pub.dev"
source: hosted
version: "4.5.1"
version: "4.5.2"
vector_graphics:
dependency: transitive
description:
@@ -1741,10 +1709,10 @@ packages:
dependency: transitive
description:
name: watcher
sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c"
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
url: "https://pub.dev"
source: hosted
version: "1.1.3"
version: "1.1.4"
web:
dependency: transitive
description:
@@ -1781,10 +1749,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03"
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.dev"
source: hosted
version: "5.14.0"
version: "5.15.0"
win32_registry:
dependency: transitive
description:
@@ -1834,5 +1802,5 @@ packages:
source: hosted
version: "2.1.0"
sdks:
dart: ">=3.9.2 <4.0.0"
flutter: ">=3.35.4"
dart: ">=3.10.0 <4.0.0"
flutter: ">=3.35.7"

View File

@@ -4,7 +4,7 @@ publish_to: 'none'
version: 1.2.0
environment:
sdk: ^3.9.2
sdk: ^3.10.0
dependencies:
flutter:

View File

@@ -5,7 +5,7 @@ publish_to: 'none'
# repository: https://github.com/my_org/my_repo
environment:
sdk: ^3.9.2
sdk: ^3.10.0
dependencies:

View File

@@ -5,18 +5,18 @@ packages:
dependency: transitive
description:
name: _fe_analyzer_shared
sha256: dd3d2ad434b9510001d089e8de7556d50c834481b9abc2891a0184a8493a19dc
sha256: c209688d9f5a5f26b2fb47a188131a6fb9e876ae9e47af3737c0b4f58a93470d
url: "https://pub.dev"
source: hosted
version: "89.0.0"
version: "91.0.0"
analyzer:
dependency: transitive
description:
name: analyzer
sha256: c22b6e7726d1f9e5db58c7251606076a71ca0dbcf76116675edfadbec0c9e875
sha256: f51c8499b35f9b26820cfe914828a6a98a94efd5cc78b37bb7d03debae3a1d08
url: "https://pub.dev"
source: hosted
version: "8.2.0"
version: "8.4.1"
android_intent_plus:
dependency: transitive
description:
@@ -77,10 +77,10 @@ packages:
dependency: transitive
description:
name: build
sha256: "5b887c55a0f734b433b3b2d89f9cd1f99eb636b17e268a5b4259258bc916504b"
sha256: dfb67ccc9a78c642193e0c2d94cb9e48c2c818b3178a86097d644acdcde6a8d9
url: "https://pub.dev"
source: hosted
version: "4.0.0"
version: "4.0.2"
build_config:
dependency: transitive
description:
@@ -93,18 +93,18 @@ packages:
dependency: transitive
description:
name: build_daemon
sha256: "8e928697a82be082206edb0b9c99c5a4ad6bc31c9e9b8b2f291ae65cd4a25daa"
sha256: bf05f6e12cfea92d3c09308d7bcdab1906cd8a179b023269eed00c071004b957
url: "https://pub.dev"
source: hosted
version: "4.0.4"
version: "4.1.1"
build_runner:
dependency: "direct dev"
description:
name: build_runner
sha256: a9461b8e586bf018dd4afd2e13b49b08c6a844a4b226c8d1d10f3a723cdd78c3
sha256: "7b5b569f3df370590a85029148d6fc66c7d0201fc6f1847c07dd85d365ae9fcd"
url: "https://pub.dev"
source: hosted
version: "2.10.1"
version: "2.10.3"
built_collection:
dependency: transitive
description:
@@ -237,18 +237,18 @@ packages:
dependency: transitive
description:
name: cross_file
sha256: "7caf6a750a0c04effbb52a676dce9a4a592e10ad35c34d6d2d0e4811160d5670"
sha256: "942a4791cd385a68ccb3b32c71c427aba508a1bb949b86dff2adbe4049f16239"
url: "https://pub.dev"
source: hosted
version: "0.3.4+2"
version: "0.3.5"
crypto:
dependency: transitive
description:
name: crypto
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
sha256: c8ea0233063ba03258fbcf2ca4d6dadfefe14f02fab57702265467a19f27fadf
url: "https://pub.dev"
source: hosted
version: "3.0.6"
version: "3.0.7"
cupertino_icons:
dependency: "direct main"
description:
@@ -277,10 +277,10 @@ packages:
dependency: transitive
description:
name: dart_style
sha256: c87dfe3d56f183ffe9106a18aebc6db431fc7c98c31a54b952a77f3d54a85697
sha256: a9c30492da18ff84efe2422ba2d319a89942d93e58eb0b73d32abe822ef54b7b
url: "https://pub.dev"
source: hosted
version: "3.1.2"
version: "3.1.3"
dartx:
dependency: transitive
description:
@@ -309,10 +309,10 @@ packages:
dependency: transitive
description:
name: device_info_plus
sha256: "49413c8ca514dea7633e8def233b25efdf83ec8522955cc2c0e3ad802927e7c6"
sha256: dd0e8e02186b2196c7848c9d394a5fd6e5b57a43a546082c5820b1ec72317e33
url: "https://pub.dev"
source: hosted
version: "12.1.0"
version: "12.2.0"
device_info_plus_platform_interface:
dependency: transitive
description:
@@ -325,10 +325,10 @@ packages:
dependency: transitive
description:
name: device_preview_plus
sha256: "2ebe9cf25ed46875c9c1b745d0438df9e4c49f7bcf9ea466c88efbcffcc73ab7"
sha256: eb3e67929c9f04759e0d3708ad91d1018235549bcf8699f8a94909684c6555ae
url: "https://pub.dev"
source: hosted
version: "2.5.1"
version: "2.5.5"
dio:
dependency: transitive
description:
@@ -381,34 +381,34 @@ packages:
dependency: transitive
description:
name: file_selector_linux
sha256: "54cbbd957e1156d29548c7d9b9ec0c0ebb6de0a90452198683a7d23aed617a33"
sha256: "80a877f5ec570c4fb3b40720a70b6f31e8bb1315a464b4d3e92fe82754d4b21a"
url: "https://pub.dev"
source: hosted
version: "0.9.3+2"
version: "0.9.3+3"
file_selector_macos:
dependency: transitive
description:
name: file_selector_macos
sha256: "19124ff4a3d8864fdc62072b6a2ef6c222d55a3404fe14893a3c02744907b60c"
sha256: "44f24d102e368370951b98ffe86c7325b38349e634578312976607d28cc6d747"
url: "https://pub.dev"
source: hosted
version: "0.9.4+4"
version: "0.9.4+6"
file_selector_platform_interface:
dependency: transitive
description:
name: file_selector_platform_interface
sha256: a3994c26f10378a039faa11de174d7b78eb8f79e4dd0af2a451410c1a5c3f66b
sha256: "35e0bd61ebcdb91a3505813b055b09b79dfdc7d0aee9c09a7ba59ae4bb13dc85"
url: "https://pub.dev"
source: hosted
version: "2.6.2"
version: "2.7.0"
file_selector_windows:
dependency: transitive
description:
name: file_selector_windows
sha256: "320fcfb6f33caa90f0b58380489fc5ac05d99ee94b61aa96ec2bff0ba81d3c2b"
sha256: "62197474ae75893a62df75939c777763d39c2bc5f73ce5b88497208bc269abfd"
url: "https://pub.dev"
source: hosted
version: "0.9.3+4"
version: "0.9.3+5"
fixnum:
dependency: transitive
description:
@@ -524,10 +524,10 @@ packages:
dependency: transitive
description:
name: flutter_plugin_android_lifecycle
sha256: b0694b7fb1689b0e6cc193b3f1fcac6423c4f93c74fb20b806c6b6f196db0c31
sha256: "306f0596590e077338312f38837f595c04f28d6cdeeac392d3d74df2f0003687"
url: "https://pub.dev"
source: hosted
version: "2.0.30"
version: "2.0.32"
flutter_rating_bar:
dependency: transitive
description:
@@ -604,10 +604,10 @@ packages:
dependency: transitive
description:
name: flutter_svg
sha256: b9c2ad5872518a27507ab432d1fb97e8813b05f0fc693f9d40fad06d073e0678
sha256: "055de8921be7b8e8b98a233c7a5ef84b3a6fcc32f46f1ebf5b9bb3576d108355"
url: "https://pub.dev"
source: hosted
version: "2.2.1"
version: "2.2.2"
flutter_test:
dependency: "direct dev"
description: flutter
@@ -699,10 +699,10 @@ packages:
dependency: transitive
description:
name: get_it
sha256: a4292e7cf67193f8e7c1258203104eb2a51ec8b3a04baa14695f4064c144297b
sha256: ae78de7c3f2304b8d81f2bb6e320833e5e81de942188542328f074978cc0efa9
url: "https://pub.dev"
source: hosted
version: "8.2.0"
version: "8.3.0"
get_test:
dependency: "direct dev"
description:
@@ -747,10 +747,10 @@ packages:
dependency: transitive
description:
name: hive_ce_flutter
sha256: f5bd57fda84402bca7557fedb8c629c96c8ea10fab4a542968d7b60864ca02cc
sha256: "26d656c9e8974f0732f1d09020e2d7b08ba841b8961a02dbfb6caf01474b0e9a"
url: "https://pub.dev"
source: hosted
version: "2.3.2"
version: "2.3.3"
hive_ce_generator:
dependency: "direct dev"
description:
@@ -763,10 +763,10 @@ packages:
dependency: transitive
description:
name: http
sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007
sha256: "87721a4a50b19c7f1d49001e51409bddc46303966ce89a65af4f4e6004896412"
url: "https://pub.dev"
source: hosted
version: "1.5.0"
version: "1.6.0"
http_multi_server:
dependency: transitive
description:
@@ -819,18 +819,18 @@ packages:
dependency: transitive
description:
name: image_picker
sha256: "736eb56a911cf24d1859315ad09ddec0b66104bc41a7f8c5b96b4e2620cf5041"
sha256: "784210112be18ea55f69d7076e2c656a4e24949fa9e76429fe53af0c0f4fa320"
url: "https://pub.dev"
source: hosted
version: "1.2.0"
version: "1.2.1"
image_picker_android:
dependency: transitive
description:
name: image_picker_android
sha256: "8dfe08ea7fcf7467dbaf6889e72eebd5e0d6711caae201fdac780eb45232cd02"
sha256: a1cd1584fae64f6ecca63113fd5450e3483c097cc05e43a2f073330f62adcabe
url: "https://pub.dev"
source: hosted
version: "0.8.13+3"
version: "0.8.13+8"
image_picker_for_web:
dependency: transitive
description:
@@ -843,10 +843,10 @@ packages:
dependency: transitive
description:
name: image_picker_ios
sha256: eb06fe30bab4c4497bad449b66448f50edcc695f1c59408e78aa3a8059eb8f0e
sha256: "997d100ce1dda5b1ba4085194c5e36c9f8a1fb7987f6a36ab677a344cd2dc986"
url: "https://pub.dev"
source: hosted
version: "0.8.13"
version: "0.8.13+2"
image_picker_linux:
dependency: transitive
description:
@@ -859,18 +859,18 @@ packages:
dependency: transitive
description:
name: image_picker_macos
sha256: d58cd9d67793d52beefd6585b12050af0a7663c0c2a6ece0fb110a35d6955e04
sha256: "86f0f15a309de7e1a552c12df9ce5b59fe927e71385329355aec4776c6a8ec91"
url: "https://pub.dev"
source: hosted
version: "0.2.2"
version: "0.2.2+1"
image_picker_platform_interface:
dependency: transitive
description:
name: image_picker_platform_interface
sha256: "9f143b0dba3e459553209e20cc425c9801af48e6dfa4f01a0fcf927be3f41665"
sha256: "567e056716333a1647c64bb6bd873cff7622233a5c3f694be28a583d4715690c"
url: "https://pub.dev"
source: hosted
version: "2.11.0"
version: "2.11.1"
image_picker_windows:
dependency: transitive
description:
@@ -1032,10 +1032,10 @@ packages:
dependency: transitive
description:
name: meta
sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c
sha256: "23f08335362185a5ea2ad3a4e597f1375e78bce8a040df5c600c8d3552ef2394"
url: "https://pub.dev"
source: hosted
version: "1.16.0"
version: "1.17.0"
mgrs_dart:
dependency: transitive
description:
@@ -1160,18 +1160,18 @@ packages:
dependency: transitive
description:
name: path_provider_android
sha256: "993381400e94d18469750e5b9dcb8206f15bc09f9da86b9e44a9b0092a0066db"
sha256: "95c68a74d3cab950fd0ed8073d9fab15c1c06eb1f3eec68676e87aabc9ecee5a"
url: "https://pub.dev"
source: hosted
version: "2.2.18"
version: "2.2.21"
path_provider_foundation:
dependency: transitive
description:
name: path_provider_foundation
sha256: "16eef174aacb07e09c351502740fa6254c165757638eba1e9116b0a781201bbd"
sha256: "97390a0719146c7c3e71b6866c34f1cde92685933165c1c671984390d2aca776"
url: "https://pub.dev"
source: hosted
version: "2.4.2"
version: "2.4.4"
path_provider_linux:
dependency: transitive
description:
@@ -1420,18 +1420,18 @@ packages:
dependency: transitive
description:
name: shared_preferences_android
sha256: bd14436108211b0d4ee5038689a56d4ae3620fd72fd6036e113bf1345bc74d9e
sha256: "07d552dbe8e71ed720e5205e760438ff4ecfb76ec3b32ea664350e2ca4b0c43b"
url: "https://pub.dev"
source: hosted
version: "2.4.13"
version: "2.4.16"
shared_preferences_foundation:
dependency: transitive
description:
name: shared_preferences_foundation
sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
sha256: "4e7eaffc2b17ba398759f1151415869a34771ba11ebbccd1b0145472a619a64f"
url: "https://pub.dev"
source: hosted
version: "2.5.4"
version: "2.5.6"
shared_preferences_linux:
dependency: transitive
description:
@@ -1505,10 +1505,10 @@ packages:
dependency: transitive
description:
name: source_gen
sha256: ccf30b0c9fbcd79d8b6f5bfac23199fb354938436f62475e14aea0f29ee0f800
sha256: "9098ab86015c4f1d8af6486b547b11100e73b193e1899015033cb3e14ad20243"
url: "https://pub.dev"
source: hosted
version: "4.0.1"
version: "4.0.2"
source_helper:
dependency: transitive
description:
@@ -1525,14 +1525,6 @@ packages:
url: "https://pub.dev"
source: hosted
version: "1.10.1"
sprintf:
dependency: transitive
description:
name: sprintf
sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23"
url: "https://pub.dev"
source: hosted
version: "7.0.0"
sqflite:
dependency: transitive
description:
@@ -1633,10 +1625,10 @@ packages:
dependency: transitive
description:
name: test_api
sha256: "522f00f556e73044315fa4585ec3270f1808a4b186c936e612cab0b565ff1e00"
sha256: ab2726c1a94d3176a45960b6234466ec367179b87dd74f1611adb1f3b5fb9d55
url: "https://pub.dev"
source: hosted
version: "0.7.6"
version: "0.7.7"
time:
dependency: transitive
description:
@@ -1665,10 +1657,10 @@ packages:
dependency: transitive
description:
name: uuid
sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff
sha256: a11b666489b1954e01d992f3d601b1804a33937b5a8fe677bd26b8a9f96f96e8
url: "https://pub.dev"
source: hosted
version: "4.5.1"
version: "4.5.2"
vector_graphics:
dependency: transitive
description:
@@ -1713,10 +1705,10 @@ packages:
dependency: transitive
description:
name: watcher
sha256: "5bf046f41320ac97a469d506261797f35254fa61c641741ef32dacda98b7d39c"
sha256: "592ab6e2892f67760543fb712ff0177f4ec76c031f02f5b4ff8d3fc5eb9fb61a"
url: "https://pub.dev"
source: hosted
version: "1.1.3"
version: "1.1.4"
web:
dependency: transitive
description:
@@ -1753,10 +1745,10 @@ packages:
dependency: transitive
description:
name: win32
sha256: "66814138c3562338d05613a6e368ed8cfb237ad6d64a9e9334be3f309acfca03"
sha256: d7cb55e04cd34096cd3a79b3330245f54cb96a370a1c27adb3c84b917de8b08e
url: "https://pub.dev"
source: hosted
version: "5.14.0"
version: "5.15.0"
win32_registry:
dependency: transitive
description:
@@ -1806,5 +1798,5 @@ packages:
source: hosted
version: "2.1.0"
sdks:
dart: ">=3.9.2 <4.0.0"
flutter: ">=3.35.4"
dart: ">=3.10.0 <4.0.0"
flutter: ">=3.35.7"

View File

@@ -13,7 +13,6 @@ dependencies:
#UI
cupertino_icons: ^1.0.8
flutter_launcher_icons: ^0.14.4
#rasadyar packages
rasadyar_core:
path: ./packages/core