This commit is contained in:
Hamza-Ayed
2024-10-10 16:22:30 +03:00
parent ebb57a699b
commit 9b0caf3bed
21 changed files with 1142 additions and 630 deletions

View File

@@ -1,23 +1,11 @@
import 'dart:convert';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/controller/notification/ride_available_controller.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import 'package:SEFER/views/widgets/mydialoug.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../constant/box_name.dart';
import '../../constant/links.dart';
import '../../controller/firebase/firbase_messge.dart';
import '../../controller/functions/crud.dart';
import '../../main.dart';
import '../home/Captin/driver_map_page.dart';
class AvailableRidesPage extends StatelessWidget {
const AvailableRidesPage({super.key});
@@ -34,293 +22,113 @@ class AvailableRidesPage extends StatelessWidget {
: ListView.builder(
itemCount: rideAvailableController
.rideAvailableMap['message'].length,
itemBuilder: (BuildContext context, int index) {
var list = rideAvailableController
.rideAvailableMap['message'][index];
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
width: Get.width * .9,
decoration: AppStyle.boxDecoration1,
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'🟢 ',
style: AppStyle.subtitle,
),
SizedBox(
height: Get.height * .06,
width: Get.width * .8,
child: Text(
'${list['startName']}',
style: AppStyle.subtitle,
),
),
],
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Text(
'🔴 ',
style: AppStyle.subtitle,
),
SizedBox(
height: Get.height * .06,
width: Get.width * .8,
child: Text(
'${list['endName']}',
style: AppStyle.subtitle,
),
),
],
),
const SizedBox(height: 4),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Text('${'Price: '.tr}${list['price']} \$'),
const SizedBox(height: 4),
Text(
'${list['carType']}',
style: AppStyle.title
.copyWith(color: AppColor.greenColor),
),
],
),
Row(
mainAxisAlignment:
MainAxisAlignment.spaceAround,
children: [
Text('📈 ${list['passengerRate']}',
style: AppStyle.title),
MyElevatedButton(
title: 'Accept'.tr,
onPressed: () async {
box.write(
BoxName.statusDriverLocation, 'on');
var res = await CRUD().post(
link: AppLink.updateStausFromSpeed,
payload: {
'id': list['id'],
'rideTimeStart':
DateTime.now().toString(),
'status': 'Apply',
'driver_id':
box.read(BoxName.driverID),
});
CRUD().post(
link:
'${AppLink.seferAlexandriaServer}rides/updateStausFromSpeed.php',
payload: {
'id': list['id'],
'rideTimeStart':
DateTime.now().toString(),
'status': 'Apply',
'driver_id':
box.read(BoxName.driverID),
});
CRUD().post(
link:
'${AppLink.seferGizaServer}rides/updateStausFromSpeed.php',
payload: {
'id': list['id'],
'rideTimeStart':
DateTime.now().toString(),
'status': 'Apply',
'driver_id':
box.read(BoxName.driverID),
});
// .then((value) {
// var json = jsonDecode(res);
if (res == "failure") {
MyDialog().getDialog(
"This ride is already taken by another driver."
.tr,
'', () {
CRUD().post(
link: AppLink.deleteAvailableRide,
payload: {'id': list['id']});
CRUD().post(
link:
'${AppLink.endPoint}/ride/notificationCaptain/deleteAvailableRide.php',
payload: {'id': list['id']});
Get.back();
});
} else if (jsonDecode(res)['status'] ==
"success") {
List<String> bodyToPassenger = [
box.read(BoxName.driverID).toString(),
box
.read(BoxName.nameDriver)
.toString(),
box
.read(BoxName.tokenDriver)
.toString(),
];
await CRUD().postFromDialogue(
link: AppLink.addDriverOrder,
payload: {
'driver_id':
box.read(BoxName.driverID),
// box.read(BoxName.driverID).toString(),
'order_id': list['id'],
'status': 'Apply'
});
CRUD().postFromDialogue(
link:
'${AppLink.seferAlexandriaServer}/driver_order/add.php',
payload: {
'driver_id':
box.read(BoxName.driverID),
// box.read(BoxName.driverID).toString(),
'order_id': list['id'],
'status': 'Apply'
});
CRUD().postFromDialogue(
link:
'${AppLink.seferGizaServer}/driver_order/add.php',
payload: {
'driver_id':
box.read(BoxName.driverID),
// box.read(BoxName.driverID).toString(),
'order_id': list['id'],
'status': 'Apply'
});
await CRUD().post(
link: AppLink.updateRides,
payload: {
'id': list['id'],
'DriverIsGoingToPassenger':
DateTime.now().toString(),
'status': 'Applied'
});
CRUD().post(
link:
'${AppLink.seferAlexandriaServer}/rides/update.php',
payload: {
'id': list['id'],
'DriverIsGoingToPassenger':
DateTime.now().toString(),
'status': 'Applied'
});
CRUD().post(
link:
'${AppLink.seferGizaServer}/rides/update.php',
payload: {
'id': list['id'],
'DriverIsGoingToPassenger':
DateTime.now().toString(),
'status': 'Applied'
});
await CRUD().post(
link: AppLink.updateWaitingRide,
payload: {
'id': list['id'],
'status': 'Applied'
});
FirebaseMessagesController()
.sendNotificationToPassengerToken(
'Apply Ride',
'your ride is applied'.tr,
// arguments['DriverList'][9].toString(),
list['passengerToken']
.toString(),
// box.read(BoxName.tokenDriver).toString(),
bodyToPassenger,
'start.wav');
Get.back();
Get.to(() => PassengerLocationMapPage(),
arguments: {
'passengerLocation':
list['start_location']
.toString(),
'passengerDestination':
list['end_location']
.toString(),
'Duration':
list['duration'].toString(),
'totalCost':
list['price'].toString(),
'Distance':
list['distance'].toString(),
'name':
list['first_name'].toString(),
'phone': list['phone'].toString(),
'email': list['email'].toString(),
'WalletChecked':
list['payment_method']
.toString(),
'tokenPassenger':
list['passengerToken']
.toString(),
'direction':
'https://www.google.com/maps/dir/${list['start_location']}/${list['end_location']}/',
'DurationToPassenger':
list['duration'].toString(),
'rideId': list['id'].toString(),
'passengerId':
list['passenger_id']
.toString(),
'driverId': box
.read(BoxName.driverID)
.toString(),
'durationOfRideValue':
list['duration'].toString(),
'paymentAmount':
list['price'].toString(),
'paymentMethod':
'cash'.toString() == //todo fix payment method
'true'
? 'visa'
: 'cash',
'isHaveSteps':
'startEnd'.toString(),
'step0': ''.toString(),
'step1': ''.toString(),
'step2': ''.toString(),
'step3': ''.toString(),
'step4': ''.toString(),
'passengerWalletBurc':
list['bruc'].toString(),
'timeOfOrder':
DateTime.now().toString(),
'totalPassenger':
list['price'].toString(),
'carType':
list['carType'].toString(),
'kazan': Get.find<
HomeCaptainController>()
.kazan
.toString(),
});
}
},
kolor: AppColor.greenColor,
),
Text(
'📍 ${list['distance']} ${'KM'.tr}',
style: AppStyle.title
.copyWith(color: AppColor.greenColor),
),
],
)
],
),
),
);
})
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
// ...
}
}