diff --git a/android/app/src/main/kotlin/ir/mnpc/rasadyar/MainActivity.kt b/android/app/src/main/kotlin/ir/mnpc/rasadyar/MainActivity.kt
index 8c73ca4..5bae765 100644
--- a/android/app/src/main/kotlin/ir/mnpc/rasadyar/MainActivity.kt
+++ b/android/app/src/main/kotlin/ir/mnpc/rasadyar/MainActivity.kt
@@ -39,7 +39,7 @@ class MainActivity : FlutterActivity() {
val apkUri: Uri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
val uri = FileProvider.getUriForFile(
applicationContext,
- "${BuildConfig.APPLICATION_ID}.fileprovider",
+ "${applicationContext.packageName}.fileprovider",
file
)
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
diff --git a/assets/icons/chicken.svg b/assets/icons/chicken.svg
new file mode 100644
index 0000000..1352445
--- /dev/null
+++ b/assets/icons/chicken.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/convert_cube.svg b/assets/icons/convert_cube.svg
new file mode 100644
index 0000000..5ada319
--- /dev/null
+++ b/assets/icons/convert_cube.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/cube.svg b/assets/icons/cube.svg
new file mode 100644
index 0000000..c44cba3
--- /dev/null
+++ b/assets/icons/cube.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/cube_rotate.svg b/assets/icons/cube_rotate.svg
new file mode 100644
index 0000000..e5280c5
--- /dev/null
+++ b/assets/icons/cube_rotate.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/cube_scan.svg b/assets/icons/cube_scan.svg
new file mode 100644
index 0000000..5d088f4
--- /dev/null
+++ b/assets/icons/cube_scan.svg
@@ -0,0 +1,8 @@
+
diff --git a/assets/icons/cube_search.svg b/assets/icons/cube_search.svg
new file mode 100644
index 0000000..e9308ea
--- /dev/null
+++ b/assets/icons/cube_search.svg
@@ -0,0 +1,6 @@
+
diff --git a/assets/icons/home.svg b/assets/icons/home.svg
new file mode 100644
index 0000000..a2a952c
--- /dev/null
+++ b/assets/icons/home.svg
@@ -0,0 +1,3 @@
+
diff --git a/assets/icons/truck.svg b/assets/icons/truck.svg
new file mode 100644
index 0000000..9a40d42
--- /dev/null
+++ b/assets/icons/truck.svg
@@ -0,0 +1,7 @@
+
diff --git a/assets/icons/truck_fast.svg b/assets/icons/truck_fast.svg
new file mode 100644
index 0000000..7c05346
--- /dev/null
+++ b/assets/icons/truck_fast.svg
@@ -0,0 +1,10 @@
+
diff --git a/assets/icons/user.svg b/assets/icons/user.svg
index af27d7c..b60b7b7 100644
--- a/assets/icons/user.svg
+++ b/assets/icons/user.svg
@@ -1,4 +1,4 @@
diff --git a/assets/icons/user_raduis.svg b/assets/icons/user_raduis.svg
new file mode 100644
index 0000000..d52d9b2
--- /dev/null
+++ b/assets/icons/user_raduis.svg
@@ -0,0 +1,4 @@
+
diff --git a/assets/images/chicken.png b/assets/images/chicken.png
new file mode 100644
index 0000000..20f7ab3
Binary files /dev/null and b/assets/images/chicken.png differ
diff --git a/assets/vec/convert_cube.svg.vec b/assets/vec/convert_cube.svg.vec
new file mode 100644
index 0000000..bd3185f
Binary files /dev/null and b/assets/vec/convert_cube.svg.vec differ
diff --git a/assets/vec/cube.svg.vec b/assets/vec/cube.svg.vec
new file mode 100644
index 0000000..a5b5704
Binary files /dev/null and b/assets/vec/cube.svg.vec differ
diff --git a/assets/vec/cube_rotate.svg.vec b/assets/vec/cube_rotate.svg.vec
new file mode 100644
index 0000000..7e7db01
Binary files /dev/null and b/assets/vec/cube_rotate.svg.vec differ
diff --git a/assets/vec/cube_search.svg.vec b/assets/vec/cube_search.svg.vec
new file mode 100644
index 0000000..da0dc56
Binary files /dev/null and b/assets/vec/cube_search.svg.vec differ
diff --git a/assets/vec/inside.svg.vec b/assets/vec/inside.svg.vec
new file mode 100644
index 0000000..b43a512
Binary files /dev/null and b/assets/vec/inside.svg.vec differ
diff --git a/assets/vec/outside.svg.vec b/assets/vec/outside.svg.vec
new file mode 100644
index 0000000..b38f61d
Binary files /dev/null and b/assets/vec/outside.svg.vec differ
diff --git a/assets/vec/truck.svg.vec b/assets/vec/truck.svg.vec
new file mode 100644
index 0000000..6cd1b6f
Binary files /dev/null and b/assets/vec/truck.svg.vec differ
diff --git a/assets/vec/truck_fast.svg.vec b/assets/vec/truck_fast.svg.vec
new file mode 100644
index 0000000..f8a24c1
Binary files /dev/null and b/assets/vec/truck_fast.svg.vec differ
diff --git a/assets/vec/user.svg.vec b/assets/vec/user.svg.vec
index 9455e63..cdbe8af 100644
Binary files a/assets/vec/user.svg.vec and b/assets/vec/user.svg.vec differ
diff --git a/assets/vec/whare_house.svg.vec b/assets/vec/whare_house.svg.vec
new file mode 100644
index 0000000..1f58987
Binary files /dev/null and b/assets/vec/whare_house.svg.vec differ
diff --git a/packages/chicken/lib/presentation/pages/root/view.dart b/packages/chicken/lib/presentation/pages/root/view.dart
index 9fe687d..91f2317 100644
--- a/packages/chicken/lib/presentation/pages/root/view.dart
+++ b/packages/chicken/lib/presentation/pages/root/view.dart
@@ -1,3 +1,4 @@
+import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:rasadyar_chicken/chicken.dart';
import 'package:rasadyar_chicken/data/models/response/inventory/inventory_model.dart';
@@ -10,48 +11,558 @@ class RootPage extends GetView {
@override
Widget build(BuildContext context) {
return Scaffold(
- appBar: RAppBar(title: 'مدیریت انبار', centerTitle: true, hasBack: false),
- body: SingleChildScrollView(
- child: Column(
- children: [
- inventoryWidget(),
- ObxValue(
- (data) => broadcastInformationWidget(data.value),
- controller.killHouseDistributionInfo,
+ backgroundColor: AppColor.bgLight,
+ appBar: RAppBar(
+ title: 'رصدطیور',
+ titleTextStyle:AppFonts.yekan16Bold.copyWith(color: Colors.white),
+ centerTitle: true,
+ hasBack: false,
+ leading: Row(children: [Text('مباشر', style: AppFonts.yekan16Bold.copyWith(color: Colors.white))]),
+ ),
+ body: Column(
+ spacing: 8,
+ children: [
+ Card(
+ margin: EdgeInsetsGeometry.all(6),
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(8),
+ side: BorderSide(width: 0.50, color: const Color(0xFFA9A9A9)),
),
- SizedBox(height: 20),
- Padding(
- padding: const EdgeInsets.symmetric(horizontal: 8.0),
- child: Row(
- mainAxisAlignment: MainAxisAlignment.spaceBetween,
+
+ child: Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: Column(
+ mainAxisSize: MainAxisSize.min,
children: [
- cardWidget(
- title: 'ورود به انبار',
- iconPath: Assets.icons.whareHouse.path,
- onTap: () {
- Get.toNamed(ChickenRoutes.enteringTheWarehouse);
- },
+ Row(
+ spacing: 8,
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Container(
+ width: 40,
+ height: 40,
+ decoration: ShapeDecoration(
+ image: DecorationImage(image: AssetImage(Assets.images.chicken.path), fit: BoxFit.cover),
+ shape: RoundedRectangleBorder(
+ side: BorderSide(width: 0.25, color: const Color(0xFFB0B0B0)),
+ borderRadius: BorderRadius.circular(4),
+ ),
+ ),
+ ),
+ Text(
+ 'مرغ گرم',
+ textAlign: TextAlign.right,
+ style: AppFonts.yekan16.copyWith(color: AppColor.darkGreyDarkActive),
+ ),
+ Spacer(),
+ AnimatedRotation(
+ turns: 180,
+ duration: Duration(milliseconds: 3000),
+ child: Icon(CupertinoIcons.chevron_up, size: 18),
+ ),
+ ],
),
- cardWidget(
- title: 'فروش داخل استان',
- iconPath: Assets.icons.inside.path,
- onTap: () {
- Get.toNamed(ChickenRoutes.salesWithinProvince);
- },
+ SizedBox(height: 8),
+ _todayShipmentWidget(),
+
+ Padding(
+ padding: const EdgeInsets.fromLTRB(0, 10, 0, 13),
+ child: Row(
+ spacing: 8,
+ children: [
+ Expanded(
+ child: _informationLabelCard(
+ title: 'مانده انبار',
+ description: '2،225،256',
+ iconPath: Assets.vec.cubeSearchSvg.path,
+ iconColor: const Color(0xFF426060),
+ bgDescriptionColor: const Color(0xFFC7DFE0),
+ bgLabelColor: const Color(0xFFA5D1D2),
+ ),
+ ),
+ Expanded(
+ child: _informationLabelCard(
+ title: 'توزیع شده',
+ description: '2،225،256',
+ iconPath: Assets.vec.cubeRotateSvg.path,
+ iconColor: Color(0xFF5C4D64),
+ bgLabelColor: Color(0xFFC8B8D1),
+ bgDescriptionColor: Color(0xFFDAD4DD),
+ ),
+ ),
+ ],
+ ),
),
- cardWidget(
- title: 'فروش خارج استان',
- iconPath: Assets.icons.outside.path,
- onTap: () {
- Get.toNamed(ChickenRoutes.salesWithOutProvince);
- },
+
+ Row(
+ children: [Text('اطلاعات بارها', textAlign: TextAlign.right, style: AppFonts.yekan16)],
+ ),
+
+ Padding(
+ padding: const EdgeInsets.fromLTRB(0, 8, 0, 13),
+ child: Row(
+ spacing: 8,
+ children: [
+ Expanded(
+ child: _informationLabelCard(
+ title: 'داخل استان',
+ description: '2،225،256',
+ iconPath: Assets.vec.cubeSearchSvg.path,
+ iconColor: const Color(0xFF6C5D60),
+ bgDescriptionColor: const Color(0xFFEDDCE0),
+ bgLabelColor: const Color(0xFFDDC0C7),
+ ),
+ ),
+ Expanded(
+ child: _informationLabelCard(
+ title: 'خارج استان',
+ description: '2،225،256',
+ iconPath: Assets.vec.cubeSearchSvg.path,
+ iconColor: Color(0xFF2D5FFF),
+ bgLabelColor: const Color(0xFFAFCBFF),
+ bgDescriptionColor: const Color(0xFFCEDFFF),
+ ),
+ ),
+ ],
+ ),
+ ),
+
+ Row(
+ children: [Text('اطلاعات توزیع', textAlign: TextAlign.right, style: AppFonts.yekan16)],
+ ),
+
+ Padding(
+ padding: const EdgeInsets.fromLTRB(0, 8, 0, 13),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ spacing: 8,
+ children: [
+ Expanded(
+ child: _informationIconCard(
+ title: 'توزیع داخل استان',
+ description: '2،225،256',
+ iconPath: Assets.vec.truckSvg.path,
+ iconColor: const Color.fromRGBO(85, 97, 93, 1),
+ bgDescriptionColor: const Color(0xFFE6FAF5),
+ bgLabelColor: const Color(0xFFB0EFDF),
+ ),
+ ),
+ Expanded(
+ child: _informationIconCard(
+ title: 'توزیع خارج استان',
+ description: '2،225،256',
+ iconPath: Assets.vec.truckFastSvg.path,
+ iconColor: Color(0xFF647379),
+ bgDescriptionColor: const Color(0xFFEAEFFF),
+ bgLabelColor: const Color(0xFFD4DEFF),
+ ),
+ ),
+ Expanded(
+ child: _informationIconCard(
+ title: 'قطعه بندی',
+ description: '2،225،256',
+ iconPath: Assets.vec.convertCubeSvg.path,
+ iconColor: const Color(0xFF6F6164),
+ bgDescriptionColor: const Color(0xFFEDDCE0),
+ bgLabelColor: const Color(0xFFE0BCC5),
+ ),
+ ),
+ ],
+ ),
),
],
),
),
- ],
- ),
+ ),
+
+ Padding(
+ padding: EdgeInsetsGeometry.all(6),
+ child: Row(
+ children: [Text('پر کاربرد ها', textAlign: TextAlign.right, style: AppFonts.yekan16)],
+ ),
+ ),
+
+ SizedBox(
+ height: 70,
+ child: ListView(
+ scrollDirection: Axis.horizontal,
+ padding: EdgeInsets.symmetric(horizontal: 8),
+ physics: BouncingScrollPhysics(),
+ children: [
+ widelyUsed(
+ title: 'خرید خارج استان',
+ iconPath: Assets.vec.cubeSearchSvg.path,
+ onTap: () {
+ // Get.toNamed(ChickenRoutes.enteringTheWarehouse);
+ },
+ ),
+ SizedBox(width: 15),
+ widelyUsed(
+ title: 'عمده فروشی',
+ iconPath: Assets.vec.truckFastSvg.path,
+ onTap: () {
+ //Get.toNamed(ChickenRoutes.salesWithinProvince);
+ },
+ ),
+ SizedBox(width: 15),
+ widelyUsed(
+ title: 'ثبت قطعه بندی',
+ iconPath: Assets.vec.convertCubeSvg.path,
+ onTap: () {
+ // Get.toNamed(ChickenRoutes.salesWithOutProvince);
+ },
+ ),
+ SizedBox(width: 15),
+ addWidelyUsed(onTap: () {}),
+ ],
+ ),
+ ),
+ ],
),
+ bottomNavigationBar: WaveBottomNavigation(
+ initPage: 2,
+ items: [
+ WaveBottomNavigationItem(
+ title: 'بارها',
+ icon: Assets.vec.truckFastSvg.svg(
+ width: 32,
+ height: 32,
+ colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
+ ),
+ ),
+ WaveBottomNavigationItem(
+ title: 'خارج استان',
+ icon: Assets.vec.cubeSearchSvg.svg(
+ width: 32,
+ height: 32,
+ colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
+ ),
+ ),
+ WaveBottomNavigationItem(
+ title: 'خانه',
+ icon: Assets.vec.homeSvg.svg(
+ width: 32,
+ height: 32,
+ colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
+ ),
+ ),
+ WaveBottomNavigationItem(
+ title: 'قطعه بندی',
+ icon: Assets.vec.convertCubeSvg.svg(
+ width: 32,
+ height: 32,
+ colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
+ ),
+ ),
+ WaveBottomNavigationItem(
+ title: 'پروفایل',
+ icon: Assets.vec.userSvg.svg(
+ width: 32,
+ height: 32,
+ colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
+ ),
+ ),
+ ],
+ onPageChanged: (index) {
+ // controller.changePage(index);
+ },
+ ),
+ );
+ }
+
+ Container _todayShipmentWidget() {
+ return Container(
+ height: 70,
+ width: Get.width / 2,
+ decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)),
+ clipBehavior: Clip.hardEdge,
+ child: Row(
+ children: [
+ Expanded(
+ child: Container(
+ decoration: BoxDecoration(
+ gradient: LinearGradient(
+ begin: Alignment.topCenter,
+ end: Alignment.bottomCenter,
+ colors: [const Color(0xFFEAEFFF), Colors.white],
+ ),
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ spacing: 4,
+ children: [
+ Assets.icons.cubeScan.svg(width: 30, height: 30),
+ Text(
+ 'بارهای امروز',
+ textAlign: TextAlign.right,
+ style: AppFonts.yekan14.copyWith(color: AppColor.blueNormal),
+ ),
+ ],
+ ),
+ ),
+ ),
+ Expanded(
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ spacing: 4,
+ children: [
+ Text(
+ '2،225،256',
+ textAlign: TextAlign.right,
+ style: AppFonts.yekan16.copyWith(color: AppColor.textColor),
+ ),
+ Text(
+ 'کیلوگرم',
+ textAlign: TextAlign.center,
+ style: AppFonts.yekan12.copyWith(color: AppColor.textColor),
+ ),
+ ],
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+
+ Container _informationLabelCard({
+ required String title,
+ required String description,
+ String unit = 'کیلوگرم',
+ required String iconPath,
+ required Color iconColor,
+ required Color bgDescriptionColor,
+ required Color bgLabelColor,
+ }) {
+ return Container(
+ height: 82,
+ decoration: BoxDecoration(borderRadius: BorderRadius.circular(8)),
+ clipBehavior: Clip.hardEdge,
+ child: Row(
+ children: [
+ // Left side with icon and title
+ Expanded(
+ child: Container(
+ height: 82,
+ decoration: BoxDecoration(
+ color: bgLabelColor,
+ borderRadius: BorderRadius.only(topRight: Radius.circular(8), bottomRight: Radius.circular(8)),
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ spacing: 4,
+ children: [
+ SvgGenImage.vec(
+ iconPath,
+ ).svg(width: 24, height: 24, colorFilter: ColorFilter.mode(iconColor, BlendMode.srcIn)),
+ Text(
+ title,
+ textAlign: TextAlign.right,
+ style: AppFonts.yekan14.copyWith(color: AppColor.mediumGreyDarkActive),
+ ),
+ ],
+ ),
+ ),
+ ),
+ // Right side with description and unit
+ Expanded(
+ child: Container(
+ decoration: BoxDecoration(
+ color: bgDescriptionColor,
+ borderRadius: BorderRadius.only(topLeft: Radius.circular(8), bottomLeft: Radius.circular(8)),
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ spacing: 4,
+ children: [
+ Text(
+ description,
+ textAlign: TextAlign.right,
+ style: AppFonts.yekan16.copyWith(color: AppColor.mediumGreyDarkActive),
+ ),
+ Text(
+ unit,
+ textAlign: TextAlign.center,
+ style: AppFonts.yekan12.copyWith(color: AppColor.mediumGreyDarkActive),
+ ),
+ ],
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+
+ Container _informationIconCard({
+ required String title,
+ required String description,
+ String unit = 'کیلوگرم',
+ required String iconPath,
+ required Color iconColor,
+ required Color bgDescriptionColor,
+ required Color bgLabelColor,
+ }) {
+ return Container(
+ height: 110,
+ decoration: BoxDecoration(borderRadius: BorderRadius.circular(8)),
+ clipBehavior: Clip.hardEdge,
+ child: Stack(
+ alignment: Alignment.topCenter,
+ children: [
+ Positioned(
+ bottom: 0,
+ right: 0,
+ left: 0,
+ child: Container(
+ height: 91,
+ decoration: BoxDecoration(
+ color: bgDescriptionColor,
+ borderRadius: BorderRadius.circular(8),
+ border: Border.all(width: 0.25, color: const Color(0xFFB4B4B4)),
+ ),
+ child: Column(
+ mainAxisAlignment: MainAxisAlignment.center,
+ spacing: 4,
+ children: [
+ Text(
+ title,
+ textAlign: TextAlign.right,
+ style: AppFonts.yekan14.copyWith(color: AppColor.mediumGreyDarkActive),
+ ),
+ Text(
+ description,
+ textAlign: TextAlign.right,
+ style: AppFonts.yekan16.copyWith(color: AppColor.mediumGreyDarkActive),
+ ),
+ Text(
+ unit,
+ textAlign: TextAlign.center,
+ style: AppFonts.yekan12.copyWith(color: AppColor.mediumGreyDarkActive),
+ ),
+ ],
+ ),
+ ),
+ ),
+ Positioned(
+ top: 0,
+ child: Container(
+ width: 32,
+ height: 32,
+ decoration: ShapeDecoration(
+ color: bgLabelColor,
+ shape: RoundedRectangleBorder(
+ borderRadius: BorderRadius.circular(30),
+ side: BorderSide(width: 0.25, color: const Color(0xFFD5D5D5)),
+ ),
+ ),
+ child: Center(
+ child: SvgGenImage.vec(
+ iconPath,
+ ).svg(width: 24, height: 24, colorFilter: ColorFilter.mode(iconColor, BlendMode.srcIn)),
+ ),
+ ),
+ ),
+ ],
+ ),
+ );
+ }
+
+ Widget widelyUsed({required String title, required String iconPath, required VoidCallback onTap}) {
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.start,
+ spacing: 4,
+ children: [
+ Container(
+ width: 48,
+ height: 48,
+ padding: EdgeInsets.all(4),
+ decoration: ShapeDecoration(
+ color: const Color(0xFFBECDFF),
+ shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
+ ),
+ child: Container(
+ width: 40,
+ height: 40,
+ decoration: ShapeDecoration(
+ color: AppColor.blueNormal,
+ shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
+ ),
+ child: SvgGenImage.vec(iconPath).svg(
+ width: 24,
+ height: 24,
+ colorFilter: ColorFilter.mode(Colors.white, BlendMode.srcIn),
+ fit: BoxFit.cover,
+ ),
+ ),
+ ),
+ Text(title, style: AppFonts.yekan10.copyWith(color: AppColor.blueNormal)),
+ ],
+ );
+ }
+
+ Widget addWidelyUsed({required VoidCallback onTap}) {
+ return Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ mainAxisAlignment: MainAxisAlignment.start,
+ spacing: 4,
+ children: [
+ Container(
+ width: 48,
+ height: 48,
+ padding: EdgeInsets.all(4),
+ decoration: ShapeDecoration(
+ color: const Color(0xFFD9F7F0),
+ shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
+ ),
+ child: Assets.vec.messageAddSvg.svg(
+ width: 40,
+ height: 40,
+ colorFilter: ColorFilter.mode(AppColor.greenNormal, BlendMode.srcIn),
+ fit: BoxFit.cover,
+ ),
+ ),
+ Text('افزودن', style: AppFonts.yekan10.copyWith(color: AppColor.greenDarkHover)),
+ ],
+ );
+ }
+
+ Column oldPage() {
+ return Column(
+ children: [
+ inventoryWidget(),
+ ObxValue((data) => broadcastInformationWidget(data.value), controller.killHouseDistributionInfo),
+ SizedBox(height: 20),
+ Padding(
+ padding: const EdgeInsets.symmetric(horizontal: 8.0),
+ child: Row(
+ mainAxisAlignment: MainAxisAlignment.spaceBetween,
+ children: [
+ cardWidget(
+ title: 'ورود به انبار',
+ iconPath: Assets.icons.whareHouse.path,
+ onTap: () {
+ Get.toNamed(ChickenRoutes.enteringTheWarehouse);
+ },
+ ),
+ cardWidget(
+ title: 'فروش داخل استان',
+ iconPath: Assets.icons.inside.path,
+ onTap: () {
+ Get.toNamed(ChickenRoutes.salesWithinProvince);
+ },
+ ),
+ cardWidget(
+ title: 'فروش خارج استان',
+ iconPath: Assets.icons.outside.path,
+ onTap: () {
+ Get.toNamed(ChickenRoutes.salesWithOutProvince);
+ },
+ ),
+ ],
+ ),
+ ),
+ ],
);
}
@@ -63,10 +574,7 @@ class RootPage extends GetView {
const SizedBox(height: 20),
Align(
alignment: Alignment.centerRight,
- child: Text(
- 'موجودی انبار',
- style: AppFonts.yekan16Bold.copyWith(color: AppColor.blueNormal),
- ),
+ child: Text('موجودی انبار', style: AppFonts.yekan16Bold.copyWith(color: AppColor.blueNormal)),
),
SizedBox(height: 4),
ObxValue(
@@ -86,8 +594,7 @@ class RootPage extends GetView {
shrinkWrap: true,
physics: const NeverScrollableScrollPhysics(),
itemCount: controller.inventoryList.length,
- separatorBuilder: (context, index) =>
- const SizedBox(height: 8),
+ separatorBuilder: (context, index) => const SizedBox(height: 8),
itemBuilder: (context, index) {
return ObxValue((expand) {
return GestureDetector(
@@ -97,8 +604,7 @@ class RootPage extends GetView {
behavior: HitTestBehavior.opaque,
child: AnimatedContainer(
onEnd: () {
- controller.inventoryExpandedList[index] =
- !controller.inventoryExpandedList[index]!;
+ controller.inventoryExpandedList[index] = !controller.inventoryExpandedList[index]!;
},
margin: const EdgeInsets.symmetric(vertical: 2),
padding: EdgeInsets.all(6),
@@ -106,16 +612,12 @@ class RootPage extends GetView {
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(8),
- border: Border.all(
- color: AppColor.blueNormal,
- width: 1,
- ),
+ border: Border.all(color: AppColor.blueNormal, width: 1),
),
duration: const Duration(seconds: 1),
height: expand.keys.contains(index) ? 250 : 80,
child: inventoryItem(
- isExpanded:
- expand.keys.contains(index) && expand[index]!,
+ isExpanded: expand.keys.contains(index) && expand[index]!,
index: index,
model: controller.inventoryList[index],
),
@@ -131,11 +633,7 @@ class RootPage extends GetView {
);
}
- Widget inventoryItem({
- required bool isExpanded,
- required int index,
- required InventoryModel model,
- }) {
+ Widget inventoryItem({required bool isExpanded, required int index, required InventoryModel model}) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
spacing: 8,
@@ -147,26 +645,11 @@ class RootPage extends GetView {
spacing: 8,
children: [
buildRow('وزن خریدهای دولتی داخل استان (کیلوگرم)', '0326598653'),
- buildRow(
- 'وزن خریدهای آزاد داخل استان (کیلوگرم)',
- model.receiveFreeCarcassesWeight.toString(),
- ),
- buildRow(
- 'وزن خریدهای خارج استان (کیلوگرم)',
- model.freeBuyingCarcassesWeight.toString(),
- ),
- buildRow(
- 'کل ورودی به انبار (کیلوگرم)',
- model.totalFreeBarsCarcassesWeight.toString(),
- ),
- buildRow(
- 'کل فروش (کیلوگرم)',
- model.realAllocatedWeight.toString(),
- ),
- buildRow(
- 'مانده انبار (کیلوگرم)',
- model.totalRemainWeight.toString(),
- ),
+ buildRow('وزن خریدهای آزاد داخل استان (کیلوگرم)', model.receiveFreeCarcassesWeight.toString()),
+ buildRow('وزن خریدهای خارج استان (کیلوگرم)', model.freeBuyingCarcassesWeight.toString()),
+ buildRow('کل ورودی به انبار (کیلوگرم)', model.totalFreeBarsCarcassesWeight.toString()),
+ buildRow('کل فروش (کیلوگرم)', model.realAllocatedWeight.toString()),
+ buildRow('مانده انبار (کیلوگرم)', model.totalRemainWeight.toString()),
],
),
),
@@ -185,9 +668,7 @@ class RootPage extends GetView {
child: Text(
title,
textAlign: TextAlign.right,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
),
Flexible(
@@ -195,9 +676,7 @@ class RootPage extends GetView {
child: Text(
value,
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
),
],
@@ -223,19 +702,11 @@ class RootPage extends GetView {
Text(
'اطلاعات ارسالی',
textAlign: TextAlign.right,
- style: AppFonts.yekan16Bold.copyWith(
- color: AppColor.blueNormal,
- ),
+ style: AppFonts.yekan16Bold.copyWith(color: AppColor.blueNormal),
),
const SizedBox(height: 12),
- buildRow(
- 'فروش و توزیع داخل استان (کیلوگرم)',
- model.stewardAllocationsWeight!.toInt().toString(),
- ),
- buildRow(
- 'فروش و توزیع خارج استان (کیلوگرم)',
- model.freeSalesWeight!.toInt().toString(),
- ),
+ buildRow('فروش و توزیع داخل استان (کیلوگرم)', model.stewardAllocationsWeight!.toInt().toString()),
+ buildRow('فروش و توزیع خارج استان (کیلوگرم)', model.freeSalesWeight!.toInt().toString()),
],
)
: const Center(child: CircularProgressIndicator()),
@@ -282,9 +753,7 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
Text(
'سوابق بازرسی من',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
vecWidgetWithOnTap(
child: Assets.vec.trashSvg.svg(),
@@ -301,9 +770,7 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
padding: EdgeInsets.symmetric(horizontal: 10, vertical: 4),
decoration: ShapeDecoration(
color: AppColor.blueLight,
- shape: RoundedRectangleBorder(
- side: BorderSide(width: 1, color: AppColor.blueLightHover),
- ),
+ shape: RoundedRectangleBorder(side: BorderSide(width: 1, color: AppColor.blueLightHover)),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
@@ -311,16 +778,12 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
Text(
'تاریخ بازرسی',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
Text(
'1403/12/12',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
],
),
@@ -333,16 +796,12 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
Text(
'شماره همراه',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
Text(
'0326598653',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
],
),
@@ -354,17 +813,13 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
Text(
'آخرین فعالیت',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
Text(
'1409/12/12',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
],
),
@@ -376,16 +831,12 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
Text(
'موجودی',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
Text(
'5کیلوگرم',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
],
),
@@ -400,16 +851,12 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
Text(
'فروش رفته',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
Text(
'0 کیلوگرم',
textAlign: TextAlign.center,
- style: AppFonts.yekan14.copyWith(
- color: AppColor.darkGreyDarkHover,
- ),
+ style: AppFonts.yekan14.copyWith(color: AppColor.darkGreyDarkHover),
),
],
),
@@ -420,11 +867,7 @@ Widget markerDetailsWidget({required VoidCallback ontap}) {
);
}
-Widget cardWidget({
- required String title,
- required String iconPath,
- required VoidCallback onTap,
-}) {
+Widget cardWidget({required String title, required String iconPath, required VoidCallback onTap}) {
return Container(
width: Get.width / 4,
height: 130,
diff --git a/packages/core/lib/presentation/common/app_color.dart b/packages/core/lib/presentation/common/app_color.dart
index 8116ba2..acb62bd 100644
--- a/packages/core/lib/presentation/common/app_color.dart
+++ b/packages/core/lib/presentation/common/app_color.dart
@@ -362,6 +362,8 @@ class AppColor {
static const Color bgLight = Color(0xFFF5F5F5); // #083940 rgb(8, 57, 64)
static const Color bgDark = Color(0xFF979797); // #083940 rgb(8, 57, 64)
+ static const Color textColor = Color(0xFF5B5B5B); // #083940 rgb(8, 57, 64)
+
//endregion
//region --- category Colors ---
diff --git a/packages/core/lib/presentation/common/assets.gen.dart b/packages/core/lib/presentation/common/assets.gen.dart
index 9be3066..5fd8d8d 100644
--- a/packages/core/lib/presentation/common/assets.gen.dart
+++ b/packages/core/lib/presentation/common/assets.gen.dart
@@ -36,6 +36,21 @@ class $AssetsIconsGen {
/// File path: assets/icons/call.svg
SvgGenImage get call => const SvgGenImage('assets/icons/call.svg');
+ /// File path: assets/icons/convert_cube.svg
+ SvgGenImage get convertCube => const SvgGenImage('assets/icons/convert_cube.svg');
+
+ /// File path: assets/icons/cube.svg
+ SvgGenImage get cube => const SvgGenImage('assets/icons/cube.svg');
+
+ /// File path: assets/icons/cube_rotate.svg
+ SvgGenImage get cubeRotate => const SvgGenImage('assets/icons/cube_rotate.svg');
+
+ /// File path: assets/icons/cube_scan.svg
+ SvgGenImage get cubeScan => const SvgGenImage('assets/icons/cube_scan.svg');
+
+ /// File path: assets/icons/cube_search.svg
+ SvgGenImage get cubeSearch => const SvgGenImage('assets/icons/cube_search.svg');
+
/// File path: assets/icons/diagram.svg
SvgGenImage get diagram => const SvgGenImage('assets/icons/diagram.svg');
@@ -54,6 +69,9 @@ class $AssetsIconsGen {
/// File path: assets/icons/gps.svg
SvgGenImage get gps => const SvgGenImage('assets/icons/gps.svg');
+ /// File path: assets/icons/home.svg
+ SvgGenImage get home => const SvgGenImage('assets/icons/home.svg');
+
/// File path: assets/icons/information.svg
SvgGenImage get information => const SvgGenImage('assets/icons/information.svg');
@@ -126,9 +144,18 @@ class $AssetsIconsGen {
/// File path: assets/icons/trash.svg
SvgGenImage get trash => const SvgGenImage('assets/icons/trash.svg');
+ /// File path: assets/icons/truck.svg
+ SvgGenImage get truck => const SvgGenImage('assets/icons/truck.svg');
+
+ /// File path: assets/icons/truck_fast.svg
+ SvgGenImage get truckFast => const SvgGenImage('assets/icons/truck_fast.svg');
+
/// File path: assets/icons/user.svg
SvgGenImage get user => const SvgGenImage('assets/icons/user.svg');
+ /// File path: assets/icons/user_raduis.svg
+ SvgGenImage get userRaduis => const SvgGenImage('assets/icons/user_raduis.svg');
+
/// File path: assets/icons/user_square.svg
SvgGenImage get userSquare => const SvgGenImage('assets/icons/user_square.svg');
@@ -147,12 +174,18 @@ class $AssetsIconsGen {
calendar,
calendarSearch,
call,
+ convertCube,
+ cube,
+ cubeRotate,
+ cubeScan,
+ cubeSearch,
diagram,
download,
edit,
excelDownload,
filter,
gps,
+ home,
information,
inside,
inspection,
@@ -177,7 +210,10 @@ class $AssetsIconsGen {
tagLabel,
tagUser,
trash,
+ truck,
+ truckFast,
user,
+ userRaduis,
userSquare,
virtual,
whareHouse,
@@ -187,6 +223,9 @@ class $AssetsIconsGen {
class $AssetsImagesGen {
const $AssetsImagesGen();
+ /// File path: assets/images/chicken.png
+ AssetGenImage get chicken => const AssetGenImage('assets/images/chicken.png');
+
/// File path: assets/images/inner_splash.webp
AssetGenImage get innerSplash => const AssetGenImage('assets/images/inner_splash.webp');
@@ -197,7 +236,17 @@ class $AssetsImagesGen {
AssetGenImage get placeHolder => const AssetGenImage('assets/images/place_holder.png');
/// List of all assets
- List get values => [innerSplash, outterSplash, placeHolder];
+ List get values => [chicken, innerSplash, outterSplash, placeHolder];
+}
+
+class $AssetsLogosGen {
+ const $AssetsLogosGen();
+
+ /// File path: assets/logos/final_logo.png
+ AssetGenImage get finalLogo => const AssetGenImage('assets/logos/final_logo.png');
+
+ /// List of all assets
+ List get values => [finalLogo];
}
class $AssetsVecGen {
@@ -224,6 +273,21 @@ class $AssetsVecGen {
/// File path: assets/vec/call.svg.vec
SvgGenImage get callSvg => const SvgGenImage.vec('assets/vec/call.svg.vec');
+ /// File path: assets/vec/convert_cube.svg.vec
+ SvgGenImage get convertCubeSvg => const SvgGenImage.vec('assets/vec/convert_cube.svg.vec');
+
+ /// File path: assets/vec/cube.svg.vec
+ SvgGenImage get cubeSvg => const SvgGenImage.vec('assets/vec/cube.svg.vec');
+
+ /// File path: assets/vec/cube_rotate.svg.vec
+ SvgGenImage get cubeRotateSvg => const SvgGenImage.vec('assets/vec/cube_rotate.svg.vec');
+
+ /// File path: assets/vec/cube_scan.svg.vec
+ SvgGenImage get cubeScanSvg => const SvgGenImage.vec('assets/vec/cube_scan.svg.vec');
+
+ /// File path: assets/vec/cube_search.svg.vec
+ SvgGenImage get cubeSearchSvg => const SvgGenImage.vec('assets/vec/cube_search.svg.vec');
+
/// File path: assets/vec/diagram.svg.vec
SvgGenImage get diagramSvg => const SvgGenImage.vec('assets/vec/diagram.svg.vec');
@@ -242,9 +306,15 @@ class $AssetsVecGen {
/// File path: assets/vec/gps.svg.vec
SvgGenImage get gpsSvg => const SvgGenImage.vec('assets/vec/gps.svg.vec');
+ /// File path: assets/vec/home.svg.vec
+ SvgGenImage get homeSvg => const SvgGenImage.vec('assets/vec/home.svg.vec');
+
/// File path: assets/vec/information.svg.vec
SvgGenImage get informationSvg => const SvgGenImage.vec('assets/vec/information.svg.vec');
+ /// File path: assets/vec/inside.svg.vec
+ SvgGenImage get insideSvg => const SvgGenImage.vec('assets/vec/inside.svg.vec');
+
/// File path: assets/vec/inspection.svg.vec
SvgGenImage get inspectionSvg => const SvgGenImage.vec('assets/vec/inspection.svg.vec');
@@ -266,6 +336,9 @@ class $AssetsVecGen {
/// File path: assets/vec/message_add.svg.vec
SvgGenImage get messageAddSvg => const SvgGenImage.vec('assets/vec/message_add.svg.vec');
+ /// File path: assets/vec/outside.svg.vec
+ SvgGenImage get outsideSvg => const SvgGenImage.vec('assets/vec/outside.svg.vec');
+
/// File path: assets/vec/pdf_download.svg.vec
SvgGenImage get pdfDownloadSvg => const SvgGenImage.vec('assets/vec/pdf_download.svg.vec');
@@ -308,15 +381,27 @@ class $AssetsVecGen {
/// File path: assets/vec/trash.svg.vec
SvgGenImage get trashSvg => const SvgGenImage.vec('assets/vec/trash.svg.vec');
+ /// File path: assets/vec/truck.svg.vec
+ SvgGenImage get truckSvg => const SvgGenImage.vec('assets/vec/truck.svg.vec');
+
+ /// File path: assets/vec/truck_fast.svg.vec
+ SvgGenImage get truckFastSvg => const SvgGenImage.vec('assets/vec/truck_fast.svg.vec');
+
/// File path: assets/vec/user.svg.vec
SvgGenImage get userSvg => const SvgGenImage.vec('assets/vec/user.svg.vec');
+ /// File path: assets/vec/user_raduis.svg.vec
+ SvgGenImage get userRaduisSvg => const SvgGenImage.vec('assets/vec/user_raduis.svg.vec');
+
/// File path: assets/vec/user_square.svg.vec
SvgGenImage get userSquareSvg => const SvgGenImage.vec('assets/vec/user_square.svg.vec');
/// File path: assets/vec/virtual.svg.vec
SvgGenImage get virtualSvg => const SvgGenImage.vec('assets/vec/virtual.svg.vec');
+ /// File path: assets/vec/whare_house.svg.vec
+ SvgGenImage get whareHouseSvg => const SvgGenImage.vec('assets/vec/whare_house.svg.vec');
+
/// List of all assets
List get values => [
addSvg,
@@ -326,13 +411,20 @@ class $AssetsVecGen {
calendarSvg,
calendarSearchSvg,
callSvg,
+ convertCubeSvg,
+ cubeSvg,
+ cubeRotateSvg,
+ cubeScanSvg,
+ cubeSearchSvg,
diagramSvg,
downloadSvg,
editSvg,
excelDownloadSvg,
filterSvg,
gpsSvg,
+ homeSvg,
informationSvg,
+ insideSvg,
inspectionSvg,
keySvg,
liveStockSvg,
@@ -340,6 +432,7 @@ class $AssetsVecGen {
mapSvg,
mapMarkerSvg,
messageAddSvg,
+ outsideSvg,
pdfDownloadSvg,
pictureFrameSvg,
placeHolderSvg,
@@ -354,9 +447,13 @@ class $AssetsVecGen {
tagLabelSvg,
tagUserSvg,
trashSvg,
+ truckSvg,
+ truckFastSvg,
userSvg,
+ userRaduisSvg,
userSquareSvg,
virtualSvg,
+ whareHouseSvg,
];
}
@@ -365,6 +462,7 @@ class Assets {
static const $AssetsIconsGen icons = $AssetsIconsGen();
static const $AssetsImagesGen images = $AssetsImagesGen();
+ static const $AssetsLogosGen logos = $AssetsLogosGen();
static const $AssetsVecGen vec = $AssetsVecGen();
}
diff --git a/packages/core/lib/presentation/common/fonts.gen.dart b/packages/core/lib/presentation/common/fonts.gen.dart
index 9e7368f..66ad118 100644
--- a/packages/core/lib/presentation/common/fonts.gen.dart
+++ b/packages/core/lib/presentation/common/fonts.gen.dart
@@ -10,6 +10,6 @@
class FontFamily {
FontFamily._();
- /// Font family: iranyekanregularfanum
- static const String iranyekanregularfanum = 'iranyekanregularfanum';
+ /// Font family: yekan
+ static const String yekan = 'yekan';
}
diff --git a/packages/core/lib/presentation/widget/bottom_navigation/wave_bottom_navigation.dart b/packages/core/lib/presentation/widget/bottom_navigation/wave_bottom_navigation.dart
index f2b50b3..3db9ad8 100644
--- a/packages/core/lib/presentation/widget/bottom_navigation/wave_bottom_navigation.dart
+++ b/packages/core/lib/presentation/widget/bottom_navigation/wave_bottom_navigation.dart
@@ -9,21 +9,24 @@ class WaveBottomNavigationItem {
}
class WaveBottomNavigation extends StatefulWidget {
- const WaveBottomNavigation({
- super.key,
- required this.items,
- required this.onPageChanged,
- });
+ const WaveBottomNavigation({super.key, this.initPage = 0, required this.items, required this.onPageChanged});
final List items;
final Function(int) onPageChanged;
+ final int initPage;
@override
State createState() => _WaveBottomNavigationState();
}
class _WaveBottomNavigationState extends State {
- final PageController _controller = PageController(viewportFraction: 0.3);
+ late PageController _controller;
+
+ @override
+ void initState() {
+ super.initState();
+ _controller = PageController(viewportFraction: 0.3, initialPage: widget.initPage);
+ }
@override
void dispose() {
@@ -85,19 +88,15 @@ class _WaveBottomNavigationState extends State {
final WaveBottomNavigationItem item = widget.items[index];
return GestureDetector(
onTap: () {
- _controller.animateToPage(
- index,
- duration: Duration(milliseconds: 500),
- curve: Curves.easeInOut,
- );
+ _controller.animateToPage(index, duration: Duration(milliseconds: 500), curve: Curves.easeInOut);
},
child: Center(
child: AnimatedBuilder(
animation: _controller,
builder: (context, child) {
double value = 0.0;
- final scale = _calculateScale(_controller.page ?? 0, index);
- value = index - (_controller.page ?? 0);
+ final scale = _calculateScale(_controller.page ?? _controller.initialPage.toDouble() ?? 0.0, index);
+ value = index - (_controller.page ?? _controller.initialPage.toDouble() ?? 0.0);
value = (value).clamp(-1, 1);
double offset = value * 30;
if (value.abs() < 0.2 || value.abs() > 0.2) {
@@ -110,10 +109,7 @@ class _WaveBottomNavigationState extends State {
offset: Offset(0, offset),
child: Column(
children: [
- Tooltip(
- message: item.title,
- child: item.icon
- ),
+ Tooltip(message: item.title, child: item.icon),
/* Visibility(
visible: (_controller.page ?? 0) == index,