diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 91d0781..ca67986 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -7,7 +7,10 @@
YOUR_API_KEY
NSLocationWhenInUseUsageDescription
Your location is required to provide relevant information.
-
+ NSCameraUsageDescription
+ Sefer app requires access to your camera in order to scan QR codes and capture images for uploading.
+ NSLocationAlwaysAndWhenInUseUsageDescription
+ Sefer app needs access to your location to provide you with accurate directions and location-based services.
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart
index 25281f3..f37922b 100644
--- a/lib/controller/firebase/firbase_messge.dart
+++ b/lib/controller/firebase/firbase_messge.dart
@@ -9,6 +9,7 @@ import 'package:ride/constant/style.dart';
import 'package:ride/controller/functions/crud.dart';
import 'package:ride/controller/functions/launch.dart';
import 'package:ride/controller/functions/toast.dart';
+import 'package:ride/controller/home/map_page_controller.dart';
import 'package:ride/views/home/profile/promos_passenger_page.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
@@ -101,11 +102,13 @@ class FirebasMessagesController extends GetxController {
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
if (message.data.isNotEmpty) {
if (message.notification!.title!.contains('Order')) {
- var myListString = message.data['myList'];
+ var myListString = message.data['DriverList'];
+ print(myListString);
+ print('9999999999999myListString999999999999999');
var myList = jsonDecode(myListString) as List;
- Get.to(() => const OrderRequestPage(), arguments: {
+ Get.to(() => OrderRequestPage(), arguments: {
'myListString': myListString,
- 'myList': myList,
+ 'DriverList': myList,
'body': message.notification!.body
});
// Get.defaultDialog(
@@ -199,6 +202,25 @@ class FirebasMessagesController extends GetxController {
// )
// ],
// ));
+ } else if (message.notification!.title!.contains('Apply Ride')) {
+ // MapController().rideConfirm = true;
+ var passengerList = message.data['passengerList'];
+ print(passengerList);
+ print('9999999999999my Apply Ride 999999999999999');
+ var myList = jsonDecode(passengerList) as List;
+
+ Get.defaultDialog(
+ barrierDismissible: false,
+ title: message.notification!.title.toString(),
+ content: Row(
+ children: [Text(myList[1].toString())],
+ ),
+ confirm: MyElevatedButton(
+ title: 'Ok',
+ onPressed: () {
+ // MapController().rideConfirm = true;
+ },
+ ));
} else if (message.notification!.title!.contains('Promo')) {
Get.to(const PromosPassengerPage());
}
@@ -381,35 +403,58 @@ class FirebasMessagesController extends GetxController {
// }
// }
- // void sendNotificationDriverId(String title, body, token) async {
- // http
- // .post(Uri.parse('https://fcm.googleapis.com/fcm/send'),
- // headers: {
- // 'Content-Type': 'application/json',
- // 'Authorization': 'key=${AppCredintials.serverAPI}'
- // },
- // body: jsonEncode({
- // 'notification': {
- // 'title': title,
- // 'body': body,
- // 'sound': 'true'
- // },
- // 'priority': 'high',
- // 'data': {
- // 'click_action': 'FLUTTER_NOTIFICATION_CLICK',
- // 'id': '1',
- // 'status': 'done'
- // },
- // 'to': token,
- // }))
- // .whenComplete(() {})
- // .catchError((e) {
- // print('sendNotification() error: $e');
- // });
- // }
+ void sendNotificanToPassengerToken(
+ String title, body, token, List map) async {
+ try {
+ final response = await http.post(
+ Uri.parse('https://fcm.googleapis.com/fcm/send'),
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'key=${AppCredintials.serverAPI}'
+ },
+ body: jsonEncode({
+ 'notification': {
+ 'title': title,
+ 'body': body,
+ 'sound': 'true'
+ },
+ 'data': {
+ 'passengerList': map,
+ },
+ 'priority': 'high',
+ 'to': token,
+ }),
+ );
- void sendNotificationDriverId(String title, body, strin1, strin2, strin3,
- strin4, strin5, strin6, string7, string8, token) async {
+ if (response.statusCode == 200) {
+ // Notification sent successfully
+ print('Notification sent successfully');
+ } else {
+ // Handle error response
+ print(
+ 'Failed to send notification. Status code: ${response.statusCode}');
+ }
+ } catch (e) {
+ // Handle other exceptions
+ print('sendNotification() error: $e');
+ }
+ }
+
+ void sendNotificationToDriverId(
+ String title,
+ body,
+ strin1,
+ strin2,
+ strin3,
+ strin4,
+ strin5,
+ strin6,
+ string7,
+ string8,
+ passengerName,
+ passengertoken,
+ passengerPhone,
+ token) async {
http
.post(Uri.parse('https://fcm.googleapis.com/fcm/send'),
headers: {
@@ -431,7 +476,10 @@ class FirebasMessagesController extends GetxController {
strin5,
strin6,
string7,
- string8
+ string8,
+ passengerName,
+ passengertoken,
+ passengerPhone
]),
},
'priority': 'high',
@@ -442,4 +490,41 @@ class FirebasMessagesController extends GetxController {
print('sendNotification() error: $e');
});
}
+
+ void sendNotificationToDriverMAP(
+ String title, String body, String token, List data) async {
+ try {
+ final response = await http.post(
+ Uri.parse('https://fcm.googleapis.com/fcm/send'),
+ headers: {
+ 'Content-Type': 'application/json',
+ 'Authorization': 'key=${AppCredintials.serverAPI}'
+ },
+ body: jsonEncode({
+ 'notification': {
+ 'title': title,
+ 'body': body,
+ 'sound': 'true'
+ },
+ 'data': {
+ 'DriverList': data,
+ },
+ 'priority': 'high',
+ 'to': token,
+ }),
+ );
+
+ if (response.statusCode == 200) {
+ // Notification sent successfully
+ print('Notification sent successfully');
+ } else {
+ // Handle error response
+ print(
+ 'Failed to send notification. Status code: ${response.statusCode}');
+ }
+ } catch (e) {
+ // Handle other exceptions
+ print('sendNotification() error: $e');
+ }
+ }
}
diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart
index 261cd07..4bddc99 100644
--- a/lib/controller/functions/crud.dart
+++ b/lib/controller/functions/crud.dart
@@ -50,6 +50,7 @@ class CRUD {
},
);
print(response.request);
+ print(payload);
var jsonData = jsonDecode(response.body);
if (response.statusCode == 200) {
diff --git a/lib/controller/functions/locaton_controller.dart b/lib/controller/functions/locaton_controller.dart
index f66799e..b9a114a 100644
--- a/lib/controller/functions/locaton_controller.dart
+++ b/lib/controller/functions/locaton_controller.dart
@@ -31,8 +31,8 @@ class LocationController extends GetxController {
await CRUD().post(link: AppLink.addCarsLocationByPassenger, payload: {
'driver_id': box.read(BoxName.driverID).toString(),
- 'latitude': mylocation!.latitude.toString(),
- 'longitude': mylocation!.longitude.toString(),
+ 'latitude': mylocation.latitude.toString(),
+ 'longitude': mylocation.longitude.toString(),
});
});
}
diff --git a/lib/controller/home/captin/order_request_controller.dart b/lib/controller/home/captin/order_request_controller.dart
new file mode 100644
index 0000000..1a0b139
--- /dev/null
+++ b/lib/controller/home/captin/order_request_controller.dart
@@ -0,0 +1,42 @@
+import 'package:get/get.dart';
+import 'package:ride/constant/links.dart';
+
+import '../../functions/crud.dart';
+
+class TimerController extends GetxController {
+ double progress = 0;
+ int duration = 25;
+ int remainingTime = 0;
+
+ @override
+ void onInit() {
+ startTimer();
+ super.onInit();
+ }
+
+ void startTimer() async {
+ for (int i = 0; i <= duration; i++) {
+ await Future.delayed(const Duration(seconds: 1));
+ progress = i / duration;
+ remainingTime = duration - i;
+
+ update();
+ }
+ timerEnded();
+ }
+
+ void refuseOrder(String driverID, orderID) async {
+ await CRUD().postFromDialogue(link: AppLink.addDriverOrder, payload: {
+ 'driver_id': driverID,
+ // box.read(BoxName.driverID).toString(),
+ 'order_id': orderID,
+ 'status': 'Refused'
+ });
+ Get.back();
+ }
+
+ void timerEnded() async {
+ print('Timer ended');
+ // refuseOrder();
+ }
+}
diff --git a/lib/controller/home/map_page_controller.dart b/lib/controller/home/map_page_controller.dart
index 8275abe..6470239 100644
--- a/lib/controller/home/map_page_controller.dart
+++ b/lib/controller/home/map_page_controller.dart
@@ -126,12 +126,12 @@ class MapController extends GetxController {
}
changeConfirmRide() async {
- rideConfirm = true;
- print('rideConfirm= $rideConfirm');
-
+ // rideConfirm = true;
+ // update();
+ // print('rideConfirm= $rideConfirm');
+ await getCarsLocationByPassenger();
await CRUD().post(link: AppLink.addRides, payload: {
"start_location": '${data[0]['start_address']}',
-
// '${data[0]["start_location"]['lat']},${data[0]["start_location"]['lng']}',
"end_location": '${data[0]['end_address']}',
// '${data[0]["end_location"]['lat']},${data[0]["end_location"]['lng']}',
@@ -147,6 +147,7 @@ class MapController extends GetxController {
"distance": distance.toString()
}).then((value) {
// print(jsonDecode(value)['message']);
+ // List body = [
List body = [
// '${data[0]['start_address']}',
// '${data[0]['end_address']}',
@@ -157,21 +158,37 @@ class MapController extends GetxController {
duration.toString(),
distance.toString(),
dataCarsLocationByPassenger['message'][0]['id'].toString(),
- box.read(BoxName.pasengerID).toString()
+ box.read(BoxName.pasengerID).toString(),
+ box.read(BoxName.name).toString(),
+ box.read(BoxName.tokenFCM).toString(),
+ box.read(BoxName.phone).toString(),
+ duratioByPassenger.toString(),
+ distanceByPassenger.toString(),
];
- FirebasMessagesController().sendNotificationDriverId(
+ FirebasMessagesController().sendNotificationToDriverMAP(
'Order',
jsonDecode(value)['message'].toString(),
- body[0],
- body[1],
- body[2],
- body[3],
- body[4],
- body[5],
- body[6],
- body[7],
- box.read(BoxName.tokenFCM).toString(), //TODO change to Driver
+ dataCarsLocationByPassenger['message'][0]['token'].toString(),
+ body,
);
+ // FirebasMessagesController().sendNotificationToDriverId(
+ // 'Order',
+ // jsonDecode(value)['message'].toString(),
+ // body[0],
+ // body[1],
+ // body[2],
+ // body[3],
+ // body[4],
+ // body[5],
+ // body[6],
+ // body[7],
+ // body[8],
+ // body[9],
+ // body[10],
+ // dataCarsLocationByPassenger['message'][0]['token'].toString(),
+ // );
+ print(dataCarsLocationByPassenger);
+ print(dataCarsLocationByPassenger['message'][0]['token'].toString());
});
update();
@@ -372,7 +389,7 @@ class MapController extends GetxController {
LatLngBounds calculateBounds(
double centerLat, double centerLng, double radius) {
- double radius = 2000; // 10 km in meters
+ double radius = 4000; // 10 km in meters
southwest = LatLng(
centerLat - (radius / 111000),
@@ -449,6 +466,7 @@ class MapController extends GetxController {
}
String duratioByPassenger = '';
+ String distanceByPassenger = '';
void getNearestDriverByPassengerLocation() async {
if (polylines.isEmpty || data.isEmpty) {
double nearestDistance = double.infinity;
@@ -471,7 +489,7 @@ class MapController extends GetxController {
// longitude: double.parse(carLocation['longitude']),
// );
// }
- isloading = true;
+ // isloading = true;
update();
// Make API request to get exact distance and duration
String apiUrl =
@@ -481,6 +499,8 @@ class MapController extends GetxController {
var data = response;
// Extract distance and duration from the response and handle accordingly
int distance1 = data['rows'][0]['elements'][0]['distance']['value'];
+ distanceByPassenger =
+ data['rows'][0]['elements'][0]['distance']['text'];
duration1 = data['rows'][0]['elements'][0]['duration']['value'];
duratioByPassenger =
data['rows'][0]['elements'][0]['duration']['text'];
@@ -495,7 +515,7 @@ class MapController extends GetxController {
latitude: double.parse(carLocation['latitude']),
longitude: double.parse(carLocation['longitude']),
);
- isloading = false;
+ // isloading = false;
update();
}
}
diff --git a/lib/main.dart b/lib/main.dart
index d3f5b16..d2daca2 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -76,7 +76,7 @@ class MyApp extends StatelessWidget {
: box.read(BoxName.email) != null
? const MapPage()
: box.read(BoxName.emailDriver) == null
- ? LoginCaptin()
+ ? LoginPage()
: const HomeCaptin());
}
}
diff --git a/lib/views/home/map_page.dart b/lib/views/home/map_page.dart
index 26ca2b4..1b6a1b7 100644
--- a/lib/views/home/map_page.dart
+++ b/lib/views/home/map_page.dart
@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:ride/constant/colors.dart';
+import 'package:ride/constant/style.dart';
import 'package:ride/controller/home/map_page_controller.dart';
import 'package:ride/views/home/map_widget.dart/cancel_raide_page.dart';
import 'package:ride/views/widgets/mycircular.dart';
@@ -53,204 +54,234 @@ class MapPage extends StatelessWidget {
// ),
// ),
- body: Stack(
- children: [
- GetBuilder(
- builder: (controller) => controller.isloading
- ? const MyCircularProgressIndicator()
- : GoogleMap(
- onMapCreated: controller.onMapCreated,
- cameraTargetBounds:
- CameraTargetBounds(controller.boundsdata),
- minMaxZoomPreference: const MinMaxZoomPreference(6, 18),
- onLongPress: (argument) {
- Get.defaultDialog(
- title: 'Are you want to go to this site'.tr,
- content: Column(
- children: [
- Text('${argument.latitude},${argument.longitude}'),
- ],
- ),
- onConfirm: () async {
- controller.clearpolyline();
- await controller.getMap(
- '${controller.mylocation.latitude},${controller.mylocation.longitude}',
- '${argument.latitude.toString()},${argument.longitude.toString()}');
+ body: SafeArea(
+ child: Stack(
+ children: [
+ GetBuilder(
+ builder: (controller) => controller.isloading
+ ? const MyCircularProgressIndicator()
+ : GoogleMap(
+ onMapCreated: controller.onMapCreated,
+ cameraTargetBounds:
+ CameraTargetBounds(controller.boundsdata),
+ minMaxZoomPreference: const MinMaxZoomPreference(6, 18),
+ onLongPress: (argument) {
+ Get.defaultDialog(
+ title: 'Are you want to go to this site'.tr,
+ content: Column(
+ children: [
+ Text(
+ '${argument.latitude},${argument.longitude}'),
+ ],
+ ),
+ onConfirm: () async {
+ controller.clearpolyline();
+ await controller.getMap(
+ '${controller.mylocation.latitude},${controller.mylocation.longitude}',
+ '${argument.latitude.toString()},${argument.longitude.toString()}');
- Get.back();
- controller.bottomSheet();
- controller.showBottomSheet1();
- //
- },
- );
- },
+ Get.back();
+ controller.bottomSheet();
+ controller.showBottomSheet1();
+ //
+ },
+ );
+ },
- onTap: (argument) {
- controller.hidePlaces();
+ onTap: (argument) {
+ controller.hidePlaces();
- controller.changeButtomSheetShown();
- // controller.bottomSheet();
- },
- initialCameraPosition: CameraPosition(
- target: controller.mylocation,
- zoom: 15,
- ),
- markers: {
- for (var carLocation
- in controller.carsLocationByPassenger)
+ controller.changeButtomSheetShown();
+ // controller.bottomSheet();
+ },
+ initialCameraPosition: CameraPosition(
+ target: controller.mylocation,
+ zoom: 15,
+ ),
+ markers: {
+ for (var carLocation
+ in controller.carsLocationByPassenger)
+ Marker(
+ // anchor: const Offset(4, 4),
+ position: carLocation,
+ icon: controller.carIcon,
+ markerId: MarkerId(carLocation.toString())),
Marker(
- // anchor: const Offset(4, 4),
- position: carLocation,
- icon: controller.carIcon,
- markerId: MarkerId(carLocation.toString())),
- Marker(
- markerId: MarkerId('MyLocation'.tr),
- position: controller.mylocation,
- draggable: true,
- icon: controller.markerIcon,
- onDragEnd: (value) {
- print(value);
- },
- infoWindow: InfoWindow(title: 'my location'.tr),
- ),
- Marker(
- markerId: MarkerId('Target'.tr),
- position: controller.mydestination,
- draggable: true,
- onDragEnd: (v) {
- print(v);
- },
- ),
- },
- polylines: {
- Polyline(
- zIndex: 2,
- consumeTapEvents: true,
- geodesic: true,
- endCap: Cap.buttCap,
- startCap: Cap.buttCap,
- visible: true,
- polylineId: const PolylineId('route'),
- points: controller.polylineCoordinates,
- color: AppColor.primaryColor,
- width: 5,
- ),
- // Polyline(
- // zIndex: 2,
- // consumeTapEvents: true,
- // geodesic: true,
- // endCap: Cap.buttCap,
- // startCap: Cap.buttCap,
- // visible: true,
- // polylineId: PolylineId('g'),
- // points: [
- // LatLng(controller.southwest.latitude,
- // controller.southwest.longitude),
- // LatLng(controller.northeast.latitude,
- // controller.northeast.longitude)
- // ],
- // color: AppColor.primaryColor,
- // width: 5,
- // ),
- },
- // circles: {
- // Circle(
- // circleId: const CircleId('kk'),
- // center: controller.mylocation,
- // radius: 60,
- // fillColor: AppColor.primaryColor,)
- // },
- mapType:
- controller.mapType ? MapType.satellite : MapType.normal,
- myLocationButtonEnabled: true,
- // liteModeEnabled: true, tiltGesturesEnabled: false,
+ markerId: MarkerId('MyLocation'.tr),
+ position: controller.mylocation,
+ draggable: true,
+ icon: controller.markerIcon,
+ onDragEnd: (value) {
+ print(value);
+ },
+ infoWindow: InfoWindow(title: 'my location'.tr),
+ ),
+ Marker(
+ markerId: MarkerId('Target'.tr),
+ position: controller.mydestination,
+ draggable: true,
+ onDragEnd: (v) {
+ print(v);
+ },
+ ),
+ },
+ polylines: {
+ Polyline(
+ zIndex: 2,
+ consumeTapEvents: true,
+ geodesic: true,
+ endCap: Cap.buttCap,
+ startCap: Cap.buttCap,
+ visible: true,
+ polylineId: const PolylineId('route'),
+ points: controller.polylineCoordinates,
+ color: AppColor.primaryColor,
+ width: 5,
+ ),
+ // Polyline(
+ // zIndex: 2,
+ // consumeTapEvents: true,
+ // geodesic: true,
+ // endCap: Cap.buttCap,
+ // startCap: Cap.buttCap,
+ // visible: true,
+ // polylineId: PolylineId('g'),
+ // points: [
+ // LatLng(controller.southwest.latitude,
+ // controller.southwest.longitude),
+ // LatLng(controller.northeast.latitude,
+ // controller.northeast.longitude)
+ // ],
+ // color: AppColor.primaryColor,
+ // width: 5,
+ // ),
+ },
+ // circles: {
+ // Circle(
+ // circleId: const CircleId('kk'),
+ // center: controller.mylocation,
+ // radius: 60,
+ // fillColor: AppColor.primaryColor,)
+ // },
+ mapType: controller.mapType
+ ? MapType.satellite
+ : MapType.normal,
+ myLocationButtonEnabled: true,
+ // liteModeEnabled: true, tiltGesturesEnabled: false,
- // indoorViewEnabled: true,
- trafficEnabled: controller.mapTraficON,
- buildingsEnabled: true,
- mapToolbarEnabled: true,
- onCameraMove: (position) {
- controller.newMylocation = position.target;
- // print('my' + controller.mylocation.toString());
- // print('new' + controller.newMylocation.toString());
- },
- myLocationEnabled: true,
- // liteModeEnabled: true,
- ),
- ),
- GetBuilder(
- builder: (controller) => Positioned(
- top: 85,
- left: 6,
- child: Column(
- children: [
- AnimatedContainer(
- duration: const Duration(microseconds: 200),
- width: controller.widthMapTypeAndTrafic,
- decoration: BoxDecoration(
- border: Border.all(),
- color: AppColor.secondaryColor,
- borderRadius: BorderRadius.circular(15)),
- child: IconButton(
- onPressed: () {
- controller.changeMapType();
- // Toast.show(context, 'This is a toast message!');
- },
- icon: const Icon(
- Icons.satellite_alt,
- size: 29,
+ // indoorViewEnabled: true,
+ trafficEnabled: controller.mapTraficON,
+ buildingsEnabled: true,
+ mapToolbarEnabled: true,
+ onCameraMove: (position) {
+ controller.newMylocation = position.target;
+ // print('my' + controller.mylocation.toString());
+ // print('new' + controller.newMylocation.toString());
+ },
+ myLocationEnabled: true,
+ // liteModeEnabled: true,
+ ),
+ ),
+ GetBuilder(
+ builder: (controller) => Positioned(
+ top: 85,
+ left: 6,
+ child: Column(
+ children: [
+ AnimatedContainer(
+ duration: const Duration(microseconds: 200),
+ width: controller.widthMapTypeAndTrafic,
+ decoration: BoxDecoration(
+ border: Border.all(),
+ color: AppColor.secondaryColor,
+ borderRadius: BorderRadius.circular(15)),
+ child: IconButton(
+ onPressed: () {
+ controller.changeMapType();
+ // Toast.show(context, 'This is a toast message!');
+ },
+ icon: const Icon(
+ Icons.satellite_alt,
+ size: 29,
+ ),
),
),
- ),
- const SizedBox(
- height: 5,
- ),
- AnimatedContainer(
- duration: const Duration(microseconds: 200),
- width: controller.widthMapTypeAndTrafic,
- decoration: BoxDecoration(
- color: AppColor.secondaryColor,
- border: Border.all(),
- borderRadius: BorderRadius.circular(15)),
- child: IconButton(
- onPressed: () {
- controller.changeMapTraffic();
- // Toast.show(context, 'This is a toast message!');
- },
- icon: const Icon(
- Icons.streetview_sharp,
- size: 29,
+ const SizedBox(
+ height: 5,
+ ),
+ AnimatedContainer(
+ duration: const Duration(microseconds: 200),
+ width: controller.widthMapTypeAndTrafic,
+ decoration: BoxDecoration(
+ color: AppColor.secondaryColor,
+ border: Border.all(),
+ borderRadius: BorderRadius.circular(15)),
+ child: IconButton(
+ onPressed: () {
+ controller.changeMapTraffic();
+ // Toast.show(context, 'This is a toast message!');
+ },
+ icon: const Icon(
+ Icons.streetview_sharp,
+ size: 29,
+ ),
),
),
- ),
- ],
- )),
- ),
- const PickerIconOnMap(),
- // PickerAnimtionContainerFormPlaces(),
- const MainBottomMenuMap(),
- const MapMenuWidget(),
- const MenuIconMapPageWidget(),
- buttomSheetMapPage(),
- cancelRidePage(),
- GetBuilder(
- builder: (controller) => controller.data.isNotEmpty
- ? Positioned(
- right: 5,
- top: 55,
- child: GestureDetector(
- onTap: () {
- controller.changeCancelRidePageShow();
- },
- child: const Icon(
- Icons.clear,
- size: 30,
+ ],
+ )),
+ ),
+ const PickerIconOnMap(),
+ // PickerAnimtionContainerFormPlaces(),
+ const MainBottomMenuMap(),
+ const MapMenuWidget(),
+ const MenuIconMapPageWidget(),
+ buttomSheetMapPage(),
+ GetBuilder(
+ builder: ((controller) => controller.rideConfirm
+ ? Positioned(
+ top: Get.height * .2,
+ left: Get.width * .2,
+ right: Get.width * .2,
+ child: AnimatedContainer(
+ duration: const Duration(microseconds: 300),
+ height: 350,
+ width: 200,
+ decoration: BoxDecoration(
+ border: Border.all(),
+ color: AppColor.secondaryColor,
+ borderRadius: BorderRadius.circular(15)),
+ child: Column(
+ crossAxisAlignment: CrossAxisAlignment.center,
+ children: [
+ Text(
+ 'Waiting for Captin ...'.tr,
+ style: AppStyle.title,
+ ),
+ ],
+ ),
),
- ))
- : const SizedBox()),
- const CashConfirmPageShown(),
- const PaymentMethodPage()
- ],
+ )
+ : const SizedBox())),
+ cancelRidePage(),
+ GetBuilder(
+ builder: (controller) => controller.data.isNotEmpty
+ ? Positioned(
+ right: 5,
+ top: 55,
+ child: GestureDetector(
+ onTap: () {
+ controller.changeCancelRidePageShow();
+ },
+ child: const Icon(
+ Icons.clear,
+ size: 30,
+ ),
+ ))
+ : const SizedBox()),
+ const CashConfirmPageShown(),
+ const PaymentMethodPage()
+ ],
+ ),
),
);
}
diff --git a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart
index e860ea6..5ab1689 100644
--- a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart
+++ b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart
@@ -76,12 +76,12 @@ class MainBottomMenuMap extends StatelessWidget {
animatedTexts: [
ScaleAnimatedText(
'${'Where to'.tr} ${box.read(BoxName.name)}'),
- WavyAnimatedText(
- '${'Where to'.tr} ${box.read(BoxName.name)}'),
- FlickerAnimatedText(
- '${'Where to'.tr} ${box.read(BoxName.name)}'),
- WavyAnimatedText(
- '${'Where to'.tr} ${box.read(BoxName.name)}'),
+ // WavyAnimatedText(
+ // '${'Where to'.tr} ${box.read(BoxName.name)}'),
+ // FlickerAnimatedText(
+ // '${'Where to'.tr} ${box.read(BoxName.name)}'),
+ // WavyAnimatedText(
+ // '${'Where to'.tr} ${box.read(BoxName.name)}'),
],
isRepeatingAnimation: true,
onTap: () {
diff --git a/lib/views/orderCaptin/order_request_page.dart b/lib/views/orderCaptin/order_request_page.dart
index 1acfdaa..60d3176 100644
--- a/lib/views/orderCaptin/order_request_page.dart
+++ b/lib/views/orderCaptin/order_request_page.dart
@@ -1,5 +1,8 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
+import 'package:ride/constant/box_name.dart';
+import 'package:ride/controller/firebase/firbase_messge.dart';
+import 'package:ride/main.dart';
import 'package:ride/views/widgets/my_scafold.dart';
import '../../constant/colors.dart';
@@ -7,17 +10,19 @@ import '../../constant/links.dart';
import '../../constant/style.dart';
import '../../controller/functions/crud.dart';
import '../../controller/functions/launch.dart';
+import '../../controller/home/captin/order_request_controller.dart';
import '../widgets/elevated_btn.dart';
class OrderRequestPage extends StatelessWidget {
- const OrderRequestPage({super.key});
-
+ OrderRequestPage({super.key});
+ TimerController timerController = Get.put(TimerController());
@override
Widget build(BuildContext context) {
final arguments = Get.arguments;
final myListString = arguments['myListString'];
- final myList = arguments['myList'];
+ final myList = arguments['DriverList'];
final body = arguments['body'];
+
return MyScafolld(
title: 'Order Request Page',
body: [
@@ -40,34 +45,98 @@ class OrderRequestPage extends StatelessWidget {
Padding(
padding: const EdgeInsets.all(8.0),
- child: Text(
- 'Tatal From Passenger is '.tr +
- double.parse(myList[2]).toStringAsFixed(2),
- style: AppStyle.title,
+ child: RichText(
+ text: TextSpan(
+ text: 'Passenger Name is '.tr,
+ style: AppStyle.title,
+ children: [
+ TextSpan(text: myList[8], style: AppStyle.headtitle2),
+ ],
+ ),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
- child: Text(
- 'Tatal For You is '.tr +
- double.parse(myList[3]).toStringAsFixed(2),
- style: AppStyle.title,
+ child: RichText(
+ text: TextSpan(
+ text: 'Tatal From Passenger is '.tr,
+ style: AppStyle.title,
+ children: [
+ TextSpan(
+ text: double.parse(myList[2]).toStringAsFixed(2),
+ style: AppStyle.headtitle2),
+ ],
+ ),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
- child: Text(
- 'Distance is '.tr + myList[5].toString() + ' KM'.tr,
- style: AppStyle.title,
+ child: RichText(
+ text: TextSpan(
+ text: 'Duration To Passenger is '.tr,
+ style: AppStyle.title,
+ children: [
+ TextSpan(
+ text: myList[11].toString(),
+ style: AppStyle.headtitle2),
+ ],
+ ),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
- child: Text(
- 'Duration of Trip is '.tr +
- myList[4].toString() +
- ' Minutes'.tr,
- style: AppStyle.title,
+ child: RichText(
+ text: TextSpan(
+ text: 'Distance To Passenger is '.tr,
+ style: AppStyle.title,
+ children: [
+ TextSpan(
+ text: myList[12].toString(),
+ style: AppStyle.headtitle2),
+ ],
+ ),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: RichText(
+ text: TextSpan(
+ text: 'Tatal For You is '.tr,
+ style: AppStyle.title,
+ children: [
+ TextSpan(
+ text: double.parse(myList[3]).toStringAsFixed(2),
+ style: AppStyle.headtitle2),
+ ],
+ ),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: RichText(
+ text: TextSpan(
+ text: 'Distance is '.tr,
+ style: AppStyle.title,
+ children: [
+ TextSpan(
+ text: myList[5].toString(),
+ style: AppStyle.headtitle2),
+ TextSpan(text: ' KM'.tr, style: AppStyle.title),
+ ]),
+ ),
+ ),
+ Padding(
+ padding: const EdgeInsets.all(8.0),
+ child: RichText(
+ text: TextSpan(
+ text: 'Duration of Trip is '.tr,
+ style: AppStyle.title,
+ children: [
+ TextSpan(
+ text: myList[4].toString(),
+ style: AppStyle.headtitle2),
+ TextSpan(text: ' Minutes'.tr, style: AppStyle.title),
+ ]),
),
),
Padding(
@@ -86,19 +155,49 @@ class OrderRequestPage extends StatelessWidget {
'order_id': body.toString(),
'status': 'Apply'
});
+ // Get.back();
+ List bodyToPassenger = [
+ box.read(BoxName.driverID).toString(),
+ box.read(BoxName.nameDriver).toString(),
+ box.read(BoxName.tokenDriver).toString(),
+ ];
+ print(bodyToPassenger);
+ FirebasMessagesController()
+ .sendNotificanToPassengerToken(
+ 'Apply Ride',
+ arguments['DriverList'][9].toString(),
+ arguments['DriverList'][9].toString(),
+ // box.read(BoxName.tokenDriver).toString(),
+ bodyToPassenger,
+ );
+ },
+ ),
+ GetBuilder(
+ builder: (timerController) {
+ final isNearEnd = timerController.remainingTime <=
+ 5; // Define a threshold for "near end"
+
+ return Stack(
+ alignment: Alignment.center,
+ children: [
+ CircularProgressIndicator(
+ value: timerController.progress,
+ // Set the color based on the "isNearEnd" condition
+ color: isNearEnd ? Colors.red : Colors.blue,
+ ),
+ Text(
+ '${timerController.remainingTime}',
+ style: AppStyle.number,
+ ),
+ ],
+ );
},
),
MyElevatedButton(
title: 'Refuse Order'.tr,
onPressed: () async {
- await CRUD().postFromDialogue(
- link: AppLink.addDriverOrder,
- payload: {
- 'driver_id': myList[6].toString(),
- // box.read(BoxName.driverID).toString(),
- 'order_id': body.toString(),
- 'status': 'Refused'
- });
+ timerController.refuseOrder(
+ myList[6].toString(), body.toString());
},
kolor: AppColor.redColor,
),