Update project

This commit is contained in:
2026-07-23 15:36:11 +05:30
parent 1197cfc161
commit 14fffa40c6
84 changed files with 20918 additions and 2761 deletions

View File

@@ -5,6 +5,7 @@ import 'package:nearledaily/constants/color_constants.dart';
import '../../../constants/font_constants.dart';
import '../../controllers/cart_controller/cart.dart';
import '../../controllers/dashboard_controller/dashboard_controller.dart';
import '../../features/orders/presentation/order_tracking.dart';
import '../../widgets/text_widget.dart';
import '../home_view.dart';
@@ -233,7 +234,44 @@ class _OrderSuccessViewState extends State<OrderSuccessView>
SizedBox(height: size.height * 0.015),
// Secondary CTA — Track Order
SizedBox(
width: double.infinity,
height: 56,
child: OutlinedButton(
onPressed: () {
Get.to(() => DeliveryTrackingPage());
},
style: OutlinedButton.styleFrom(
foregroundColor: ColorConstants.primaryColor,
side: BorderSide(
color: ColorConstants.primaryColor,
width: 1.5,
),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(16),
),
),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(Icons.local_shipping_outlined, size: 20),
const SizedBox(width: 8),
ReusableTextWidget(
text: 'Track Order',
color: ColorConstants.primaryColor,
fontFamily: FontConstants.fontFamily,
fontSize: 16,
fontWeight: FontWeight.w600,
textAlign: TextAlign.center,
),
],
),
),
),
SizedBox(height: size.height * 0.015),
],
),
),

View File

@@ -7,6 +7,7 @@ import '../../constants/asset_constants.dart';
import '../../constants/color_constants.dart';
import '../../constants/font_constants.dart';
import '../../controllers/tenant/get_tenant.dart'; // OrderedTenantController
import '../../features/orders/presentation/order_tracking.dart';
import '../../widgets/text_widget.dart';
import 'my_orders.dart'; // OrderDatum
@@ -450,149 +451,126 @@ class _OrdersByStoreScreenState extends State<OrdersByStoreScreen>
height: 5,
),
Row(
mainAxisAlignment:
MainAxisAlignment
.spaceBetween,
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
GestureDetector(
onTap: () async {
final uri = Uri(scheme: 'tel', path: order.pickupcontactno!);
if (await canLaunchUrl(uri)) {
await launchUrl(uri);
}
},
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
ReusableTextWidget(
text: 'Contact :',
color: ColorConstants.blackColor.withOpacity(0.67),
fontWeight: FontWeight.w600,
fontSize: 13,
fontFamily: FontConstants.fontFamily,
// Track Button
Expanded(
child: Container(
height: 44,
margin: const EdgeInsets.only(right: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
gradient: const LinearGradient(
colors: [Color(0xFF662582), Color(0xFF7A2E9C)],
begin: Alignment.topLeft,
end: Alignment.bottomRight,
),
const SizedBox(height: 4),
Row(
children: [
Icon(
Icons.phone_rounded,
size: 14,
color: ColorConstants.primaryColor,
boxShadow: [
BoxShadow(
color: const Color(0xFF662582).withOpacity(0.3),
blurRadius: 10,
offset: const Offset(0, 4),
),
],
),
child: Material(
color: Colors.transparent,
child: InkWell(
borderRadius: BorderRadius.circular(14),
onTap: () {
HapticFeedback.mediumImpact();
Get.to(() => const DeliveryTrackingPage());
},
child: const Center(
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.location_on_rounded, color: Colors.white, size: 18),
SizedBox(width: 6),
Text(
'Track',
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
color: Colors.white,
letterSpacing: 0.2,
),
),
],
),
const SizedBox(width: 5),
ReusableTextWidget(
text: order.pickupcontactno ?? "No Contact",
color: ColorConstants.primaryColor,
fontWeight: FontWeight.w600,
fontSize: 13,
fontFamily: FontConstants.fontFamily,
),
],
),
),
],
),
),
),
ElevatedButton(
style: ElevatedButton
.styleFrom(
padding:
const EdgeInsets
.symmetric(
horizontal: 12,
vertical: 5),
shape:
RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(
8),
// View Details Button
Expanded(
child: Container(
height: 44,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(14),
border: Border.all(color: primaryColor, width: 1.4),
color: Colors.white,
),
backgroundColor:
primaryColor,
),
onPressed: () {
// ✨ Haptic feedback on button press
HapticFeedback.mediumImpact();
// ✨ Smooth page transition
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context,
animation,
secondaryAnimation) =>
OrderDetailsPage(
orderId: order
.orderid ??
'Unknown',
storeName: tenantName,
storeLocation: order
.tenantsuburb ??
'Unknown',
tax: order
.totaltaxamount ??
0,
gstno: order.gstno ?? "",
fee: order
.deliverycharge ??
0,
items: order
.orderdetails
?.map((item) =>
{
'name':
item.productname ?? 'Unknown',
'quantity':
item.orderqty ?? 0,
'productSumPrice':
item.productsumprice ?? 0.0,
'price':
item.price ?? 0.0,
'discountamount':
item.price ?? 0.0,
'image':
item.productimage ?? '',
})
.toList() ??
[],
),
transitionsBuilder:
(context,
animation,
secondaryAnimation,
child) {
return FadeTransition(
opacity: animation,
child:
SlideTransition(
position:
Tween<Offset>(
begin:
const Offset(
0.05, 0),
end:
Offset.zero,
).animate(
animation),
child: child,
child: Material(
color: Colors.transparent,
child: InkWell(
borderRadius: BorderRadius.circular(14),
onTap: () {
HapticFeedback.mediumImpact();
Navigator.push(
context,
PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnimation) =>
OrderDetailsPage(
orderId: order.orderid ?? 'Unknown',
storeName: tenantName,
storeLocation: order.tenantsuburb ?? 'Unknown',
tax: order.totaltaxamount ?? 0,
gstno: order.gstno ?? "",
fee: order.deliverycharge ?? 0,
items: order.orderdetails
?.map((item) => {
'name': item.productname ?? 'Unknown',
'quantity': item.orderqty ?? 0,
'productSumPrice': item.productsumprice ?? 0.0,
'price': item.price ?? 0.0,
'discountamount': item.price ?? 0.0,
'image': item.productimage ?? '',
})
.toList() ??
[],
),
transitionsBuilder: (context, animation, secondaryAnimation, child) {
return FadeTransition(
opacity: animation,
child: SlideTransition(
position: Tween<Offset>(
begin: const Offset(0.05, 0),
end: Offset.zero,
).animate(animation),
child: child,
),
);
},
transitionDuration: const Duration(milliseconds: 300),
),
);
},
transitionDuration:
const Duration(
milliseconds:
300),
child: Center(
child: Text(
'View Details',
style: TextStyle(
fontSize: 14,
fontWeight: FontWeight.w600,
color: primaryColor,
letterSpacing: 0.2,
),
),
),
),
);
},
child: const Text(
"View Details",
style: TextStyle(
fontSize: 12,
color: Colors.white),
),
),
),
],