Files
Xpress-rider/lib/views/Dashboard/home/homepage_banner.dart

146 lines
4.9 KiB
Dart

// Active Delivery Banner Widget for Home Page
// ignore_for_file: unused_import
import 'package:flutter/material.dart';
import 'package:nearle/views/helpers/constants/Colorconstants.dart';
import 'package:nearle/views/helpers/constants/Font_constant.dart';
class ActiveDeliveryBanner extends StatelessWidget {
final List<Map<String, dynamic>> activeDeliveries;
final Function(Map<String, dynamic>) onTap;
const ActiveDeliveryBanner({
super.key,
required this.activeDeliveries,
required this.onTap,
});
String _getDeliveryAddress(Map<String, dynamic> delivery) {
final address =
delivery['deliveryaddress'] ??
delivery['DeliveryAddress'] ??
delivery['address'] ??
'';
if (address.toString().length > 40) {
return '${address.toString().substring(0, 40)}...';
}
return address.toString();
}
@override
Widget build(BuildContext context) {
if (activeDeliveries.isEmpty) {
return const SizedBox.shrink();
}
// Show first active delivery (or show count if multiple)
final delivery = activeDeliveries.first;
final count = activeDeliveries.length;
return Container(
margin: const EdgeInsets.all(12),
decoration: BoxDecoration(
color: Colors.green,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.black.withOpacity(0.2),
blurRadius: 8,
offset: const Offset(0, 4),
),
],
),
child: Material(
color: Colors.transparent,
child: InkWell(
onTap: () => onTap(delivery),
borderRadius: BorderRadius.circular(12),
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 14),
child: Row(
children: [
// Active indicator icon
Container(
padding: const EdgeInsets.all(8),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.2),
borderRadius: BorderRadius.circular(8),
),
child: const Icon(
Icons.two_wheeler,
color: Colors.white,
size: 24,
),
),
const SizedBox(width: 12),
// Delivery info
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Row(
children: [
Text(
count > 1
? '$count Active Deliveries'
: 'Active Delivery',
style: TextStyle(
color: Colors.white,
fontSize: 19,
fontWeight: FontWeight.bold,
fontFamily: FontConstants.fontFamily,
),
),
if (count > 1) ...[
const SizedBox(width: 8),
Container(
padding: const EdgeInsets.symmetric(
horizontal: 8,
vertical: 2,
),
decoration: BoxDecoration(
color: Colors.white.withOpacity(0.3),
borderRadius: BorderRadius.circular(12),
),
child: Text(
'$count',
style: const TextStyle(
color: Colors.white,
fontSize: 12,
fontWeight: FontWeight.bold,
),
),
),
],
],
),
const SizedBox(height: 4),
Text(
_getDeliveryAddress(delivery),
style: TextStyle(
color: Colors.white.withOpacity(0.9),
fontSize: 17,
fontFamily: FontConstants.fontFamily,
),
maxLines: 1,
overflow: TextOverflow.ellipsis,
),
],
),
),
// Arrow icon
const Icon(
Icons.arrow_forward_ios,
color: Colors.white,
size: 20,
),
],
),
),
),
),
);
}
}