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: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}); @override Widget build(BuildContext context) { Get.put(RideAvailableController()); return GetBuilder( builder: (rideAvailableController) { return MyScafolld( title: 'Available for rides'.tr, body: [ rideAvailableController.isLoading ? const MyCircularProgressIndicator() : 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), }); // .then((value) { // var json = jsonDecode(res); if (res == "failure") { Get.defaultDialog( title: "This ride is already taken by another driver." .tr, middleText: '', titleStyle: AppStyle.title, middleTextStyle: AppStyle.title, confirm: MyElevatedButton( title: 'Ok'.tr, onPressed: () { Get.back(); // Get.back(); // Get.back(); })); } else if (jsonDecode(res)['status'] == "success") { List 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' }); await CRUD().post( link: AppLink.updateRides, 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), ), ], ) ], ), ), ); }) ], isleading: true); }); } }