This commit is contained in:
Hamza-Ayed
2024-01-23 00:43:45 +03:00
parent ec7f2de651
commit 8aaca3630d
11 changed files with 125 additions and 71 deletions

View File

@@ -53,10 +53,10 @@ android {
applicationId "com.mobileapp.store.ride" applicationId "com.mobileapp.store.ride"
// You can update the following values to match your application needs. // You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 23 minSdkVersion 26
targetSdkVersion flutter.targetSdkVersion targetSdkVersion flutter.targetSdkVersion
versionCode 15 versionCode 16
versionName '1.3.9' versionName '1.4.0'
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml'] // manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
} }

View File

@@ -17,6 +17,7 @@
</intent-filter> </intent-filter>
</activity> </activity>
<meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/api_key"/> <meta-data android:name="com.google.android.geo.API_KEY" android:value="@string/api_key"/>
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id"/>
<meta-data android:name="com.android.application.versionCode" android:value="1"/> <meta-data android:name="com.android.application.versionCode" android:value="1"/>
<!-- Don't delete the meta-data below. <!-- Don't delete the meta-data below.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1,5 +1,6 @@
<resources> <resources>
<string name="app_name">My App</string> <string name="app_name">My App</string>
<string name="default_notification_channel_id">ride_channel</string> <!-- <string name="default_notification_channel_id">ride_channel</string> -->
<string name="default_notification_channel_id">default_channel</string>
<string name="api_key">AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0</string> <string name="api_key">AIzaSyCyfwRXTwSTLOFQSQgN5p7QZgGJVZnEKq0</string>
</resources> </resources>

View File

