feat : statistics page
This commit is contained in:
6
assets/icons/cube_card.svg
Normal file
6
assets/icons/cube_card.svg
Normal file
@@ -0,0 +1,6 @@
|
||||
<svg width="30" height="30" viewBox="0 0 30 30" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<rect width="30" height="30" rx="8" fill="#00CC99"/>
|
||||
<path d="M23.21 10.8204L15.51 15.2804C15.2 15.4604 14.81 15.4604 14.49 15.2804L6.78997 10.8204C6.23997 10.5004 6.09997 9.75043 6.51997 9.28043C6.80997 8.95043 7.13997 8.68043 7.48997 8.49043L12.91 5.49043C14.07 4.84043 15.95 4.84043 17.11 5.49043L22.53 8.49043C22.88 8.68043 23.21 8.96043 23.5 9.28043C23.9 9.75043 23.76 10.5004 23.21 10.8204Z" fill="white"/>
|
||||
<path d="M14.43 17.1399V23.9599C14.43 24.7199 13.66 25.2199 12.98 24.8899C10.92 23.8799 7.44998 21.9899 7.44998 21.9899C6.22998 21.2999 5.22998 19.5599 5.22998 18.1299V12.9699C5.22998 12.1799 6.05998 11.6799 6.73998 12.0699L13.93 16.2399C14.23 16.4299 14.43 16.7699 14.43 17.1399Z" fill="white"/>
|
||||
<path d="M15.5701 17.1399V23.9599C15.5701 24.7199 16.3401 25.2199 17.0201 24.8899C19.0801 23.8799 22.5501 21.9899 22.5501 21.9899C23.7701 21.2999 24.7701 19.5599 24.7701 18.1299V12.9699C24.7701 12.1799 23.9401 11.6799 23.2601 12.0699L16.0701 16.2399C15.7701 16.4299 15.5701 16.7699 15.5701 17.1399Z" fill="white"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.1 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 2.3 KiB |
File diff suppressed because one or more lines are too long
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 3.6 KiB |
BIN
assets/vec/cube_card.svg.vec
Normal file
BIN
assets/vec/cube_card.svg.vec
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -100,6 +100,9 @@ class $AssetsIconsGen {
|
||||
/// File path: assets/icons/cube_bottom_rotation.svg
|
||||
SvgGenImage get cubeBottomRotation => const SvgGenImage('assets/icons/cube_bottom_rotation.svg');
|
||||
|
||||
/// File path: assets/icons/cube_card.svg
|
||||
SvgGenImage get cubeCard => const SvgGenImage('assets/icons/cube_card.svg');
|
||||
|
||||
/// File path: assets/icons/cube_rotate.svg
|
||||
SvgGenImage get cubeRotate => const SvgGenImage('assets/icons/cube_rotate.svg');
|
||||
|
||||
@@ -293,6 +296,7 @@ class $AssetsIconsGen {
|
||||
cow,
|
||||
cube,
|
||||
cubeBottomRotation,
|
||||
cubeCard,
|
||||
cubeRotate,
|
||||
cubeScan,
|
||||
cubeSearch,
|
||||
@@ -453,6 +457,9 @@ class $AssetsVecGen {
|
||||
/// File path: assets/vec/cube_bottom_rotation.svg.vec
|
||||
SvgGenImage get cubeBottomRotationSvg => const SvgGenImage.vec('assets/vec/cube_bottom_rotation.svg.vec');
|
||||
|
||||
/// File path: assets/vec/cube_card.svg.vec
|
||||
SvgGenImage get cubeCardSvg => const SvgGenImage.vec('assets/vec/cube_card.svg.vec');
|
||||
|
||||
/// File path: assets/vec/cube_rotate.svg.vec
|
||||
SvgGenImage get cubeRotateSvg => const SvgGenImage.vec('assets/vec/cube_rotate.svg.vec');
|
||||
|
||||
@@ -646,6 +653,7 @@ class $AssetsVecGen {
|
||||
cowSvg,
|
||||
cubeSvg,
|
||||
cubeBottomRotationSvg,
|
||||
cubeCardSvg,
|
||||
cubeRotateSvg,
|
||||
cubeScanSvg,
|
||||
cubeSearchSvg,
|
||||
|
||||
@@ -150,57 +150,102 @@ class StatisticsPage extends GetView<StatisticsLogic> {
|
||||
),
|
||||
SizedBox(height: 8.h),
|
||||
Container(
|
||||
height: 152.h,
|
||||
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(color: AppColor.lightGreyNormalHover, width: 1),
|
||||
),
|
||||
child: Padding(
|
||||
padding: const EdgeInsets.fromLTRB(0, 10, 0, 13),
|
||||
child: Row(
|
||||
spacing: 8,
|
||||
children: [
|
||||
Expanded(
|
||||
child: ObxValue(
|
||||
(data) => _informationLabelCard(
|
||||
title: 'تعداد تراکنش ها',
|
||||
titleColor: AppColor.blueNormal,
|
||||
isLoading: data.value == null,
|
||||
description: 25369654.separatedByComma,
|
||||
iconPath: Assets.vec.cubeSearchSvg.path,
|
||||
iconColor: AppColor.blueNormal,
|
||||
bgDescriptionColor: Colors.white,
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [AppColor.blueLight, Colors.white],
|
||||
padding: EdgeInsets.all(8),
|
||||
child: Column(
|
||||
spacing: 8,
|
||||
children: [
|
||||
Row(
|
||||
spacing: 8,
|
||||
children: [
|
||||
Expanded(
|
||||
child: ObxValue(
|
||||
(data) => _informationLabelCard(
|
||||
title: 'تعداد تراکنش ها',
|
||||
titleColor: AppColor.blueNormal,
|
||||
isLoading: data.value == null,
|
||||
description: 25369654.separatedByComma,
|
||||
iconPath: Assets.vec.cubeScanSvg.path,
|
||||
bgDescriptionColor: Colors.white,
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [AppColor.blueLight, Colors.white],
|
||||
),
|
||||
),
|
||||
controller.s1,
|
||||
),
|
||||
controller.s1,
|
||||
),
|
||||
),
|
||||
|
||||
Expanded(
|
||||
child: ObxValue((data) {
|
||||
return _informationLabelCard(
|
||||
title: 'جمع تراکنش ها',
|
||||
isLoading: data.value == null,
|
||||
description: data.value.separatedByComma ?? '0',
|
||||
unit: 'ريال',
|
||||
iconPath: Assets.vec.cubeWattingSvg.path,
|
||||
bgDescriptionColor: Colors.white,
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [const Color(0xFFFFE7BB), Colors.white],
|
||||
),
|
||||
);
|
||||
}, controller.s2),
|
||||
),
|
||||
],
|
||||
),
|
||||
Expanded(
|
||||
child: ObxValue((data) {
|
||||
return _informationLabelCard(
|
||||
title: 'جمع تراکنش ها',
|
||||
isLoading: data.value == null,
|
||||
description: data.value.separatedByComma ?? '0',
|
||||
unit: 'ريال',
|
||||
iconPath: Assets.vec.cubeCardSvg.path,
|
||||
bgDescriptionColor: Colors.white,
|
||||
titleColor: AppColor.greenDarkHover,
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [AppColor.greenLightHover, Colors.white],
|
||||
),
|
||||
);
|
||||
}, controller.s2),
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
spacing: 16,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
RElevated(
|
||||
width: 160.w,
|
||||
height: 40.h,
|
||||
backgroundColor: AppColor.greenNormal,
|
||||
onPressed: () {},
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Assets.vec.excelDownloadSvg.svg(
|
||||
width: 24.w,
|
||||
height: 24.h,
|
||||
colorFilter: const ColorFilter.mode(Colors.white, BlendMode.srcIn),
|
||||
),
|
||||
SizedBox(width: 4.w),
|
||||
Text('EXCEL', style: AppFonts.yekan14.copyWith(color: Colors.white)),
|
||||
],
|
||||
),
|
||||
),
|
||||
ROutlinedElevated(
|
||||
width: 160.w,
|
||||
height: 40.h,
|
||||
borderColor: AppColor.error,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Assets.vec.pdfDownloadSvg.svg(
|
||||
width: 24.w,
|
||||
height: 24.h,
|
||||
colorFilter: const ColorFilter.mode(AppColor.error, BlendMode.srcIn),
|
||||
),
|
||||
SizedBox(width: 4.w),
|
||||
Text('PDF', style: AppFonts.yekan14.copyWith(color: AppColor.error)),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8.h),
|
||||
],
|
||||
),
|
||||
);
|
||||
@@ -239,7 +284,6 @@ class StatisticsPage extends GetView<StatisticsLogic> {
|
||||
}) {
|
||||
return Container(
|
||||
height: 82.h,
|
||||
margin: EdgeInsets.symmetric(horizontal: 12.w),
|
||||
decoration: BoxDecoration(
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
border: Border.all(color: AppColor.lightGreyNormalHover, width: 1),
|
||||
@@ -249,10 +293,10 @@ class StatisticsPage extends GetView<StatisticsLogic> {
|
||||
children: [
|
||||
// Left side with icon and title
|
||||
Expanded(
|
||||
flex: 2,
|
||||
flex: 91,
|
||||
child: Container(
|
||||
height: 82.h,
|
||||
padding: EdgeInsets.all(8),
|
||||
padding: EdgeInsets.all(4),
|
||||
decoration: BoxDecoration(
|
||||
color: gradient == null ? bgLabelColor : null,
|
||||
borderRadius: BorderRadius.only(
|
||||
@@ -263,7 +307,7 @@ class StatisticsPage extends GetView<StatisticsLogic> {
|
||||
),
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
spacing: 4,
|
||||
spacing: 8,
|
||||
children: [
|
||||
SvgGenImage.vec(iconPath).svg(
|
||||
width: 24,
|
||||
@@ -285,7 +329,7 @@ class StatisticsPage extends GetView<StatisticsLogic> {
|
||||
),
|
||||
// Right side with description and unit
|
||||
Expanded(
|
||||
flex: 3,
|
||||
flex: 109,
|
||||
child: Container(
|
||||
decoration: BoxDecoration(
|
||||
color: bgDescriptionColor,
|
||||
@@ -302,13 +346,13 @@ class StatisticsPage extends GetView<StatisticsLogic> {
|
||||
children: [
|
||||
Text(
|
||||
description,
|
||||
textAlign: TextAlign.right,
|
||||
style: AppFonts.yekan16.copyWith(color: AppColor.mediumGreyDarkActive),
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan14.copyWith(color: AppColor.mediumGreyDarkActive),
|
||||
),
|
||||
Visibility(
|
||||
visible: unit != null,
|
||||
child: Text(
|
||||
unit,
|
||||
unit ?? '',
|
||||
textAlign: TextAlign.center,
|
||||
style: AppFonts.yekan12.copyWith(color: AppColor.mediumGreyDarkActive),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user