This commit is contained in:
Hamza Aleghwairyeen
2024-04-22 15:56:13 +03:00
parent b9c9a8a12f
commit f2ed2736dc
6 changed files with 133 additions and 69 deletions

View File

@@ -227,6 +227,26 @@ class FirebaseMessagesController extends GetxController {
} catch (e) {
print('Error navigating to PassengerCallPage: $e');
}
} else if (message.notification!.title! == 'Call Income from Passenger') {
try {
var myListString = message.data['passengerList'];
var driverList = jsonDecode(myListString) as List<dynamic>;
// if (Platform.isAndroid) {
NotificationController().showNotification(
'Call Income'.tr,
message.notification!.body!,
'iphone_ringtone',
);
// }
// Assuming GetMaterialApp is initialized and context is valid for navigation
Get.to(() => CallPage(
// channelName: driverList[1].toString(),
// token: driverList[0].toString(),
// remoteID: driverList[2].toString(),
));
} catch (e) {
print('Error navigating to PassengerCallPage: $e');
}
} else if (message.notification!.title! == 'Call End') {
try {
var myListString = message.data['passengerList'];
@@ -652,15 +672,19 @@ class DriverTipWidget extends StatelessWidget {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// Text(
// '${'Your fee is '.tr}${Get.find<MapPassengerController>().totalPassenger.toStringAsFixed(2)}'),
Text(
'${'Your fee is '.tr}${Get.find<MapPassengerController>().totalPassenger.toStringAsFixed(2)}'),
Text('Do you want to pay Tips for this Driver'.tr),
'Do you want to pay Tips for this Driver'.tr,
textAlign: TextAlign.center,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
InkWell(
onTap: () {
box.write(BoxName.tipPercentage, '0.05');
Toast.show(
context,
'${'Tip is '.tr}${(Get.find<MapPassengerController>().totalPassenger) * (double.parse(box.read(BoxName.tipPercentage.toString())))}',

View File

@@ -0,0 +1,146 @@
import 'package:SEFER/constant/api_key.dart';
import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/controller/home/map_passenger_controller.dart';
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import '../../constant/box_name.dart';
import '../firebase/firbase_messge.dart';
import '../home/captin/map_driver_controller.dart';
import '../../main.dart';
class CallController extends GetxController {
String channelName = ''; // Get.find<MapDriverController>().rideId;
String token = '';
// int uid = int.parse(box.read(BoxName.phoneDriver)); // uid of the local user
int uid = 0;
int? remoteUid; // uid of the remote user
bool _isJoined = false; // Indicates if the local user has joined the channel
String status = '';
late RtcEngine agoraEngine; // Agora engine instance
@override
void onInit() {
super.onInit();
if (box.read(BoxName.passengerID) != null) {
channelName = Get.find<MapPassengerController>().rideId; // 'sefer300'; //
remoteUid = int.parse(Get.find<MapPassengerController>().driverPhone);
uid = int.parse(box.read(BoxName.phone));
} else {
channelName = Get.find<MapDriverController>().rideId; // 'sefer300'; //
remoteUid = int.parse(Get.find<MapDriverController>().passengerPhone);
uid = int.parse(box.read(BoxName.phoneDriver));
}
initAgoraFull();
}
initAgoraFull() async {
print('channelName is $channelName');
print('remoteid is $remoteUid');
print('uid is $uid');
await fetchToken();
// Set up an instance of Agora engine
setupVoiceSDKEngine();
// join();
FirebaseMessagesController().sendNotificationToPassengerToken(
'Call Income from Passenger',
box.read(BoxName.passengerID) != null
? '${'You have call from Passenger'.tr} ${box.read(BoxName.name)}'
: '${'You have call from driver'.tr} ${box.read(BoxName.nameDriver)}',
box.read(BoxName.passengerID) != null
? Get.find<MapPassengerController>().driverToken
: Get.find<MapDriverController>().tokenPassenger,
[
token,
channelName,
uid.toString(),
remoteUid.toString(),
],
);
join();
}
@override
void onClose() {
agoraEngine.leaveChannel();
super.onClose();
}
Future<void> setupVoiceSDKEngine() async {
// retrieve or request microphone permission
await [Permission.microphone].request();
//create an instance of the Agora engine
agoraEngine = createAgoraRtcEngine();
await agoraEngine.initialize(RtcEngineContext(appId: AK.agoraAppId));
print('eeeeeeeeeeeeeeeeeeee');
print(agoraEngine);
// Register the event handler
agoraEngine.registerEventHandler(
RtcEngineEventHandler(
onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
// Get.snackbar(
// "Local user uid:${connection.localUid} joined the channel", '');
status = 'joined'.tr;
_isJoined = true;
update();
},
onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
// Get.snackbar("Remote user uid:$remoteUid joined the channel", '');
status =
'${box.read(BoxName.passengerID) != null ? Get.find<MapPassengerController>().driverName : Get.find<MapDriverController>().passengerName}'
' joined'
.tr;
remoteUid = remoteUid;
update();
},
onUserOffline: (RtcConnection connection, int? remoteUid,
UserOfflineReasonType reason) {
// Get.snackbar("Remote user uid:$remoteUid left the channel", '');
status = 'Call left'.tr;
remoteUid = null;
update();
},
),
);
}
void join() async {
// Set channel options including the client role and channel profile
ChannelMediaOptions options = const ChannelMediaOptions(
clientRoleType: ClientRoleType.clientRoleBroadcaster,
channelProfile: ChannelProfileType.channelProfileCommunication,
);
await agoraEngine.joinChannel(
token: token,
channelId: channelName,
options: options,
uid: uid,
);
}
void leave() {
_isJoined = false;
remoteUid = null;
update();
agoraEngine.leaveChannel();
}
// Clean up the resources when you leave
@override
void dispose() async {
await agoraEngine.leaveChannel();
super.dispose();
}
fetchToken() async {
var res = await CRUD()
.getAgoraToken(channelName: channelName, uid: uid.toString());
token = res;
print('token is $token');
update();
}
}

View File

@@ -12,6 +12,8 @@ import 'package:SEFER/views/home/Captin/home_captain/home_captin.dart';
import 'package:SEFER/views/home/map_page_passenger.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import '../firebase/firbase_messge.dart';
// import '../home/captin/home_captain_controller.dart';
class RateController extends GetxController {
@@ -80,6 +82,34 @@ class RateController extends GetxController {
middleText: '',
confirm: MyElevatedButton(title: 'Ok', onPressed: () => Get.back()));
} else {
var tip = (Get.find<MapPassengerController>().totalPassenger) *
(double.parse(box.read(BoxName.tipPercentage.toString())));
var res = await CRUD().post(link: AppLink.addTips, payload: {
'passengerID': box.read(BoxName.passengerID),
'driverID': Get.find<MapPassengerController>().driverId.toString(),
'rideID': Get.find<MapPassengerController>().rideId.toString(),
'tipAmount': tip.toString(),
});
await CRUD().post(link: AppLink.addPassengersWallet, payload: {
'passenger_id': box.read(BoxName.passengerID).toString(),
'balance': ((-1) * tip).toString()
});
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
'driverID': Get.find<MapPassengerController>().driverId.toString(),
'paymentID': '${Get.find<MapPassengerController>().rideId}tip',
'amount': (tip * 100).toString(),
'paymentMethod': 'visa-tip',
});
if (res != 'failure') {
FirebaseMessagesController().sendNotificationToAnyWithoutData(
'You Have Tips',
'${'${tip.toString()}\$${' tips\nTotal is'.tr}'} ${tip + (Get.find<MapPassengerController>().totalPassenger)}',
Get.find<MapPassengerController>().driverToken.toString(),
);
}
await CRUD().post(link: AppLink.addRateToDriver, payload: {
'passenger_id': box.read(BoxName.passengerID).toString(),
'driver_id': driverId,