Files
driver_tripz/lib/views/notification/available_rides_page.dart
Hamza-Ayed 9b0caf3bed 10/10/1
2024-10-10 16:22:30 +03:00

135 lines
4.0 KiB
Dart

import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/notification/ride_available_controller.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class AvailableRidesPage extends StatelessWidget {
const AvailableRidesPage({super.key});
@override
Widget build(BuildContext context) {
Get.put(RideAvailableController());
return GetBuilder<RideAvailableController>(
builder: (rideAvailableController) {
return MyScafolld(
title: 'Available for rides'.tr,
body: [
rideAvailableController.isLoading
? const MyCircularProgressIndicator()
: ListView.builder(
itemCount: rideAvailableController
.rideAvailableMap['message'].length,
itemBuilder: (context, index) => RideAvailableCard(
rideInfo: rideAvailableController
.rideAvailableMap['message'][index],
),
)
],
isleading: true);
});
}
}
class RideAvailableCard extends StatelessWidget {
final Map<String, dynamic> rideInfo;
const RideAvailableCard({Key? key, required this.rideInfo}) : super(key: key);
@override
Widget build(BuildContext context) {
return Card(
margin: const EdgeInsets.all(8.0),
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)),
elevation: 4,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// _buildLocationRow('🟢', rideInfo['startName']),
// const SizedBox(height: 8),
// _buildLocationRow('🔴', rideInfo['endName']),
_buildLocationRow('', rideInfo['startName'], AppColor.greenColor),
const SizedBox(height: 8),
_buildLocationRow('', rideInfo['endName'], Colors.red),
const SizedBox(height: 16),
_buildInfoRow(),
const SizedBox(height: 16),
_buildActionRow(),
],
),
),
);
}
Widget _buildLocationRow(String icon, String location, Color iconColor) {
return Row(
children: [
Text(
icon,
style: TextStyle(
fontSize: 20, fontWeight: FontWeight.bold, color: iconColor),
),
const SizedBox(width: 8),
Expanded(
child: Text(
location,
style: AppStyle.subtitle,
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
),
],
);
}
Widget _buildInfoRow() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('${'Price:'.tr} ${rideInfo['price']} \$', style: AppStyle.title),
Text(
rideInfo['carType'],
style: AppStyle.title.copyWith(color: AppColor.greenColor),
),
],
);
}
Widget _buildActionRow() {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('📈 ${rideInfo['passengerRate']}', style: AppStyle.title),
const SizedBox(height: 4),
Text(
'📍 ${rideInfo['distance']} ${'KM'.tr}',
style: AppStyle.title.copyWith(color: AppColor.greenColor),
),
],
),
ElevatedButton(
onPressed: () => _acceptRide(),
style: ElevatedButton.styleFrom(
backgroundColor: AppColor.greenColor,
shape:
RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
),
child: Text('Accept'.tr),
),
],
);
}
void _acceptRide() async {
// Your existing accept ride logic here
// ...
}
}