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

@@ -6,7 +6,7 @@ import 'package:customer/screen_ui/rental_service/rental_order_details_screen.da
import 'package:customer/themes/round_button_fill.dart';
import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:get/get.dart' hide Trans;
import '../../constant/constant.dart';
import '../../controllers/my_rental_booking_controller.dart';
import '../../controllers/theme_controller.dart';
@@ -25,14 +25,27 @@ class MyRentalBookingScreen extends StatelessWidget {
builder: (controller) {
return DefaultTabController(
length: controller.tabTitles.length,
initialIndex: controller.tabTitles.indexOf(controller.selectedTab.value),
initialIndex: controller.tabTitles.indexOf(
controller.selectedTab.value,
),
child: Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
backgroundColor: AppThemeData.primary300,
title: Padding(
padding: const EdgeInsets.only(bottom: 10),
child: Row(children: [const SizedBox(width: 10), Text("Rental History".tr(), style: AppThemeData.boldTextStyle(fontSize: 18, color: AppThemeData.grey900))]),
child: Row(
children: [
const SizedBox(width: 10),
Text(
"Rental History".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 18,
color: AppThemeData.grey900,
),
),
],
),
),
bottom: TabBar(
onTap: (index) {
@@ -42,8 +55,13 @@ class MyRentalBookingScreen extends StatelessWidget {
labelColor: AppThemeData.parcelService500,
unselectedLabelColor: AppThemeData.parcelService500,
labelStyle: AppThemeData.boldTextStyle(fontSize: 13),
unselectedLabelStyle: AppThemeData.mediumTextStyle(fontSize: 13),
tabs: controller.tabTitles.map((title) => Tab(child: Center(child: Text(title)))).toList(),
unselectedLabelStyle: AppThemeData.mediumTextStyle(
fontSize: 13,
),
tabs:
controller.tabTitles
.map((title) => Tab(child: Center(child: Text(title))))
.toList(),
),
),
body:
@@ -56,12 +74,30 @@ class MyRentalBookingScreen extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text("Please Log In to Continue".tr(), style: TextStyle(color: isDark ? AppThemeData.grey100 : AppThemeData.grey800, fontSize: 22, fontFamily: AppThemeData.semiBold)),
Text(
"Please Log In to Continue".tr(),
style: TextStyle(
color:
isDark
? AppThemeData.grey100
: AppThemeData.grey800,
fontSize: 22,
fontFamily: AppThemeData.semiBold,
),
),
const SizedBox(height: 5),
Text(
"Youre not logged in. Please sign in to access your account and explore all features.".tr(),
"Youre not logged in. Please sign in to access your account and explore all features."
.tr(),
textAlign: TextAlign.center,
style: TextStyle(color: isDark ? AppThemeData.grey50 : AppThemeData.grey500, fontSize: 16, fontFamily: AppThemeData.bold),
style: TextStyle(
color:
isDark
? AppThemeData.grey50
: AppThemeData.grey500,
fontSize: 16,
fontFamily: AppThemeData.bold,
),
),
const SizedBox(height: 20),
RoundedButtonFill(
@@ -80,71 +116,154 @@ class MyRentalBookingScreen extends StatelessWidget {
: TabBarView(
children:
controller.tabTitles.map((title) {
List<RentalOrderModel> orders = controller.getOrdersForTab(title);
List<RentalOrderModel> orders = controller
.getOrdersForTab(title);
if (orders.isEmpty) {
return Center(child: Text("No orders found".tr(), style: AppThemeData.mediumTextStyle(color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900)));
return Center(
child: Text(
"No orders found".tr(),
style: AppThemeData.mediumTextStyle(
color:
isDark
? AppThemeData.greyDark900
: AppThemeData.grey900,
),
),
);
}
return ListView.builder(
padding: const EdgeInsets.all(16),
itemCount: orders.length,
itemBuilder: (context, index) {
RentalOrderModel order = orders[index]; //use this
RentalOrderModel order =
orders[index]; //use this
return InkWell(
onTap: () {
Get.to(() => RentalOrderDetailsScreen(), arguments: order);
Get.to(
() => RentalOrderDetailsScreen(),
arguments: order,
);
},
child: 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),
margin: const EdgeInsets.only(bottom: 10),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Padding(padding: const EdgeInsets.only(top: 5), child: Image.asset("assets/icons/pickup.png", height: 18, width: 18)),
Padding(
padding: const EdgeInsets.only(
top: 5,
),
child: Image.asset(
"assets/icons/pickup.png",
height: 18,
width: 18,
),
),
const SizedBox(width: 10),
Expanded(
//prevents overflow
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Expanded(
//text wraps if too long
child: Text(
order.sourceLocationName ?? "-",
style: AppThemeData.semiBoldTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
overflow: TextOverflow.ellipsis, //safe cutoff
order.sourceLocationName ??
"-",
style: AppThemeData.semiBoldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData
.greyDark900
: AppThemeData
.grey900,
),
overflow:
TextOverflow
.ellipsis, //safe cutoff
maxLines: 2,
),
),
if (order.status != null) ...[
const SizedBox(width: 8),
if (order.status !=
null) ...[
const SizedBox(
width: 8,
),
Container(
padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 12),
padding:
const EdgeInsets.symmetric(
vertical: 6,
horizontal: 12,
),
decoration: BoxDecoration(
color: AppThemeData.info50,
border: Border.all(color: AppThemeData.info300),
borderRadius: BorderRadius.circular(12),
color:
AppThemeData
.info50,
border: Border.all(
color:
AppThemeData
.info300,
),
borderRadius:
BorderRadius.circular(
12,
),
),
child: Text(
order.status ?? '',
style: AppThemeData.boldTextStyle(
fontSize: 14,
color:
AppThemeData
.info500,
),
),
child: Text(order.status ?? '', style: AppThemeData.boldTextStyle(fontSize: 14, color: AppThemeData.info500)),
),
],
],
),
if (order.bookingDateTime != null)
if (order.bookingDateTime !=
null)
Text(
Constant.timestampToDateTime(order.bookingDateTime!),
style: AppThemeData.mediumTextStyle(fontSize: 12, color: isDark ? AppThemeData.greyDark600 : AppThemeData.grey600),
Constant.timestampToDateTime(
order.bookingDateTime!,
),
style: AppThemeData.mediumTextStyle(
fontSize: 12,
color:
isDark
? AppThemeData
.greyDark600
: AppThemeData
.grey600,
),
),
],
),
@@ -152,41 +271,112 @@ class MyRentalBookingScreen extends StatelessWidget {
],
),
const SizedBox(height: 12),
Text("Vehicle Type :".tr(), style: AppThemeData.boldTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900)),
Text(
"Vehicle Type :".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.greyDark900
: AppThemeData.grey900,
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
padding: const EdgeInsets.symmetric(
vertical: 10,
horizontal: 10,
),
child: Row(
children: [
ClipRRect(
//borderRadius: BorderRadius.circular(10),
child: CachedNetworkImage(
imageUrl: order.rentalVehicleType!.rentalVehicleIcon.toString(),
imageUrl:
order
.rentalVehicleType!
.rentalVehicleIcon
.toString(),
height: 60,
width: 60,
imageBuilder:
(context, imageProvider) => Container(
decoration: BoxDecoration(borderRadius: BorderRadius.circular(10), image: DecorationImage(image: imageProvider, fit: BoxFit.cover)),
(
context,
imageProvider,
) => Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(
10,
),
image: DecorationImage(
image:
imageProvider,
fit: BoxFit.cover,
),
),
),
placeholder:
(context, url) => Center(
child: CircularProgressIndicator.adaptive(
valueColor:
AlwaysStoppedAnimation(
AppThemeData
.primary300,
),
),
),
errorWidget:
(
context,
url,
error,
) => Image.network(
Constant
.placeHolderImage,
fit: BoxFit.cover,
),
placeholder: (context, url) => Center(child: CircularProgressIndicator.adaptive(valueColor: AlwaysStoppedAnimation(AppThemeData.primary300))),
errorWidget: (context, url, error) => Image.network(Constant.placeHolderImage, fit: BoxFit.cover),
fit: BoxFit.cover,
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
padding:
const EdgeInsets.symmetric(
horizontal: 10,
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment
.start,
children: [
Text(
"${order.rentalVehicleType!.name}",
style: AppThemeData.semiBoldTextStyle(fontSize: 18, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
style: AppThemeData.semiBoldTextStyle(
fontSize: 18,
color:
isDark
? AppThemeData
.greyDark900
: AppThemeData
.grey900,
),
),
Padding(
padding: const EdgeInsets.only(top: 2.0),
padding:
const EdgeInsets.only(
top: 2.0,
),
child: Text(
"${order.rentalVehicleType!.shortDescription}",
style: AppThemeData.mediumTextStyle(fontSize: 14, color: isDark ? AppThemeData.greyDark600 : AppThemeData.grey600),
style: AppThemeData.mediumTextStyle(
fontSize: 14,
color:
isDark
? AppThemeData
.greyDark600
: AppThemeData
.grey600,
),
),
),
],
@@ -196,60 +386,143 @@ class MyRentalBookingScreen extends StatelessWidget {
],
),
),
Text("Package info :".tr(), style: AppThemeData.boldTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900)),
Text(
"Package info :".tr(),
style: AppThemeData.boldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.greyDark900
: AppThemeData.grey900,
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 10),
padding: const EdgeInsets.symmetric(
vertical: 10,
horizontal: 10,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
Text(
order.rentalPackageModel!.name.toString(),
style: AppThemeData.semiBoldTextStyle(fontSize: 18, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
order
.rentalPackageModel!
.name
.toString(),
style: AppThemeData.semiBoldTextStyle(
fontSize: 18,
color:
isDark
? AppThemeData
.greyDark900
: AppThemeData
.grey900,
),
),
const SizedBox(height: 4),
Text(
order.rentalPackageModel!.description.toString(),
style: AppThemeData.mediumTextStyle(fontSize: 14, color: isDark ? AppThemeData.greyDark600 : AppThemeData.grey600),
order
.rentalPackageModel!
.description
.toString(),
style: AppThemeData.mediumTextStyle(
fontSize: 14,
color:
isDark
? AppThemeData
.greyDark600
: AppThemeData
.grey600,
),
),
],
),
),
SizedBox(width: 10),
Text(
Constant.amountShow(amount: order.rentalPackageModel!.baseFare.toString()),
style: AppThemeData.boldTextStyle(fontSize: 18, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900),
Constant.amountShow(
amount:
order
.rentalPackageModel!
.baseFare
.toString(),
),
style:
AppThemeData.boldTextStyle(
fontSize: 18,
color:
isDark
? AppThemeData
.greyDark900
: AppThemeData
.grey900,
),
),
],
),
),
if (Constant.isEnableOTPTripStartForRental == true)
Text("${'OTP :'.tr()} ${order.otpCode}", style: AppThemeData.boldTextStyle(fontSize: 16, color: isDark ? AppThemeData.greyDark900 : AppThemeData.grey900)),
if (Constant
.isEnableOTPTripStartForRental ==
true)
Text(
"${'OTP :'.tr()} ${order.otpCode}",
style: AppThemeData.boldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.greyDark900
: AppThemeData.grey900,
),
),
SizedBox(height: 10),
Row(
children: [
order.status == Constant.orderInTransit && order.paymentStatus == false
order.status ==
Constant
.orderInTransit &&
order.paymentStatus == false
? Expanded(
child: RoundedButtonFill(
title: "Pay Now",
onPress: () {
Get.to(() => RentalOrderDetailsScreen(), arguments: order);
Get.to(
() =>
RentalOrderDetailsScreen(),
arguments: order,
);
},
color: AppThemeData.primary300,
textColor: AppThemeData.grey900,
color:
AppThemeData.primary300,
textColor:
AppThemeData.grey900,
),
)
: SizedBox(),
order.status == Constant.orderPlaced || order.status == Constant.driverAccepted
order.status ==
Constant.orderPlaced ||
order.status ==
Constant.driverAccepted
? Expanded(
child: RoundedButtonFill(
title: "Cancel Booking",
onPress: () => controller.cancelRentalRequest(order, taxList: order.taxSetting),
color: AppThemeData.danger300,
textColor: AppThemeData.surface,
onPress:
() => controller
.cancelRentalRequest(
order,
taxList:
order
.taxSetting,
),
color:
AppThemeData.danger300,
textColor:
AppThemeData.surface,
),
)
: SizedBox(),
@@ -269,7 +542,12 @@ class MyRentalBookingScreen extends StatelessWidget {
);
}
Obx cardDecoration(MyRentalBookingController controller, PaymentGateway value, isDark, String image) {
Obx cardDecoration(
MyRentalBookingController controller,
PaymentGateway value,
isDark,
String image,
) {
return Obx(
() => Padding(
padding: const EdgeInsets.symmetric(vertical: 5),
@@ -284,8 +562,21 @@ class MyRentalBookingScreen extends StatelessWidget {
Container(
width: 50,
height: 50,
decoration: ShapeDecoration(shape: RoundedRectangleBorder(side: const BorderSide(width: 1, color: Color(0xFFE5E7EB)), borderRadius: BorderRadius.circular(8))),
child: Padding(padding: EdgeInsets.all(value.name == "payFast" ? 0 : 8.0), child: Image.asset(image)),
decoration: ShapeDecoration(
shape: RoundedRectangleBorder(
side: const BorderSide(
width: 1,
color: Color(0xFFE5E7EB),
),
borderRadius: BorderRadius.circular(8),
),
),
child: Padding(
padding: EdgeInsets.all(
value.name == "payFast" ? 0 : 8.0,
),
child: Image.asset(image),
),
),
const SizedBox(width: 10),
value.name == "wallet"
@@ -296,12 +587,30 @@ class MyRentalBookingScreen extends StatelessWidget {
Text(
value.name.capitalizeString(),
textAlign: TextAlign.start,
style: AppThemeData.semiBoldTextStyle(fontSize: 16, color: isDark ? AppThemeData.grey50 : AppThemeData.grey900),
style: AppThemeData.semiBoldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.grey50
: AppThemeData.grey900,
),
),
Text(
Constant.amountShow(amount: Constant.userModel!.walletAmount == null ? '0.0' : Constant.userModel!.walletAmount.toString()),
Constant.amountShow(
amount:
Constant.userModel!.walletAmount == null
? '0.0'
: Constant.userModel!.walletAmount
.toString(),
),
textAlign: TextAlign.start,
style: AppThemeData.semiBoldTextStyle(fontSize: 14, color: isDark ? AppThemeData.primary300 : AppThemeData.primary300),
style: AppThemeData.semiBoldTextStyle(
fontSize: 14,
color:
isDark
? AppThemeData.primary300
: AppThemeData.primary300,
),
),
],
),
@@ -310,14 +619,23 @@ class MyRentalBookingScreen extends StatelessWidget {
child: Text(
value.name.capitalizeString(),
textAlign: TextAlign.start,
style: AppThemeData.semiBoldTextStyle(fontSize: 16, color: isDark ? AppThemeData.grey50 : AppThemeData.grey900),
style: AppThemeData.semiBoldTextStyle(
fontSize: 16,
color:
isDark
? AppThemeData.grey50
: AppThemeData.grey900,
),
),
),
const Expanded(child: SizedBox()),
Radio(
value: value.name,
groupValue: controller.selectedPaymentMethod.value,
activeColor: isDark ? AppThemeData.primary300 : AppThemeData.primary300,
activeColor:
isDark
? AppThemeData.primary300
: AppThemeData.primary300,
onChanged: (value) {
controller.selectedPaymentMethod.value = value.toString();
},