@@ -2,8 +2,10 @@ import 'dart:convert';
import 'dart:io'; import 'dart:io';
import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_local_notifications/flutter_local_notifications.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
import 'package:ride/views/widgets/elevated_btn.dart';
import '../../constant/api_key.dart'; import '../../constant/api_key.dart';
import '../../constant/box_name.dart'; import '../../constant/box_name.dart';
@@ -11,6 +13,7 @@ import '../../constant/colors.dart';
import '../../constant/links.dart'; import '../../constant/links.dart';
import '../../constant/style.dart'; import '../../constant/style.dart';
import '../../main.dart'; import '../../main.dart';
import '../../views/home/Captin/home_captain/home_captin.dart';
import '../../views/home/profile/promos_passenger_page.dart'; import '../../views/home/profile/promos_passenger_page.dart';
import '../../views/home/Captin/orderCaptin/order_request_page.dart'; import '../../views/home/Captin/orderCaptin/order_request_page.dart';
@@ -160,6 +163,15 @@ class FirebaseMessagesController extends GetxController {
); );
} else if (message.notification!.title!.contains('Promo')) { } else if (message.notification!.title!.contains('Promo')) {
Get.to(const PromosPassengerPage()); Get.to(const PromosPassengerPage());
} else if (message.notification!.title == 'Cancel Trip') {
Get.defaultDialog(
title: 'Passenger Cancel Trip'.tr,
middleText: '',
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () {
Get.offAll(HomeCaptain());
}));
} else if (message.notification!.title! } else if (message.notification!.title!
.contains('DriverIsGoingToPassenger')) { .contains('DriverIsGoingToPassenger')) {
Get.snackbar('Driver is Going To Passenger', '', Get.snackbar('Driver is Going To Passenger', '',
@@ -201,7 +213,9 @@ class FirebaseMessagesController extends GetxController {
'notification': <String, dynamic>{ 'notification': <String, dynamic>{
'title': title, 'title': title,
'body': body, 'body': body,
'sound': 'assets/notify.mp3' 'sound': Platform.isAndroid
? 'android/app/src/main/res/raw/tone1.mp3'
: 'tone2.wav'
}, },
'priority': 'high', 'priority': 'high',
'data': <String, dynamic>{ 'data': <String, dynamic>{
@@ -259,7 +273,9 @@ class FirebaseMessagesController extends GetxController {
'notification': <String, dynamic>{ 'notification': <String, dynamic>{
'title': title, 'title': title,
'body': body, 'body': body,
'sound': 'assets/notify.mp3' 'sound': Platform.isAndroid
? 'android/app/src/main/res/raw/tone1.mp3'
: 'tone2.wav'
}, },
'data': { 'data': {
'passengerList': map, 'passengerList': map,
@@ -296,7 +312,7 @@ class FirebaseMessagesController extends GetxController {
'notification': <String, dynamic>{ 'notification': <String, dynamic>{
'title': title, 'title': title,
'body': body, 'body': body,
'sound': 'assets/notify.mp3' 'sound': Platform.isAndroid ? 'tone2' : 'tone2.wav'
}, },
'data': <String, dynamic>{ 'data': <String, dynamic>{
'click_action': 'FLUTTER_NOTIFICATION_CLICK', 'click_action': 'FLUTTER_NOTIFICATION_CLICK',
@@ -335,7 +351,10 @@ class FirebaseMessagesController extends GetxController {
'notification': <String, dynamic>{ 'notification': <String, dynamic>{
'title': title, 'title': title,
'body': body, 'body': body,
'sound': 'assets/notify.mp3' // 'sound': 'tone2.wav',
'sound': Platform.isAndroid
? 'android/app/src/main/res/raw/tone1.mp3'
: 'tone2.wav'
}, },
'data': { 'data': {
'DriverList': data, 'DriverList': data,

View File

@@ -6,6 +6,8 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart'; import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_polyline_algorithm/google_polyline_algorithm.dart'; import 'package:google_polyline_algorithm/google_polyline_algorithm.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
import '../../../constant/api_key.dart'; import '../../../constant/api_key.dart';
import '../../../constant/box_name.dart'; import '../../../constant/box_name.dart';
@@ -72,6 +74,7 @@ class MapDriverController extends GetxController {
late Timer timer; late Timer timer;
String? mapAPIKEY; String? mapAPIKEY;
final zones = <Zone>[]; final zones = <Zone>[];
String canelString = 'yet';
void onMapCreated(GoogleMapController controller) async { void onMapCreated(GoogleMapController controller) async {
myLocation = Get.find<LocationController>().location as LatLng; myLocation = Get.find<LocationController>().location as LatLng;
@@ -257,7 +260,6 @@ class MapDriverController extends GetxController {
tokenPassenger); tokenPassenger);
} }
String canelString = '';
void cancelCheckRidefromPassenger() async { void cancelCheckRidefromPassenger() async {
var res = await CRUD().get(link: AppLink.getOrderCancelStatus, payload: { var res = await CRUD().get(link: AppLink.getOrderCancelStatus, payload: {
'order_id': rideId, 'order_id': rideId,
@@ -265,10 +267,9 @@ class MapDriverController extends GetxController {
print('Cancel fetch--------------------'); print('Cancel fetch--------------------');
var response = jsonDecode(res); var response = jsonDecode(res);
canelString = response['data']['status']; canelString = response['data']['status'];
print('cancel is $canelString');
update(); update();
if (response['data']['status'].toString() == 'Cancel') { if (canelString == 'Cancel') {
Get.snackbar('Order Cancelled'.tr, 'Order Cancelled by Passenger'.tr,
backgroundColor: AppColor.redColor);
remainingTimeTimerRideBegin = 0; remainingTimeTimerRideBegin = 0;
remainingTimeToShowPassengerInfoWindowFromDriver = 0; remainingTimeToShowPassengerInfoWindowFromDriver = 0;
remainingTimeToPassenger = 0; remainingTimeToPassenger = 0;
@@ -277,6 +278,18 @@ class MapDriverController extends GetxController {
isPassengerInfoWindow = false; isPassengerInfoWindow = false;
clearPolyline(); clearPolyline();
update(); update();
Get.defaultDialog(
title: 'Order Cancelled'.tr,
titleStyle: AppStyle.title,
middleText: 'Order Cancelled by Passenger'.tr,
middleTextStyle: AppStyle.title,
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () {
Get.offAll(HomeCaptain());
},
),
);
} }
} }

View File

@@ -110,6 +110,7 @@ class MapPassengerController extends GetxController {
bool isPaymentMethodPageShown = false; bool isPaymentMethodPageShown = false;
bool isRideFinished = false; bool isRideFinished = false;
bool rideConfirm = false; bool rideConfirm = false;
bool isMarkersShown = false;
bool isMainBottomMenuMap = true; bool isMainBottomMenuMap = true;
bool isWayPointSheet = false; bool isWayPointSheet = false;
bool isWayPointStopsSheet = false; bool isWayPointStopsSheet = false;
@@ -869,6 +870,13 @@ class MapPassengerController extends GetxController {
// clearPolylineAll(); // clearPolylineAll();
data = []; data = [];
changeCancelRidePageShow(); changeCancelRidePageShow();
if (rideId != '') {
await CRUD().post(link: AppLink.updateDriverOrder, payload: {
"order_id": rideId.toString(), // Convert to String
"status": 'Cancel'
});
}
rideConfirm = false; rideConfirm = false;
shouldFetch = false; shouldFetch = false;
isCashConfirmPageShown = false; isCashConfirmPageShown = false;
@@ -886,6 +894,8 @@ class MapPassengerController extends GetxController {
"order_id": rideId.toString(), // Convert to String "order_id": rideId.toString(), // Convert to String
"status": 'Cancel' "status": 'Cancel'
}); });
FirebaseMessagesController().sendNotificationToDriverMAP(
'Cancel Trip', 'Trip Cancelled'.tr, driverToken, []);
isPickerShown = false; isPickerShown = false;
rideConfirm = false; rideConfirm = false;
shouldFetch = false; shouldFetch = false;
@@ -1079,27 +1089,17 @@ class MapPassengerController extends GetxController {
polylineCoordinatesPointsAll[2].clear(); polylineCoordinatesPointsAll[2].clear();
polylineCoordinatesPointsAll[3].clear(); polylineCoordinatesPointsAll[3].clear();
polylineCoordinatesPointsAll[4].clear(); polylineCoordinatesPointsAll[4].clear();
isMarkersShown = false;
update(); update();
} }
// void clearPolylineAll() {
// polylineCoordinatesPointsAll[0].clear();
// polylineCoordinatesPointsAll[1].clear();
// polylineCoordinatesPointsAll[2].clear();
// polylineCoordinatesPointsAll[3].clear();
// polylineCoordinatesPointsAll[4].clear();
// polyLines = [];
// polylineCoordinates.clear();
// update();
// }
void addCustomPicker() { void addCustomPicker() {
ImageConfiguration config = const ImageConfiguration( ImageConfiguration config = ImageConfiguration(
size: Size(20, 20), size: const Size(30, 30), devicePixelRatio: Get.pixelRatio
// scale: 1.0, // scale: 1.0,
); );
BitmapDescriptor.fromAssetImage(config, 'assets/images/picker.png') BitmapDescriptor.fromAssetImage(config, 'assets/images/picker.png',
mipmaps: false)
.then((value) { .then((value) {
markerIcon = value; markerIcon = value;
update(); update();
@@ -1109,9 +1109,8 @@ class MapPassengerController extends GetxController {
void addCustomStartIcon() async { void addCustomStartIcon() async {
// Create the marker with the resized image // Create the marker with the resized image
ImageConfiguration config = const ImageConfiguration( ImageConfiguration config = ImageConfiguration(
size: Size(20, 20), size: const Size(30, 30), devicePixelRatio: Get.pixelRatio);
);
BitmapDescriptor.fromAssetImage(config, 'assets/images/A.png', BitmapDescriptor.fromAssetImage(config, 'assets/images/A.png',
mipmaps: false) mipmaps: false)
.then((value) { .then((value) {
@@ -1122,9 +1121,9 @@ class MapPassengerController extends GetxController {
void addCustomEndIcon() { void addCustomEndIcon() {
ImageConfiguration config = ImageConfiguration( ImageConfiguration config = ImageConfiguration(
size: Size(Get.width * .6, Get.height * .6), size: const Size(30, 30), devicePixelRatio: Get.pixelRatio);
); BitmapDescriptor.fromAssetImage(config, 'assets/images/b.png',
BitmapDescriptor.fromAssetImage(config, 'assets/images/b.png') mipmaps: false)
.then((value) { .then((value) {
endIcon = value; endIcon = value;
update(); update();
@@ -1132,12 +1131,14 @@ class MapPassengerController extends GetxController {
} }
void addCustomCarIcon() { void addCustomCarIcon() {
ImageConfiguration config = const ImageConfiguration( ImageConfiguration config = ImageConfiguration(
// size: Size(Get.width * .6, Get.height * .6), // size: Size(Get.width * .6, Get.height * .6),
size: Size(20, 20), size: const Size(30, 30),
devicePixelRatio: Get.pixelRatio
// scale: 1.0, // scale: 1.0,
); );
BitmapDescriptor.fromAssetImage(config, 'assets/images/car.png') BitmapDescriptor.fromAssetImage(config, 'assets/images/car.png',
mipmaps: false)
.then((value) { .then((value) {
carIcon = value; carIcon = value;
update(); update();
@@ -1428,6 +1429,7 @@ class MapPassengerController extends GetxController {
polyLines.add(polyline); polyLines.add(polyline);
rideConfirm = false; rideConfirm = false;
isMarkersShown = true;
update(); update();
} }
} }
@@ -1501,6 +1503,7 @@ class MapPassengerController extends GetxController {
polyLines.add(polyline); polyLines.add(polyline);
rideConfirm = false; rideConfirm = false;
isMarkersShown = true;
update(); update();
} }
} }

View File

@@ -148,6 +148,7 @@ class GoogleMapPassengerWidget extends StatelessWidget {
position: carLocation, position: carLocation,
icon: controller.carIcon, icon: controller.carIcon,
markerId: MarkerId(carLocation.toString())), markerId: MarkerId(carLocation.toString())),
if (controller.isMarkersShown)
Marker( Marker(
markerId: MarkerId('MyLocation'.tr), markerId: MarkerId('MyLocation'.tr),
position: controller.newStartPointLocation, position: controller.newStartPointLocation,
@@ -164,6 +165,7 @@ class GoogleMapPassengerWidget extends StatelessWidget {
}, },
// infoWindow: InfoWindow(title: 'my location'.tr), // infoWindow: InfoWindow(title: 'my location'.tr),
), ),
if (controller.isMarkersShown)
Marker( Marker(
markerId: MarkerId('Destination'.tr), markerId: MarkerId('Destination'.tr),
position: controller.newMyLocation, position: controller.newMyLocation,

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
import 'package:ride/constant/box_name.dart'; import 'package:ride/constant/box_name.dart';
import 'package:ride/constant/style.dart'; import 'package:ride/constant/style.dart';
import 'package:ride/controller/firebase/firbase_messge.dart';
import 'package:ride/controller/home/map_passenger_controller.dart'; import 'package:ride/controller/home/map_passenger_controller.dart';
import 'package:ride/main.dart'; import 'package:ride/main.dart';
import 'package:ride/views/home/map_widget.dart/form_search_places.dart'; import 'package:ride/views/home/map_widget.dart/form_search_places.dart';
@@ -272,6 +273,20 @@ class MainBottomMenuMap extends StatelessWidget {
style: AppStyle.title, style: AppStyle.title,
), ),
), ),
IconButton(
onPressed: () {
FirebaseMessagesController()
.sendNotificationToAnyWithoutData(
'title',
'body',
// 'e5IXztYGS1W9zFvv-gmMRL:APA91bF7-fFzksCRXIk0Fm7IfQuhHL0df-vnDW8DNNKa3sWea649j3Obc8PhyJo9UOxKBtrvoJxYcbjclFKpvycAuhG0lv_e4hkavy-LZ6SsAu5J5bYrPz6-0BbyLdLUHoBuOFlNMvmN');
'eoV61-RSFUxLrCa88xaSG2:APA91bFmgGVTVH0mhjGhFqrB2_rMf0l0udBUzEUW-V2XlxtnYeDTnpESYRRCI_tMQnbDqQ3PK7pFMzW0-CZolS-pURSkwbwvnbVtV9VHB2UuOrKG3MYpGFsWfmjUdyRIOe30nx-eVkOu');
},
icon: const Icon(
Icons.add,
color: AppColor.blueColor,
),
),
], ],
) )
], ],