This commit is contained in:
Hamza-Ayed
2023-10-10 02:54:11 +03:00
parent 54e948e93b
commit b61ce6ab2e
25 changed files with 437 additions and 168 deletions

View File

@@ -14,7 +14,7 @@ import '../../../constant/credential.dart';
import '../../../constant/links.dart';
import '../../functions/crud.dart';
class MapDirection extends GetxController {
class MapDriverController extends GetxController {
bool isLoading = true;
List data = [];
LatLngBounds? boundsData;
@@ -34,6 +34,7 @@ class MapDirection extends GetxController {
late String direction;
bool isPassengerInfoWindow = false;
bool isBtnRideBegin = false;
bool isRideFinished = false;
double passengerInfoWindow = Get.height * .32;
double progress = 0;
double progressToPassenger = 0;
@@ -93,7 +94,7 @@ class MapDirection extends GetxController {
update();
}
void changeRideToBegin() {
void changeRideToBeginToPassenger() {
isRideBegin = true;
passengerInfoWindow = Get.height * .22;
update();
@@ -119,6 +120,7 @@ class MapDirection extends GetxController {
}
}
String stringRemainingTimeToPassenger = '';
void startTimerToShowDriverToPassengerDuration() async {
for (int i = 0; i <= int.parse(durationToPassenger); i++) {
await Future.delayed(const Duration(seconds: 1));
@@ -131,19 +133,52 @@ class MapDirection extends GetxController {
}
print(isBtnRideBegin);
print(remainingTimeToPassenger);
int minutes = (remainingTimeToPassenger / 60).floor();
int seconds = remainingTimeToPassenger % 60;
stringRemainingTimeToPassenger =
'$minutes:${seconds.toString().padLeft(2, '0')}';
update();
}
}
beginRideFromDriver() async {
changeRideToBegin();
void driverGoToPassenger() async {
changeRideToBeginToPassenger();
await CRUD().post(link: AppLink.updateRides, payload: {
'id': rideId,
'driverGoToPassengerTime': DateTime.now().toString(),
'status': 'Applied'
});
FirebaseMessagesController().sendNotificationToAnyWithoutData(
'DriverIsGoingToPassenger',
box.read(BoxName.name).toString(),
tokenPassenger);
}
void beginRideFromDriver() async {
changeRideToBeginToPassenger();
isPassengerInfoWindow = false;
isRideFinished = true;
update();
await CRUD().post(link: AppLink.updateRides, payload: {
'id': rideId,
'rideTimeStart': DateTime.now().toString(),
'status': 'Applied'
'status': 'Begin'
});
FirebaseMessagesController().sendNotificationToAnyWithoutData('RideIsBegin',
box.read(BoxName.tokenDriver).toString(), tokenPassenger);
// FirebaseMessagesController().sendNotificationToAnyWithoutData(
// 'RideIsBegin', box.read(BoxName.name).toString(), tokenPassenger);
}
void finishRideFromDriver() async {
// changeRideToBeginToPassenger();
await CRUD().post(link: AppLink.updateRides, payload: {
'id': rideId,
'rideTimeStart': DateTime.now().toString(),
'status': 'Finished'
});
FirebaseMessagesController().sendNotificationToAnyWithoutData(
'isRideFinished', box.read(BoxName.name).toString(), tokenPassenger);
}
void updateMarker() {

View File

@@ -9,6 +9,7 @@ import 'package:location/location.dart';
import 'package:ride/constant/box_name.dart';
import 'package:ride/constant/credential.dart';
import 'package:ride/constant/links.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/controller/firebase/firbase_messge.dart';
import 'package:ride/controller/functions/crud.dart';
import 'package:ride/controller/functions/secure_storage.dart';
@@ -17,7 +18,7 @@ import 'package:ride/views/widgets/elevated_btn.dart';
import '../../main.dart';
import '../../models/model/locations.dart';
class MapController extends GetxController {
class MapPassengerController extends GetxController {
bool isLoading = true;
TextEditingController placeController = TextEditingController();
List data = [];
@@ -50,7 +51,7 @@ class MapController extends GetxController {
bool isCancelRidePageShown = false;
bool isCashConfirmPageShown = false;
bool isPaymentMethodPageShown = false;
bool isRideFinished = false;
bool rideConfirm = false;
bool isMainBottomMenuMap = true;
double heightBottomSheetShown = 0;
@@ -70,10 +71,16 @@ class MapController extends GetxController {
double progress = 0;
double progressTimerToPassengerFromDriverAfterApplied = 0;
int durationTimer = 25;
late int durationToRide;
int remainingTime = 25;
int remainingTimeToPassengerFromDriverAfterApplied = 60;
int timeToPassengerFromDriverAfterApplied = 0;
Timer? timerToPassengerFromDriverAfterApplied;
bool rideTimerBegin = false;
late double progressTimerRideBegin;
int remainingTimeTimerRideBegin = 60;
late String stringRemainingTimeRideBegin;
void onChangedPassengerCount(int newValue) {
selectedPassengerCount = newValue;
update();
@@ -125,6 +132,8 @@ class MapController extends GetxController {
update();
}
String stringRemainingTimeToPassenger = '';
void startTimerToPassengerFromDriverAfterApplied() async {
for (int i = 0; i <= timeToPassengerFromDriverAfterApplied; i++) {
await Future.delayed(const Duration(seconds: 1));
@@ -132,16 +141,81 @@ class MapController extends GetxController {
i / timeToPassengerFromDriverAfterApplied;
remainingTimeToPassengerFromDriverAfterApplied =
timeToPassengerFromDriverAfterApplied - i;
update();
if (remainingTimeToPassengerFromDriverAfterApplied == 0) {
driverArrivePassenger();
if (remainingTimeToPassengerFromDriverAfterApplied < 69) {
if (rideTimerBegin == false) {
getBeginRideFromDriver();
}
}
int minutes =
(remainingTimeToPassengerFromDriverAfterApplied / 60).floor();
int seconds = remainingTimeToPassengerFromDriverAfterApplied % 60;
stringRemainingTimeToPassenger =
'$minutes:${seconds.toString().padLeft(2, '0')}';
update();
}
}
void rideIsBeginPassengerTimer() async {
for (int i = 0; i <= durationToRide; i++) {
await Future.delayed(const Duration(seconds: 1));
progressTimerRideBegin = i / durationToRide;
remainingTimeTimerRideBegin = durationToRide - i;
int minutes = (remainingTimeTimerRideBegin / 60).floor();
int seconds = remainingTimeTimerRideBegin % 60;
stringRemainingTimeRideBegin =
'$minutes:${seconds.toString().padLeft(2, '0')}';
update();
}
rideTimerBegin = false;
isRideFinished = true;
update();
print('rideTimerBegin: $rideTimerBegin');
print('isRideFinished: $isRideFinished');
Get.defaultDialog(
title: 'Ride Is Finished.'.tr,
titleStyle: AppStyle.title,
content: Text(
'Rate the Captain Please?'.tr,
style: AppStyle.title,
),
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () {
Get.back(); //todo make Rate page
},
),
barrierDismissible: false,
);
}
void getBeginRideFromDriver() async {
var res = await CRUD()
.get(link: AppLink.getRideStatusBegin, payload: {'ride_id': rideId});
var decode = jsonDecode(res);
if (decode['data']['status'] == 'Begin') {
timeToPassengerFromDriverAfterApplied = 0;
remainingTime = 0;
remainingTimeToPassengerFromDriverAfterApplied = 0;
// isCancelRidePageShown = true;
rideIsBeginPassengerTimer();
// print('rideTimerBegin: $rideTimerBegin');
rideTimerBegin = true;
update();
}
}
void driverArrivePassenger() {
timeToPassengerFromDriverAfterApplied = 0;
remainingTime = 0;
// isCancelRidePageShown = true;
update();
rideIsBeginPassengerTimer();
}
void cancelTimerToPassengerFromDriverAfterApplied() {
@@ -161,7 +235,7 @@ class MapController extends GetxController {
update();
}
var rideId;
late String rideId;
late String driverToken;
int carsOrder = 0;
changeConfirmRide() async {
@@ -214,6 +288,7 @@ class MapController extends GetxController {
dataCarsLocationByPassenger['message'][carsOrder]['token'].toString(),
duration1.toString(),
rideId,
rideTimerBegin.toString(),
];
FirebaseMessagesController().sendNotificationToDriverMAP(
'Order',
@@ -297,43 +372,48 @@ class MapController extends GetxController {
}
Future getCarsLocationByPassenger() async {
carsLocationByPassenger = [];
LatLngBounds bounds =
calculateBounds(myLocation.latitude, myLocation.longitude, 8000);
print(
'Southwest: ${bounds.southwest.latitude}, ${bounds.southwest.longitude}');
print(
'Northeast: ${bounds.northeast.latitude}, ${bounds.northeast.longitude}');
if (rideConfirm == false) {
carsLocationByPassenger = [];
LatLngBounds bounds =
calculateBounds(myLocation.latitude, myLocation.longitude, 8000);
print(
'Southwest: ${bounds.southwest.latitude}, ${bounds.southwest.longitude}');
print(
'Northeast: ${bounds.northeast.latitude}, ${bounds.northeast.longitude}');
var res =
await CRUD().get(link: AppLink.getCarsLocationByPassenger, payload: {
'southwestLat': southwest.latitude.toString(),
'southwestLon': southwest.longitude.toString(),
'northeastLat': northeast.latitude.toString(),
'northeastLon': northeast.longitude.toString(),
});
if (res == 'failure') {
Get.defaultDialog(
title: 'No Car in your site.Sorry!',
middleText: '',
confirm: MyElevatedButton(
title: 'Back',
onPressed: () {
Get.back();
markerReloadingTimer.cancel();
}));
} else {
dataCarsLocationByPassenger = jsonDecode(res);
// print(dataCarsLocationByPassenger);
var res =
await CRUD().get(link: AppLink.getCarsLocationByPassenger, payload: {
'southwestLat': southwest.latitude.toString(),
'southwestLon': southwest.longitude.toString(),
'northeastLat': northeast.latitude.toString(),
'northeastLon': northeast.longitude.toString(),
});
if (res == 'failure') {
Get.defaultDialog(
title: 'No Car in your site.Sorry!',
middleText: '',
confirm: MyElevatedButton(
title: 'Back',
onPressed: () {
Get.back();
markerReloadingTimer.cancel();
}));
} else {
dataCarsLocationByPassenger = jsonDecode(res);
// print(dataCarsLocationByPassenger);
for (var i = 0; i < dataCarsLocationByPassenger['message'].length; i++) {
carsLocationByPassenger.add(LatLng(
double.parse(dataCarsLocationByPassenger['message'][i]['latitude']),
double.parse(
dataCarsLocationByPassenger['message'][i]['longitude'])));
for (var i = 0;
i < dataCarsLocationByPassenger['message'].length;
i++) {
carsLocationByPassenger.add(LatLng(
double.parse(
dataCarsLocationByPassenger['message'][i]['latitude']),
double.parse(
dataCarsLocationByPassenger['message'][i]['longitude'])));
}
update();
}
update();
}
}
@@ -690,6 +770,7 @@ class MapController extends GetxController {
distanceByPassenger =
data['rows'][0]['elements'][0]['distance']['text'];
duration1 = data['rows'][0]['elements'][0]['duration']['value'];
durationFromDriverToPassenger = Duration(seconds: duration1.toInt());
newTime1 = currentTime.add(durationFromDriverToPassenger);
timeFromDriverToPassenger =
@@ -744,6 +825,7 @@ class MapController extends GetxController {
var response = await CRUD().getGoogleApi(link: url, payload: {});
data = response['routes'][0]['legs'];
print(data);
durationToRide = data[0]['duration']['value'];
final points =
decodePolyline(response["routes"][0]["overview_polyline"]["points"]);
for (int i = 0; i < points.length; i++) {