BASE: Update Icons & Name Of The App.

This commit is contained in:
2025-12-04 10:23:59 +05:00
parent b04050384d
commit e602782edd
228 changed files with 34364 additions and 7905 deletions

View File

@@ -7,7 +7,7 @@ import 'package:dotted_border/dotted_border.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:flutter_svg/svg.dart';
import 'package:get/get.dart';
import 'package:get/get.dart' hide Trans;
import '../../controllers/rental_conformation_controller.dart';
import '../../controllers/theme_controller.dart';
import '../../themes/app_them_data.dart';
@@ -38,12 +38,30 @@ class RentalConformationScreen extends StatelessWidget {
child: Container(
height: 42,
width: 42,
decoration: BoxDecoration(shape: BoxShape.circle, color: AppThemeData.grey50),
child: Center(child: Padding(padding: const EdgeInsets.only(left: 5), child: Icon(Icons.arrow_back_ios, color: AppThemeData.grey900, size: 20))),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: AppThemeData.grey50,
),
child: Center(
child: Padding(
padding: const EdgeInsets.only(left: 5),
child: Icon(
Icons.arrow_back_ios,
color: AppThemeData.grey900,
size: 20,
),
),
),
),
),
const SizedBox(width: 10),
Text("Confirm Rent a Car".tr(), style: AppThemeData.boldTextStyle(fontSize: 18, color: AppThemeData.grey900)),
Text(
"Confirm Rent a Car".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 18,
color: AppThemeData.grey900,
),
),
],
),
),
@@ -61,26 +79,56 @@ class RentalConformationScreen extends StatelessWidget {
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: isDark ? AppThemeData.greyDark50 : AppThemeData.grey50,
border: Border.all(color: isDark ? AppThemeData.greyDark200 : AppThemeData.grey200),
color:
isDark
? AppThemeData.greyDark50
: AppThemeData.grey50,
border: Border.all(
color:
isDark
? AppThemeData.greyDark200
: AppThemeData.grey200,
),
),
padding: const EdgeInsets.all(16),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Image.asset("assets/icons/pickup.png", height: 15, width: 15),
Image.asset(
"assets/icons/pickup.png",
height: 15,
width: 15,
),
SizedBox(width: 15),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
"${controller.rentalOrderModel.value.sourceLocationName}",
style: AppThemeData.semiBoldTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
style: AppThemeData.semiBoldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.greyDark900
: AppThemeData.grey900,
),
),
Text(
Constant.timestampToDate(controller.rentalOrderModel.value.bookingDateTime!),
style: AppThemeData.semiBoldTextStyle(fontSize: 12, color: isDark ? AppThemeData.greyDark600 : AppThemeData.grey600),
Constant.timestampToDate(
controller
.rentalOrderModel
.value
.bookingDateTime!,
),
style: AppThemeData.semiBoldTextStyle(
fontSize: 12,
color:
isDark
? AppThemeData.greyDark600
: AppThemeData.grey600,
),
),
],
),
@@ -92,38 +140,96 @@ class RentalConformationScreen extends StatelessWidget {
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: isDark ? AppThemeData.greyDark50 : AppThemeData.grey50,
border: Border.all(color: isDark ? AppThemeData.greyDark200 : AppThemeData.grey200),
color:
isDark
? AppThemeData.greyDark50
: AppThemeData.grey50,
border: Border.all(
color:
isDark
? AppThemeData.greyDark200
: AppThemeData.grey200,
),
),
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Your Preference".tr(), style: AppThemeData.boldTextStyle(fontSize: 14, color: isDark ? AppThemeData.greyDark500 : AppThemeData.grey500)),
Text(
"Your Preference".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 14,
color:
isDark
? AppThemeData.greyDark500
: AppThemeData.grey500,
),
),
SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
controller.rentalOrderModel.value.rentalPackageModel!.name.toString(),
style: AppThemeData.semiBoldTextStyle(fontSize: 18, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
controller
.rentalOrderModel
.value
.rentalPackageModel!
.name
.toString(),
style:
AppThemeData.semiBoldTextStyle(
fontSize: 18,
color:
isDark
? AppThemeData
.greyDark900
: AppThemeData
.grey900,
),
),
const SizedBox(height: 4),
Text(
controller.rentalOrderModel.value.rentalPackageModel!.description.toString(),
style: AppThemeData.mediumTextStyle(fontSize: 14, color: isDark ? AppThemeData.greyDark600 : AppThemeData.grey600),
controller
.rentalOrderModel
.value
.rentalPackageModel!
.description
.toString(),
style: AppThemeData.mediumTextStyle(
fontSize: 14,
color:
isDark
? AppThemeData.greyDark600
: AppThemeData.grey600,
),
),
],
),
),
SizedBox(width: 10),
Text(
Constant.amountShow(amount: controller.rentalOrderModel.value.rentalPackageModel!.baseFare.toString()),
style: AppThemeData.boldTextStyle(fontSize: 18, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
Constant.amountShow(
amount:
controller
.rentalOrderModel
.value
.rentalPackageModel!
.baseFare
.toString(),
),
style: AppThemeData.boldTextStyle(
fontSize: 18,
color:
isDark
? AppThemeData.greyDark900
: AppThemeData.grey900,
),
),
],
),
@@ -134,35 +240,81 @@ class RentalConformationScreen extends StatelessWidget {
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: isDark ? AppThemeData.greyDark50 : AppThemeData.grey50,
border: Border.all(color: isDark ? AppThemeData.greyDark200 : AppThemeData.grey200),
color:
isDark
? AppThemeData.greyDark50
: AppThemeData.grey50,
border: Border.all(
color:
isDark
? AppThemeData.greyDark200
: AppThemeData.grey200,
),
),
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Vehicle Type".tr(), style: AppThemeData.boldTextStyle(fontSize: 14, color: isDark ? AppThemeData.greyDark500 : AppThemeData.grey500)),
Text(
"Vehicle Type".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 14,
color:
isDark
? AppThemeData.greyDark500
: AppThemeData.grey500,
),
),
SizedBox(height: 10),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ClipRRect(
borderRadius: BorderRadiusGeometry.circular(10),
child: NetworkImageWidget(imageUrl: controller.rentalOrderModel.value.rentalVehicleType!.rentalVehicleIcon.toString(), height: 50, width: 50, borderRadius: 10),
borderRadius:
BorderRadiusGeometry.circular(10),
child: NetworkImageWidget(
imageUrl:
controller
.rentalOrderModel
.value
.rentalVehicleType!
.rentalVehicleIcon
.toString(),
height: 50,
width: 50,
borderRadius: 10,
),
),
SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
"${controller.rentalOrderModel.value.rentalVehicleType!.name}",
style: AppThemeData.semiBoldTextStyle(fontSize: 18, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
style:
AppThemeData.semiBoldTextStyle(
fontSize: 18,
color:
isDark
? AppThemeData
.greyDark900
: AppThemeData
.grey900,
),
),
Text(
"${controller.rentalOrderModel.value.rentalVehicleType!.shortDescription}",
style: AppThemeData.mediumTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark600 : AppThemeData.grey600),
style: AppThemeData.mediumTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.greyDark600
: AppThemeData.grey600,
),
),
],
),
@@ -176,24 +328,53 @@ class RentalConformationScreen extends StatelessWidget {
Row(
children: [
Expanded(child: Text("Coupons".tr(), style: AppThemeData.boldTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900))),
Expanded(
child: Text(
"Coupons".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.greyDark900
: AppThemeData.grey900,
),
),
),
InkWell(
onTap: () {
Get.to(RentalCouponScreen())!.then((value) {
if (value != null) {
double couponAmount = Constant.calculateDiscount(amount: controller.subTotal.value.toString(), offerModel: value);
if (couponAmount < controller.subTotal.value) {
controller.selectedCouponModel.value = value;
double couponAmount =
Constant.calculateDiscount(
amount:
controller.subTotal.value
.toString(),
offerModel: value,
);
if (couponAmount <
controller.subTotal.value) {
controller.selectedCouponModel.value =
value;
controller.calculateAmount();
} else {
ShowToastDialog.showToast("This offer not eligible for this booking".tr());
ShowToastDialog.showToast(
"This offer not eligible for this booking"
.tr(),
);
}
}
});
},
child: Text(
"View All".tr(),
style: AppThemeData.boldTextStyle(decoration: TextDecoration.underline, fontSize: 14, color: isDark ? AppThemeData.primary300 : AppThemeData.primary300),
style: AppThemeData.boldTextStyle(
decoration: TextDecoration.underline,
fontSize: 14,
color:
isDark
? AppThemeData.primary300
: AppThemeData.primary300,
),
),
),
],
@@ -202,21 +383,44 @@ class RentalConformationScreen extends StatelessWidget {
// Coupon input
DottedBorder(
options: RoundedRectDottedBorderOptions(strokeWidth: 1, radius: const Radius.circular(10), color: isDark ? AppThemeData.parcelServiceDark300 : AppThemeData.primary300),
options: RoundedRectDottedBorderOptions(
strokeWidth: 1,
radius: const Radius.circular(10),
color:
isDark
? AppThemeData.parcelServiceDark300
: AppThemeData.primary300,
),
child: Container(
decoration: BoxDecoration(color: AppThemeData.parcelService50, borderRadius: BorderRadius.circular(10)),
padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8),
decoration: BoxDecoration(
color: AppThemeData.parcelService50,
borderRadius: BorderRadius.circular(10),
),
padding: const EdgeInsets.symmetric(
horizontal: 12,
vertical: 8,
),
child: Row(
children: [
SvgPicture.asset("assets/icons/ic_coupon_parcel.svg", height: 28, width: 28),
SvgPicture.asset(
"assets/icons/ic_coupon_parcel.svg",
height: 28,
width: 28,
),
SizedBox(width: 15),
Expanded(
child: TextFormField(
controller: controller.couponController.value,
style: AppThemeData.semiBoldTextStyle(color: AppThemeData.grey900),
controller:
controller.couponController.value,
style: AppThemeData.semiBoldTextStyle(
color: AppThemeData.grey900,
),
decoration: InputDecoration(
hintText: "Write coupon code".tr(),
hintStyle: AppThemeData.mediumTextStyle(fontSize: 16, color: AppThemeData.parcelService500),
hintStyle: AppThemeData.mediumTextStyle(
fontSize: 16,
color: AppThemeData.parcelService500,
),
border: InputBorder.none,
),
),
@@ -224,22 +428,61 @@ class RentalConformationScreen extends StatelessWidget {
RoundedButtonFill(
title: "Redeem now".tr(),
onPress: () {
if (controller.couponList.where((element) => element.code!.toLowerCase() == controller.couponController.value.text.toLowerCase()).isNotEmpty) {
CouponModel couponModel = controller.couponList.firstWhere((p0) => p0.code!.toLowerCase() == controller.couponController.value.text.toLowerCase());
if (couponModel.expiresAt!.toDate().isAfter(DateTime.now())) {
double couponAmount = Constant.calculateDiscount(amount: controller.subTotal.value.toString(), offerModel: couponModel);
if (couponAmount < controller.subTotal.value) {
controller.selectedCouponModel.value = couponModel;
if (controller.couponList
.where(
(element) =>
element.code!.toLowerCase() ==
controller
.couponController
.value
.text
.toLowerCase(),
)
.isNotEmpty) {
CouponModel couponModel = controller
.couponList
.firstWhere(
(p0) =>
p0.code!.toLowerCase() ==
controller
.couponController
.value
.text
.toLowerCase(),
);
if (couponModel.expiresAt!
.toDate()
.isAfter(DateTime.now())) {
double couponAmount =
Constant.calculateDiscount(
amount:
controller.subTotal.value
.toString(),
offerModel: couponModel,
);
if (couponAmount <
controller.subTotal.value) {
controller
.selectedCouponModel
.value = couponModel;
controller.calculateAmount();
controller.update();
} else {
ShowToastDialog.showToast("This offer not eligible for this booking".tr());
ShowToastDialog.showToast(
"This offer not eligible for this booking"
.tr(),
);
}
} else {
ShowToastDialog.showToast("This coupon code has been expired".tr());
ShowToastDialog.showToast(
"This coupon code has been expired"
.tr(),
);
}
} else {
ShowToastDialog.showToast("Invalid coupon code".tr());
ShowToastDialog.showToast(
"Invalid coupon code".tr(),
);
}
},
borderRadius: 10,
@@ -257,45 +500,104 @@ class RentalConformationScreen extends StatelessWidget {
Container(
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(15),
color: isDark ? AppThemeData.greyDark50 : AppThemeData.grey50,
border: Border.all(color: isDark ? AppThemeData.greyDark200 : AppThemeData.grey200),
color:
isDark
? AppThemeData.greyDark50
: AppThemeData.grey50,
border: Border.all(
color:
isDark
? AppThemeData.greyDark200
: AppThemeData.grey200,
),
),
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text("Order Summary".tr(), style: AppThemeData.boldTextStyle(fontSize: 14, color: AppThemeData.grey500)),
Text(
"Order Summary".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 14,
color: AppThemeData.grey500,
),
),
const SizedBox(height: 8),
// Subtotal
_summaryTile("Subtotal".tr(), Constant.amountShow(amount: controller.subTotal.value.toString()), isDark, null),
_summaryTile(
"Subtotal".tr(),
Constant.amountShow(
amount:
controller.subTotal.value.toString(),
),
isDark,
null,
),
// Discount
_summaryTile("Discount".tr(), Constant.amountShow(amount: controller.discount.value.toString()), isDark, AppThemeData.dangerDark300),
_summaryTile(
"Discount".tr(),
Constant.amountShow(
amount:
controller.discount.value.toString(),
),
isDark,
AppThemeData.dangerDark300,
),
// Tax List
...List.generate(controller.rentalOrderModel.value.taxSetting!.length, (index) {
final taxModel = controller.rentalOrderModel.value.taxSetting![index];
final taxTitle = "${taxModel.title} ${taxModel.type == 'fix' ? '(${Constant.amountShow(amount: taxModel.tax)})' : '(${taxModel.tax}%)'}";
...List.generate(
controller
.rentalOrderModel
.value
.taxSetting!
.length,
(index) {
final taxModel =
controller
.rentalOrderModel
.value
.taxSetting![index];
final taxTitle =
"${taxModel.title} ${taxModel.type == 'fix' ? '(${Constant.amountShow(amount: taxModel.tax)})' : '(${taxModel.tax}%)'}";
return _summaryTile(
taxTitle,
Constant.amountShow(
amount:
Constant.getTaxValue(
amount: (controller.subTotal.value - controller.discount.value).toString(),
taxModel: controller.rentalOrderModel.value.taxSetting![index],
).toString(),
),
isDark,
null,
);
}),
return _summaryTile(
taxTitle,
Constant.amountShow(
amount:
Constant.getTaxValue(
amount:
(controller.subTotal.value -
controller
.discount
.value)
.toString(),
taxModel:
controller
.rentalOrderModel
.value
.taxSetting![index],
).toString(),
),
isDark,
null,
);
},
),
const Divider(),
// Total
_summaryTile("Order Total".tr(), Constant.amountShow(amount: controller.totalAmount.value.toString()), isDark, null),
_summaryTile(
"Order Total".tr(),
Constant.amountShow(
amount:
controller.totalAmount.value.toString(),
),
isDark,
null,
),
],
),
),
@@ -324,8 +626,22 @@ class RentalConformationScreen extends StatelessWidget {
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(title, style: AppThemeData.mediumTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark800 : AppThemeData.grey800)),
Text(value, style: AppThemeData.semiBoldTextStyle(fontSize: title == "Order Total" ? 18 : 16, color: colors ?? (isDark ? AppThemeData.greyDark900 : AppThemeData.grey900))),
Text(
title,
style: AppThemeData.mediumTextStyle(
fontSize: 16,
color: isDark ? AppThemeData.greyDark800 : AppThemeData.grey800,
),
),
Text(
value,
style: AppThemeData.semiBoldTextStyle(
fontSize: title == "Order Total" ? 18 : 16,
color:
colors ??
(isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
),
),
],
),
);