7/6/5
This commit is contained in:
@@ -55,8 +55,8 @@ android {
|
|||||||
// 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 23
|
||||||
targetSdkVersion 33
|
targetSdkVersion 33
|
||||||
versionCode 49
|
versionCode 52
|
||||||
versionName '1.5.49'
|
versionName '1.5.52'
|
||||||
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
|
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,67 +1,53 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<!-- Optional: Add this permission if you want to use bluetooth telephony device like
|
|
||||||
headset/earbuds (min SDK: 23) -->
|
|
||||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
|
||||||
<!-- Optional: Add this permission if you want to save your recordings in public folders -->
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
|
||||||
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
|
|
||||||
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
|
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
|
||||||
<uses-permission android:name="android.permission.VIBRATE" />
|
<uses-permission android:name="android.permission.VIBRATE" />
|
||||||
|
|
||||||
<!-- Permissions required by the SDK -->
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
|
|
||||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH" />
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||||
|
|
||||||
<!-- Permissions required by the Demo App -->
|
|
||||||
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
|
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
|
||||||
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
<uses-permission android:name="android.permission.WAKE_LOCK" />
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
|
||||||
<uses-feature android:glEsVersion="0x00020000" android:required="true" />
|
|
||||||
<uses-feature android:name="android.hardware.camera" />
|
<uses-feature android:name="android.hardware.camera" />
|
||||||
<uses-feature android:name="android.hardware.camera.autofocus" />
|
<uses-feature android:name="android.hardware.camera.autofocus" />
|
||||||
|
|
||||||
|
<application
|
||||||
<application android:label="SEFER" android:name="${applicationName}"
|
android:label="Sefer Driver"
|
||||||
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/launcher_icon">
|
android:icon="@mipmap/launcher_icon">
|
||||||
<activity android:name=".MainActivity" android:exported="true" android:launchMode="singleTop"
|
<activity
|
||||||
|
android:name=".MainActivity"
|
||||||
|
android:exported="true"
|
||||||
|
android:launchMode="singleTop"
|
||||||
android:theme="@style/LaunchTheme"
|
android:theme="@style/LaunchTheme"
|
||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize">
|
android:hardwareAccelerated="true"
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
android:windowSoftInputMode="adjustResize">
|
||||||
the Android process has started. This theme is visible to the user
|
<meta-data
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
to determine the Window background behind the Flutter UI. -->
|
|
||||||
<meta-data android:name="io.flutter.embedding.android.NormalTheme"
|
|
||||||
android:resource="@style/NormalTheme" />
|
android:resource="@style/NormalTheme" />
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
<category android:name="android.intent.category.LAUNCHER" />
|
<category android:name="android.intent.category.LAUNCHER" />
|
||||||
</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"
|
||||||
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id"
|
android:value="@string/api_key" />
|
||||||
|
<meta-data
|
||||||
|
android:name="com.google.firebase.messaging.default_notification_channel_id"
|
||||||
android:value="@string/default_notification_channel_id" />
|
android:value="@string/default_notification_channel_id" />
|
||||||
<meta-data android:name="com.android.application.versionCode" android:value="1" />
|
<meta-data
|
||||||
<!-- Don't delete the meta-data below.
|
android:name="flutterEmbedding"
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
android:value="2" />
|
||||||
<meta-data android:name="flutterEmbedding" android:value="2" />
|
<activity
|
||||||
<activity android:name="com.yalantis.ucrop.UCropActivity" android:screenOrientation="portrait"
|
android:name="com.yalantis.ucrop.UCropActivity"
|
||||||
|
android:screenOrientation="portrait"
|
||||||
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
|
android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
|
||||||
|
|
||||||
</application>
|
</application>
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
|
||||||
</manifest>
|
</manifest>
|
||||||
@@ -91,6 +91,7 @@ class RegisterCaptainController extends GetxController {
|
|||||||
.post(link: AppLink.checkPhoneNumberISVerfiedDriver, payload: {
|
.post(link: AppLink.checkPhoneNumberISVerfiedDriver, payload: {
|
||||||
'phone_number': '+2${phoneController.text}',
|
'phone_number': '+2${phoneController.text}',
|
||||||
});
|
});
|
||||||
|
if (responseCheker != 'failure') {
|
||||||
var d = jsonDecode(responseCheker);
|
var d = jsonDecode(responseCheker);
|
||||||
if (d['message'][0]['is_verified'].toString() == '1') {
|
if (d['message'][0]['is_verified'].toString() == '1') {
|
||||||
Get.snackbar('Phone number is verified before'.tr, '',
|
Get.snackbar('Phone number is verified before'.tr, '',
|
||||||
@@ -111,6 +112,19 @@ class RegisterCaptainController extends GetxController {
|
|||||||
phoneController.text.toString(), randomNumber.toString());
|
phoneController.text.toString(), randomNumber.toString());
|
||||||
isSent = true;
|
isSent = true;
|
||||||
|
|
||||||
|
isLoading = false;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
|
||||||
|
'phone_number': '+2${phoneController.text}',
|
||||||
|
'token_code': randomNumber.toString(),
|
||||||
|
});
|
||||||
|
|
||||||
|
await smsEgyptController.sendSmsEgypt(
|
||||||
|
phoneController.text.toString(), randomNumber.toString());
|
||||||
|
isSent = true;
|
||||||
|
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -161,11 +161,11 @@ class FirebaseMessagesController extends GetxController {
|
|||||||
);
|
);
|
||||||
// }
|
// }
|
||||||
// Assuming GetMaterialApp is initialized and context is valid for navigation
|
// Assuming GetMaterialApp is initialized and context is valid for navigation
|
||||||
Get.to(() => CallPage(
|
// Get.to(() => CallPage(
|
||||||
// channelName: driverList[1].toString(),
|
// // channelName: driverList[1].toString(),
|
||||||
// token: driverList[0].toString(),
|
// // token: driverList[0].toString(),
|
||||||
// remoteID: driverList[2].toString(),
|
// // remoteID: driverList[2].toString(),
|
||||||
));
|
// ));
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
} else if (message.notification!.title! == 'Call End'.tr) {
|
} else if (message.notification!.title! == 'Call End'.tr) {
|
||||||
try {
|
try {
|
||||||
@@ -179,7 +179,7 @@ class FirebaseMessagesController extends GetxController {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
// Assuming GetMaterialApp is initialized and context is valid for navigation
|
// Assuming GetMaterialApp is initialized and context is valid for navigation
|
||||||
Get.off(const CallPage());
|
// Get.off(const CallPage());
|
||||||
} catch (e) {}
|
} catch (e) {}
|
||||||
} else if (message.notification!.title! == 'Order Applied'.tr) {
|
} else if (message.notification!.title! == 'Order Applied'.tr) {
|
||||||
Get.snackbar(
|
Get.snackbar(
|
||||||
|
|||||||
@@ -1,129 +1,129 @@
|
|||||||
import 'package:SEFER/constant/api_key.dart';
|
// import 'package:SEFER/constant/api_key.dart';
|
||||||
import 'package:SEFER/controller/functions/crud.dart';
|
// import 'package:SEFER/controller/functions/crud.dart';
|
||||||
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
|
// // import 'package:agora_rtc_engine/agora_rtc_engine.dart';
|
||||||
import 'package:get/get.dart';
|
// import 'package:get/get.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
// import 'package:permission_handler/permission_handler.dart';
|
||||||
|
|
||||||
import '../../constant/box_name.dart';
|
// import '../../constant/box_name.dart';
|
||||||
import '../firebase/firbase_messge.dart';
|
// import '../firebase/firbase_messge.dart';
|
||||||
import '../home/captin/map_driver_controller.dart';
|
// import '../home/captin/map_driver_controller.dart';
|
||||||
import '../../main.dart';
|
// import '../../main.dart';
|
||||||
|
|
||||||
class CallController extends GetxController {
|
// class CallController extends GetxController {
|
||||||
String channelName = ''; // Get.find<MapDriverController>().rideId;
|
// String channelName = ''; // Get.find<MapDriverController>().rideId;
|
||||||
String token = '';
|
// String token = '';
|
||||||
// int uid = int.parse(box.read(BoxName.phoneDriver)); // uid of the local user
|
// // int uid = int.parse(box.read(BoxName.phoneDriver)); // uid of the local user
|
||||||
int uid = 0;
|
// int uid = 0;
|
||||||
int? remoteUid; // uid of the remote user
|
// int? remoteUid; // uid of the remote user
|
||||||
bool _isJoined = false; // Indicates if the local user has joined the channel
|
// bool _isJoined = false; // Indicates if the local user has joined the channel
|
||||||
String status = '';
|
// String status = '';
|
||||||
late RtcEngine agoraEngine; // Agora engine instance
|
// // late RtcEngine agoraEngine; // Agora engine instance
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
void onInit() {
|
// void onInit() {
|
||||||
super.onInit();
|
// super.onInit();
|
||||||
|
|
||||||
channelName = Get.find<MapDriverController>().rideId; // 'sefer300'; //
|
// channelName = Get.find<MapDriverController>().rideId; // 'sefer300'; //
|
||||||
remoteUid = int.parse(Get.find<MapDriverController>().passengerPhone);
|
// remoteUid = int.parse(Get.find<MapDriverController>().passengerPhone);
|
||||||
uid = int.parse(box.read(BoxName.phoneDriver));
|
// uid = int.parse(box.read(BoxName.phoneDriver));
|
||||||
|
|
||||||
initAgoraFull();
|
// initAgoraFull();
|
||||||
}
|
// }
|
||||||
|
|
||||||
initAgoraFull() async {
|
// initAgoraFull() async {
|
||||||
await fetchToken();
|
// await fetchToken();
|
||||||
// Set up an instance of Agora engine
|
// // Set up an instance of Agora engine
|
||||||
setupVoiceSDKEngine();
|
// setupVoiceSDKEngine();
|
||||||
// join();
|
// // join();
|
||||||
FirebaseMessagesController().sendNotificationToPassengerTokenCALL(
|
// FirebaseMessagesController().sendNotificationToPassengerTokenCALL(
|
||||||
'Call Income',
|
// 'Call Income',
|
||||||
'${'You have call from driver'.tr} ${box.read(BoxName.nameDriver)}',
|
// '${'You have call from driver'.tr} ${box.read(BoxName.nameDriver)}',
|
||||||
Get.find<MapDriverController>().tokenPassenger,
|
// Get.find<MapDriverController>().tokenPassenger,
|
||||||
[
|
// [
|
||||||
token,
|
// token,
|
||||||
channelName,
|
// channelName,
|
||||||
uid.toString(),
|
// uid.toString(),
|
||||||
remoteUid.toString(),
|
// remoteUid.toString(),
|
||||||
],
|
// ],
|
||||||
);
|
// );
|
||||||
join();
|
// join();
|
||||||
}
|
// }
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
void onClose() {
|
// void onClose() {
|
||||||
agoraEngine.leaveChannel();
|
// // agoraEngine.leaveChannel();
|
||||||
super.onClose();
|
// super.onClose();
|
||||||
}
|
// }
|
||||||
|
|
||||||
Future<void> setupVoiceSDKEngine() async {
|
// // Future<void> setupVoiceSDKEngine() async {
|
||||||
// retrieve or request microphone permission
|
// // // retrieve or request microphone permission
|
||||||
await [Permission.microphone].request();
|
// // await [Permission.microphone].request();
|
||||||
|
|
||||||
//create an instance of the Agora engine
|
// // //create an instance of the Agora engine
|
||||||
agoraEngine = createAgoraRtcEngine();
|
// // agoraEngine = createAgoraRtcEngine();
|
||||||
await agoraEngine.initialize(RtcEngineContext(appId: AK.agoraAppId));
|
// // await agoraEngine.initialize(RtcEngineContext(appId: AK.agoraAppId));
|
||||||
// Register the event handler
|
// // // Register the event handler
|
||||||
agoraEngine.registerEventHandler(
|
// // agoraEngine.registerEventHandler(
|
||||||
RtcEngineEventHandler(
|
// // RtcEngineEventHandler(
|
||||||
onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
|
// // onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
|
||||||
// Get.snackbar(
|
// // // Get.snackbar(
|
||||||
// "Local user uid:${connection.localUid} joined the channel", '');
|
// // // "Local user uid:${connection.localUid} joined the channel", '');
|
||||||
status = 'joined'.tr;
|
// // status = 'joined'.tr;
|
||||||
_isJoined = true;
|
// // _isJoined = true;
|
||||||
update();
|
// // update();
|
||||||
},
|
// // },
|
||||||
onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
|
// // onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
|
||||||
// Get.snackbar("Remote user uid:$remoteUid joined the channel", '');
|
// // // Get.snackbar("Remote user uid:$remoteUid joined the channel", '');
|
||||||
status = '${Get.find<MapDriverController>().passengerName} '
|
// // status = '${Get.find<MapDriverController>().passengerName} '
|
||||||
'joined'
|
// // 'joined'
|
||||||
.tr;
|
// // .tr;
|
||||||
remoteUid = remoteUid;
|
// // remoteUid = remoteUid;
|
||||||
update();
|
// // update();
|
||||||
},
|
// // },
|
||||||
onUserOffline: (RtcConnection connection, int? remoteUid,
|
// // onUserOffline: (RtcConnection connection, int? remoteUid,
|
||||||
UserOfflineReasonType reason) {
|
// // UserOfflineReasonType reason) {
|
||||||
// Get.snackbar("Remote user uid:$remoteUid left the channel", '');
|
// // // Get.snackbar("Remote user uid:$remoteUid left the channel", '');
|
||||||
status = 'Call Left'.tr;
|
// // status = 'Call Left'.tr;
|
||||||
remoteUid = null;
|
// // remoteUid = null;
|
||||||
update();
|
// // update();
|
||||||
},
|
// // },
|
||||||
),
|
// // ),
|
||||||
);
|
// // );
|
||||||
}
|
// // }
|
||||||
|
|
||||||
void join() async {
|
// // void join() async {
|
||||||
// Set channel options including the client role and channel profile
|
// // // Set channel options including the client role and channel profile
|
||||||
ChannelMediaOptions options = const ChannelMediaOptions(
|
// // ChannelMediaOptions options = const ChannelMediaOptions(
|
||||||
clientRoleType: ClientRoleType.clientRoleBroadcaster,
|
// // clientRoleType: ClientRoleType.clientRoleBroadcaster,
|
||||||
channelProfile: ChannelProfileType.channelProfileCommunication,
|
// // channelProfile: ChannelProfileType.channelProfileCommunication,
|
||||||
);
|
// // );
|
||||||
|
|
||||||
await agoraEngine.joinChannel(
|
// // await agoraEngine.joinChannel(
|
||||||
token: token,
|
// // token: token,
|
||||||
channelId: channelName,
|
// // channelId: channelName,
|
||||||
options: options,
|
// // options: options,
|
||||||
uid: uid,
|
// // uid: uid,
|
||||||
);
|
// // );
|
||||||
}
|
// // }
|
||||||
|
|
||||||
void leave() {
|
// // void leave() {
|
||||||
_isJoined = false;
|
// // _isJoined = false;
|
||||||
remoteUid = null;
|
// // remoteUid = null;
|
||||||
update();
|
// // update();
|
||||||
agoraEngine.leaveChannel();
|
// // agoraEngine.leaveChannel();
|
||||||
}
|
// // }
|
||||||
|
|
||||||
// Clean up the resources when you leave
|
// // // Clean up the resources when you leave
|
||||||
@override
|
// // @override
|
||||||
void dispose() async {
|
// // void dispose() async {
|
||||||
await agoraEngine.leaveChannel();
|
// // await agoraEngine.leaveChannel();
|
||||||
super.dispose();
|
// // super.dispose();
|
||||||
}
|
// // }
|
||||||
|
|
||||||
fetchToken() async {
|
// fetchToken() async {
|
||||||
var res = await CRUD()
|
// var res = await CRUD()
|
||||||
.getAgoraToken(channelName: channelName, uid: uid.toString());
|
// .getAgoraToken(channelName: channelName, uid: uid.toString());
|
||||||
token = res;
|
// token = res;
|
||||||
update();
|
// update();
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|||||||
@@ -388,7 +388,7 @@ class AI extends GetxController {
|
|||||||
'displacement': responseIdCardDriverEgyptBack['engine'].toString(),
|
'displacement': responseIdCardDriverEgyptBack['engine'].toString(),
|
||||||
'fuel': responseIdCardDriverEgyptBack['fuel'].toString(),
|
'fuel': responseIdCardDriverEgyptBack['fuel'].toString(),
|
||||||
'registration_date':
|
'registration_date':
|
||||||
'${responseIdCardDriverEgyptBack['inspection_date']}-01-01',
|
'${responseIdCardDriverEgyptBack['inspection_date']}',
|
||||||
});
|
});
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
update();
|
update();
|
||||||
|
|||||||
@@ -113,4 +113,100 @@ class ImageController extends GetxController {
|
|||||||
'Failed to upload image: ${res.statusCode} - ${res.body}');
|
'Failed to upload image: ${res.statusCode} - ${res.body}');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
choosImagePicture(String link, String imageType) async {
|
||||||
|
final pickedImage = await picker.pickImage(
|
||||||
|
source: ImageSource.gallery,
|
||||||
|
// preferredCameraDevice: CameraDevice.rear,
|
||||||
|
// maxHeight: Get.height * .3,
|
||||||
|
// maxWidth: Get.width * .9,
|
||||||
|
// imageQuality: 100,
|
||||||
|
);
|
||||||
|
image = File(pickedImage!.path);
|
||||||
|
|
||||||
|
croppedFile = await ImageCropper().cropImage(
|
||||||
|
sourcePath: image!.path,
|
||||||
|
aspectRatioPresets: [
|
||||||
|
CropAspectRatioPreset.square,
|
||||||
|
CropAspectRatioPreset.ratio3x2,
|
||||||
|
CropAspectRatioPreset.original,
|
||||||
|
CropAspectRatioPreset.ratio4x3,
|
||||||
|
CropAspectRatioPreset.ratio16x9
|
||||||
|
],
|
||||||
|
uiSettings: [
|
||||||
|
AndroidUiSettings(
|
||||||
|
toolbarTitle: 'Cropper'.tr,
|
||||||
|
toolbarColor: AppColor.blueColor,
|
||||||
|
toolbarWidgetColor: AppColor.yellowColor,
|
||||||
|
initAspectRatio: CropAspectRatioPreset.original,
|
||||||
|
lockAspectRatio: false),
|
||||||
|
IOSUiSettings(
|
||||||
|
title: 'Cropper'.tr,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
myImage = File(pickedImage.path);
|
||||||
|
isloading = true;
|
||||||
|
update();
|
||||||
|
// Save the cropped image
|
||||||
|
File savedCroppedImage = File(croppedFile!.path);
|
||||||
|
print('link =$link');
|
||||||
|
try {
|
||||||
|
await uploadImage(
|
||||||
|
savedCroppedImage,
|
||||||
|
{
|
||||||
|
'driverID':
|
||||||
|
box.read(BoxName.driverID) ?? box.read(BoxName.passengerID),
|
||||||
|
'imageType': imageType
|
||||||
|
},
|
||||||
|
link,
|
||||||
|
);
|
||||||
|
} catch (e) {
|
||||||
|
Get.snackbar('Image Upload Failed'.tr, e.toString(),
|
||||||
|
backgroundColor: AppColor.redColor);
|
||||||
|
} finally {
|
||||||
|
isloading = false;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
uploadImagePicture(File file, Map data, String link) async {
|
||||||
|
var request = http.MultipartRequest(
|
||||||
|
'POST',
|
||||||
|
Uri.parse(link), //'https://ride.mobile-app.store/uploadImage1.php'
|
||||||
|
);
|
||||||
|
|
||||||
|
var length = await file.length();
|
||||||
|
var stream = http.ByteStream(file.openRead());
|
||||||
|
var multipartFile = http.MultipartFile(
|
||||||
|
'image',
|
||||||
|
stream,
|
||||||
|
length,
|
||||||
|
filename: basename(file.path),
|
||||||
|
);
|
||||||
|
request.headers.addAll({
|
||||||
|
'Authorization':
|
||||||
|
'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}',
|
||||||
|
});
|
||||||
|
// Set the file name to the driverID
|
||||||
|
request.files.add(
|
||||||
|
http.MultipartFile(
|
||||||
|
'image',
|
||||||
|
stream,
|
||||||
|
length,
|
||||||
|
filename: '${box.read(BoxName.driverID)}.jpg',
|
||||||
|
),
|
||||||
|
);
|
||||||
|
data.forEach((key, value) {
|
||||||
|
request.fields[key] = value;
|
||||||
|
});
|
||||||
|
var myrequest = await request.send();
|
||||||
|
var res = await http.Response.fromStream(myrequest);
|
||||||
|
if (res.statusCode == 200) {
|
||||||
|
return jsonDecode(res.body);
|
||||||
|
} else {
|
||||||
|
throw Exception(
|
||||||
|
'Failed to upload image: ${res.statusCode} - ${res.body}');
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -264,10 +264,29 @@ class CaptainWalletController extends GetxController {
|
|||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getKazanPercent() async {
|
||||||
|
var res = await CRUD().get(
|
||||||
|
link: AppLink.getKazanPercent,
|
||||||
|
payload: {'country': box.read(BoxName.countryCode).toString()},
|
||||||
|
);
|
||||||
|
if (res != 'failure') {
|
||||||
|
var json = jsonDecode(res);
|
||||||
|
kazan = double.parse(json['message'][0]['kazan']);
|
||||||
|
// naturePrice = double.parse(json['message'][0]['naturePrice']);
|
||||||
|
// heavyPrice = double.parse(json['message'][0]['heavyPrice']);
|
||||||
|
// latePrice = double.parse(json['message'][0]['latePrice']);
|
||||||
|
// comfortPrice = double.parse(json['message'][0]['comfortPrice']);
|
||||||
|
// speedPrice = double.parse(json['message'][0]['speedPrice']);
|
||||||
|
// deliveryPrice = double.parse(json['message'][0]['deliveryPrice']);
|
||||||
|
// mashwariPrice = double.parse(json['message'][0]['freePrice']);
|
||||||
|
// fuelPrice = double.parse(json['message'][0]['fuelPrice']);
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void onInit() async {
|
void onInit() async {
|
||||||
await Get.find<HomeCaptainController>().getKazanPercent();
|
getKazanPercent();
|
||||||
kazan = Get.find<HomeCaptainController>().kazan;
|
|
||||||
|
|
||||||
await refreshCaptainWallet();
|
await refreshCaptainWallet();
|
||||||
super.onInit();
|
super.onInit();
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ class MyTranslation extends Translations {
|
|||||||
@override
|
@override
|
||||||
Map<String, Map<String, String>> get keys => {
|
Map<String, Map<String, String>> get keys => {
|
||||||
"ar": {
|
"ar": {
|
||||||
|
"you can show video how to setup":
|
||||||
|
"يمكنك عرض فيديو حول كيفية الإعداد",
|
||||||
"don't start trip if not": "لا تبدأ الرحلة إذا لم",
|
"don't start trip if not": "لا تبدأ الرحلة إذا لم",
|
||||||
"you are not moved yet !": "أنت لم تتحرك بعد!",
|
"you are not moved yet !": "أنت لم تتحرك بعد!",
|
||||||
"Update Available": "تحديث متوفر",
|
"Update Available": "تحديث متوفر",
|
||||||
@@ -265,7 +267,7 @@ class MyTranslation extends Translations {
|
|||||||
"Year": "السنة",
|
"Year": "السنة",
|
||||||
"Chassis": "الشاسيه",
|
"Chassis": "الشاسيه",
|
||||||
"Color": "اللون",
|
"Color": "اللون",
|
||||||
"Displacement": "الإحلال",
|
"Displacement": "سعه المحرك",
|
||||||
"Fuel": "الوقود",
|
"Fuel": "الوقود",
|
||||||
"Tax Expiry Date": "تاريخ انهاء الصلاحية",
|
"Tax Expiry Date": "تاريخ انهاء الصلاحية",
|
||||||
"Inspection Date": "تاريخ الفحص",
|
"Inspection Date": "تاريخ الفحص",
|
||||||
|
|||||||
@@ -3,7 +3,8 @@ import 'package:SEFER/controller/functions/tts.dart';
|
|||||||
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:webview_flutter/webview_flutter.dart';
|
||||||
import '../../../../constant/colors.dart';
|
import '../../../../constant/colors.dart';
|
||||||
import '../../../../constant/links.dart';
|
import '../../../../constant/links.dart';
|
||||||
import '../../../../constant/style.dart';
|
import '../../../../constant/style.dart';
|
||||||
@@ -71,10 +72,26 @@ class EgyptCardAI extends StatelessWidget {
|
|||||||
// controller.responseCriminalRecordEgypt
|
// controller.responseCriminalRecordEgypt
|
||||||
// .isNotEmpty
|
// .isNotEmpty
|
||||||
)
|
)
|
||||||
? Get.height * .7
|
? Get.height * .5
|
||||||
: Get.height * .85,
|
: Get.height * .85,
|
||||||
child: ListView(
|
child: ListView(
|
||||||
children: [
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Container(
|
||||||
|
decoration: AppStyle.boxDecoration
|
||||||
|
.copyWith(boxShadow: [
|
||||||
|
const BoxShadow(
|
||||||
|
color: AppColor.blueColor,
|
||||||
|
blurRadius: 2,
|
||||||
|
offset: Offset(1, 2)),
|
||||||
|
const BoxShadow(
|
||||||
|
color: AppColor.blueColor,
|
||||||
|
blurRadius: 2,
|
||||||
|
offset: Offset(-1, -1))
|
||||||
|
]),
|
||||||
|
child: VideoButton()),
|
||||||
|
),
|
||||||
egyptDriverLicense(),
|
egyptDriverLicense(),
|
||||||
egyptCarLicenceFront(),
|
egyptCarLicenceFront(),
|
||||||
egyptCarLicenceBack(),
|
egyptCarLicenceBack(),
|
||||||
@@ -853,7 +870,7 @@ Important notes:
|
|||||||
3. Ensure all numeric values (year, displacement, cylinders) are in Latin numerals.
|
3. Ensure all numeric values (year, displacement, cylinders) are in Latin numerals.
|
||||||
4. If any information is missing, leave the corresponding field as an empty string.
|
4. If any information is missing, leave the corresponding field as an empty string.
|
||||||
5. Do not include any explanatory text in the JSON fields, only the extracted values.
|
5. Do not include any explanatory text in the JSON fields, only the extracted values.
|
||||||
|
displacement in the line contain (سم٣ )
|
||||||
Please fill in the JSON object with the extracted information, following these guidelines.
|
Please fill in the JSON object with the extracted information, following these guidelines.
|
||||||
""", AppLink.uploadEgypt, 'car_back');
|
""", AppLink.uploadEgypt, 'car_back');
|
||||||
},
|
},
|
||||||
@@ -1094,3 +1111,24 @@ Please fill in the JSON object with the extracted information, following these g
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class VideoButton extends StatelessWidget {
|
||||||
|
final String videoUrl =
|
||||||
|
"https://www.youtube.com/watch?v=dQw4w9WgXcQ"; // Replace with your video URL
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return TextButton(
|
||||||
|
onPressed: () async {
|
||||||
|
if (await canLaunchUrl(Uri.parse(videoUrl))) {
|
||||||
|
await launchUrl(Uri.parse(videoUrl));
|
||||||
|
} else {
|
||||||
|
throw 'Could not launch $videoUrl';
|
||||||
|
}
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
"you can show video how to setup".tr,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -192,7 +192,8 @@ class UserAccountHeader extends StatelessWidget {
|
|||||||
top: 0,
|
top: 0,
|
||||||
child: IconButton(
|
child: IconButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
imageController.choosImage(AppLink.uploadImage1, 'portrait');
|
imageController.choosImagePicture(
|
||||||
|
AppLink.uploadImage1, 'portrait');
|
||||||
},
|
},
|
||||||
icon: const Icon(Icons.edit),
|
icon: const Icon(Icons.edit),
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,189 +1,189 @@
|
|||||||
import 'dart:async';
|
// import 'dart:async';
|
||||||
import 'package:SEFER/constant/box_name.dart';
|
// import 'package:SEFER/constant/box_name.dart';
|
||||||
import 'package:SEFER/main.dart';
|
// import 'package:SEFER/main.dart';
|
||||||
import 'package:SEFER/views/widgets/my_scafold.dart';
|
// import 'package:SEFER/views/widgets/my_scafold.dart';
|
||||||
import 'package:flutter/material.dart';
|
// import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
// import 'package:get/get.dart';
|
||||||
import 'package:permission_handler/permission_handler.dart';
|
// import 'package:permission_handler/permission_handler.dart';
|
||||||
|
|
||||||
import 'package:agora_rtc_engine/agora_rtc_engine.dart';
|
// import 'package:agora_rtc_engine/agora_rtc_engine.dart';
|
||||||
|
|
||||||
import '../../../../constant/api_key.dart';
|
// import '../../../../constant/api_key.dart';
|
||||||
import '../../../../controller/functions/crud.dart';
|
// import '../../../../controller/functions/crud.dart';
|
||||||
|
|
||||||
String appId = AK.agoraAppId;
|
// String appId = AK.agoraAppId;
|
||||||
|
|
||||||
class DriverCallPage extends StatefulWidget {
|
// class DriverCallPage extends StatefulWidget {
|
||||||
const DriverCallPage({super.key});
|
// const DriverCallPage({super.key});
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
State<DriverCallPage> createState() => _DriverCallPageState();
|
// State<DriverCallPage> createState() => _DriverCallPageState();
|
||||||
}
|
// }
|
||||||
|
|
||||||
class _DriverCallPageState extends State<DriverCallPage> {
|
// class _DriverCallPageState extends State<DriverCallPage> {
|
||||||
String channelName = '';
|
// String channelName = '';
|
||||||
String token = '';
|
// String token = '';
|
||||||
// "00612994c6e707543e68d5638894d04f989IAAlydoFEC3ZeZkeUwl0dSswZTX8n+xyZR8PBWdwXFV6t6MLiA8AAAAAEACCHD/gn3TUZQEAAQAAAAAA";
|
// // "00612994c6e707543e68d5638894d04f989IAAlydoFEC3ZeZkeUwl0dSswZTX8n+xyZR8PBWdwXFV6t6MLiA8AAAAAEACCHD/gn3TUZQEAAQAAAAAA";
|
||||||
|
|
||||||
// int uid = int.parse(box.read(BoxName.phoneDriver)); // uid of the local user
|
// // int uid = int.parse(box.read(BoxName.phoneDriver)); // uid of the local user
|
||||||
int uid = 0;
|
// int uid = 0;
|
||||||
int? _remoteUid; // uid of the remote user
|
// int? _remoteUid; // uid of the remote user
|
||||||
bool _isJoined = false; // Indicates if the local user has joined the channel
|
// bool _isJoined = false; // Indicates if the local user has joined the channel
|
||||||
late RtcEngine agoraEngine; // Agora engine instance
|
// late RtcEngine agoraEngine; // Agora engine instance
|
||||||
|
|
||||||
final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
|
// final GlobalKey<ScaffoldMessengerState> scaffoldMessengerKey =
|
||||||
GlobalKey<ScaffoldMessengerState>(); // Global key to access the scaffold
|
// GlobalKey<ScaffoldMessengerState>(); // Global key to access the scaffold
|
||||||
|
|
||||||
showMessage(String message) {
|
// showMessage(String message) {
|
||||||
scaffoldMessengerKey.currentState?.showSnackBar(SnackBar(
|
// scaffoldMessengerKey.currentState?.showSnackBar(SnackBar(
|
||||||
content: Text(message),
|
// content: Text(message),
|
||||||
));
|
// ));
|
||||||
}
|
// }
|
||||||
|
|
||||||
initAgora() async {
|
// initAgora() async {
|
||||||
await fetchToken();
|
// await fetchToken();
|
||||||
await setupVoiceSDKEngine();
|
// await setupVoiceSDKEngine();
|
||||||
}
|
// }
|
||||||
|
|
||||||
fetchToken() async {
|
// fetchToken() async {
|
||||||
var res = await CRUD()
|
// var res = await CRUD()
|
||||||
.getAgoraToken(channelName: channelName, uid: uid.toString());
|
// .getAgoraToken(channelName: channelName, uid: uid.toString());
|
||||||
setState(() {
|
// setState(() {
|
||||||
token = res;
|
// token = res;
|
||||||
});
|
// });
|
||||||
}
|
// }
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
void initState() {
|
// void initState() {
|
||||||
super.initState();
|
// super.initState();
|
||||||
_remoteUid = box.read(BoxName.phone) != null
|
// _remoteUid = box.read(BoxName.phone) != null
|
||||||
? int.parse(box.read(BoxName.phone))
|
// ? int.parse(box.read(BoxName.phone))
|
||||||
: int.parse(box.read(BoxName.phoneDriver));
|
// : int.parse(box.read(BoxName.phoneDriver));
|
||||||
uid = box.read(BoxName.phoneDriver) != null
|
// uid = box.read(BoxName.phoneDriver) != null
|
||||||
? int.parse(box.read(BoxName.phoneDriver))
|
// ? int.parse(box.read(BoxName.phoneDriver))
|
||||||
: int.parse(box.read(BoxName.phone));
|
// : int.parse(box.read(BoxName.phone));
|
||||||
// Set up an instance of Agora engine
|
// // Set up an instance of Agora engine
|
||||||
initAgora();
|
// initAgora();
|
||||||
}
|
// }
|
||||||
|
|
||||||
Future<void> setupVoiceSDKEngine() async {
|
// Future<void> setupVoiceSDKEngine() async {
|
||||||
// retrieve or request microphone permission
|
// // retrieve or request microphone permission
|
||||||
await [Permission.microphone].request();
|
// await [Permission.microphone].request();
|
||||||
|
|
||||||
//create an instance of the Agora engine
|
// //create an instance of the Agora engine
|
||||||
agoraEngine = createAgoraRtcEngine();
|
// agoraEngine = createAgoraRtcEngine();
|
||||||
await agoraEngine.initialize(RtcEngineContext(appId: AK.agoraAppId));
|
// await agoraEngine.initialize(RtcEngineContext(appId: AK.agoraAppId));
|
||||||
// Register the event handler
|
// // Register the event handler
|
||||||
agoraEngine.registerEventHandler(
|
// agoraEngine.registerEventHandler(
|
||||||
RtcEngineEventHandler(
|
// RtcEngineEventHandler(
|
||||||
onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
|
// onJoinChannelSuccess: (RtcConnection connection, int elapsed) {
|
||||||
showMessage(
|
// showMessage(
|
||||||
"Local user uid:${connection.localUid} joined the channel");
|
// "Local user uid:${connection.localUid} joined the channel");
|
||||||
setState(() {
|
// setState(() {
|
||||||
_isJoined = true;
|
// _isJoined = true;
|
||||||
});
|
// });
|
||||||
},
|
// },
|
||||||
onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
|
// onUserJoined: (RtcConnection connection, int remoteUid, int elapsed) {
|
||||||
showMessage("Remote user uid:$remoteUid joined the channel");
|
// showMessage("Remote user uid:$remoteUid joined the channel");
|
||||||
setState(() {
|
// setState(() {
|
||||||
_remoteUid = remoteUid;
|
// _remoteUid = remoteUid;
|
||||||
});
|
// });
|
||||||
},
|
// },
|
||||||
onUserOffline: (RtcConnection connection, int remoteUid,
|
// onUserOffline: (RtcConnection connection, int remoteUid,
|
||||||
UserOfflineReasonType reason) {
|
// UserOfflineReasonType reason) {
|
||||||
showMessage("Remote user uid:$remoteUid left the channel");
|
// showMessage("Remote user uid:$remoteUid left the channel");
|
||||||
setState(() {
|
// setState(() {
|
||||||
_remoteUid = null;
|
// _remoteUid = null;
|
||||||
});
|
// });
|
||||||
},
|
// },
|
||||||
),
|
// ),
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
|
|
||||||
void join() async {
|
// void join() async {
|
||||||
// Set channel options including the client role and channel profile
|
// // Set channel options including the client role and channel profile
|
||||||
ChannelMediaOptions options = const ChannelMediaOptions(
|
// ChannelMediaOptions options = const ChannelMediaOptions(
|
||||||
clientRoleType: ClientRoleType.clientRoleBroadcaster,
|
// clientRoleType: ClientRoleType.clientRoleBroadcaster,
|
||||||
channelProfile: ChannelProfileType.channelProfileCommunication,
|
// channelProfile: ChannelProfileType.channelProfileCommunication,
|
||||||
);
|
// );
|
||||||
|
|
||||||
await agoraEngine.joinChannel(
|
// await agoraEngine.joinChannel(
|
||||||
token: token,
|
// token: token,
|
||||||
channelId: channelName,
|
// channelId: channelName,
|
||||||
options: options,
|
// options: options,
|
||||||
uid: uid,
|
// uid: uid,
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
//https://console.agora.io/invite?sign=5e9e22d06f22caeeada9954c9e908572%253A5ba8aed978a35eab5a5113742502ded2a41478b2a81cb19c71a30776e125b58a
|
// //https://console.agora.io/invite?sign=5e9e22d06f22caeeada9954c9e908572%253A5ba8aed978a35eab5a5113742502ded2a41478b2a81cb19c71a30776e125b58a
|
||||||
|
|
||||||
void leave() {
|
// void leave() {
|
||||||
setState(() {
|
// setState(() {
|
||||||
_isJoined = false;
|
// _isJoined = false;
|
||||||
_remoteUid = null;
|
// _remoteUid = null;
|
||||||
});
|
// });
|
||||||
agoraEngine.leaveChannel();
|
// agoraEngine.leaveChannel();
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Clean up the resources when you leave
|
// // Clean up the resources when you leave
|
||||||
@override
|
// @override
|
||||||
void dispose() async {
|
// void dispose() async {
|
||||||
await agoraEngine.leaveChannel();
|
// await agoraEngine.leaveChannel();
|
||||||
super.dispose();
|
// super.dispose();
|
||||||
}
|
// }
|
||||||
|
|
||||||
// Build UI
|
// // Build UI
|
||||||
@override
|
// @override
|
||||||
Widget build(BuildContext context) {
|
// Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
// return MaterialApp(
|
||||||
scaffoldMessengerKey: scaffoldMessengerKey,
|
// scaffoldMessengerKey: scaffoldMessengerKey,
|
||||||
home: MyScafolld(
|
// home: MyScafolld(
|
||||||
// appBar: AppBar(
|
// // appBar: AppBar(
|
||||||
// title: const Text('Get started with Voice Calling'),
|
// // title: const Text('Get started with Voice Calling'),
|
||||||
// ),
|
// // ),
|
||||||
title: 'Voice Calling'.tr,
|
// title: 'Voice Calling'.tr,
|
||||||
isleading: true,
|
// isleading: true,
|
||||||
body: [
|
// body: [
|
||||||
ListView(
|
// ListView(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
|
// padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
|
||||||
children: [
|
// children: [
|
||||||
// Status text
|
// // Status text
|
||||||
Container(height: 40, child: Center(child: _status())),
|
// Container(height: 40, child: Center(child: _status())),
|
||||||
// Button Row
|
// // Button Row
|
||||||
Row(
|
// Row(
|
||||||
children: <Widget>[
|
// children: <Widget>[
|
||||||
Expanded(
|
// Expanded(
|
||||||
child: ElevatedButton(
|
// child: ElevatedButton(
|
||||||
child: const Text("Join"),
|
// child: const Text("Join"),
|
||||||
onPressed: () => {join()},
|
// onPressed: () => {join()},
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
const SizedBox(width: 10),
|
// const SizedBox(width: 10),
|
||||||
Expanded(
|
// Expanded(
|
||||||
child: ElevatedButton(
|
// child: ElevatedButton(
|
||||||
child: const Text("Leave"),
|
// child: const Text("Leave"),
|
||||||
onPressed: () => {leave()},
|
// onPressed: () => {leave()},
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
],
|
// ],
|
||||||
),
|
// ),
|
||||||
],
|
// ],
|
||||||
),
|
// ),
|
||||||
]),
|
// ]),
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
|
|
||||||
Widget _status() {
|
// Widget _status() {
|
||||||
String statusText;
|
// String statusText;
|
||||||
|
|
||||||
if (!_isJoined)
|
// if (!_isJoined)
|
||||||
statusText = 'Join a channel';
|
// statusText = 'Join a channel';
|
||||||
else if (_remoteUid == null)
|
// else if (_remoteUid == null)
|
||||||
statusText = 'Waiting for a remote user to join...';
|
// statusText = 'Waiting for a remote user to join...';
|
||||||
else
|
// else
|
||||||
statusText = 'Connected to remote user, uid:$_remoteUid';
|
// statusText = 'Connected to remote user, uid:$_remoteUid';
|
||||||
|
|
||||||
return Text(
|
// return Text(
|
||||||
statusText,
|
// statusText,
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|||||||
@@ -1,84 +1,84 @@
|
|||||||
import 'package:SEFER/constant/colors.dart';
|
// import 'package:SEFER/constant/colors.dart';
|
||||||
import 'package:SEFER/constant/style.dart';
|
// import 'package:SEFER/constant/style.dart';
|
||||||
import 'package:SEFER/controller/firebase/firbase_messge.dart';
|
// import 'package:SEFER/controller/firebase/firbase_messge.dart';
|
||||||
import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
|
// import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
|
||||||
import 'package:SEFER/views/widgets/my_scafold.dart';
|
// import 'package:SEFER/views/widgets/my_scafold.dart';
|
||||||
import 'package:flutter/material.dart';
|
// import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
// import 'package:get/get.dart';
|
||||||
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
|
// import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
|
||||||
|
|
||||||
import '../../../../../controller/functions/call_controller.dart';
|
// import '../../../../../controller/functions/call_controller.dart';
|
||||||
|
|
||||||
class CallPage extends StatelessWidget {
|
// class CallPage extends StatelessWidget {
|
||||||
const CallPage({super.key});
|
// const CallPage({super.key});
|
||||||
|
|
||||||
@override
|
// @override
|
||||||
Widget build(BuildContext context) {
|
// Widget build(BuildContext context) {
|
||||||
return MyScafolld(
|
// return MyScafolld(
|
||||||
title: 'Call Page'.tr, isleading: true, body: [callPage()]);
|
// title: 'Call Page'.tr, isleading: true, body: [callPage()]);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
|
|
||||||
GetBuilder<HomeCaptainController> callPage() {
|
// GetBuilder<HomeCaptainController> callPage() {
|
||||||
CallController callController = Get.put(CallController());
|
// CallController callController = Get.put(CallController());
|
||||||
Get.put(MapDriverController());
|
// Get.put(MapDriverController());
|
||||||
// callController.join();
|
// // callController.join();
|
||||||
return GetBuilder<HomeCaptainController>(
|
// return GetBuilder<HomeCaptainController>(
|
||||||
builder: (controller) => Positioned(
|
// builder: (controller) => Positioned(
|
||||||
top: Get.height * .2,
|
// top: Get.height * .2,
|
||||||
child: Container(
|
// child: Container(
|
||||||
height: 100, width: Get.width,
|
// height: 100, width: Get.width,
|
||||||
decoration: AppStyle.boxDecoration,
|
// decoration: AppStyle.boxDecoration,
|
||||||
child: Row(
|
// child: Row(
|
||||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
// mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
children: [
|
// children: [
|
||||||
GestureDetector(
|
// GestureDetector(
|
||||||
onTap: () async {
|
// onTap: () async {
|
||||||
callController.join();
|
// callController.join();
|
||||||
},
|
// },
|
||||||
child: Container(
|
// child: Container(
|
||||||
width: 50,
|
// width: 50,
|
||||||
height: 50,
|
// height: 50,
|
||||||
decoration: const BoxDecoration(
|
// decoration: const BoxDecoration(
|
||||||
shape: BoxShape.circle, color: AppColor.greenColor),
|
// shape: BoxShape.circle, color: AppColor.greenColor),
|
||||||
child: const Icon(
|
// child: const Icon(
|
||||||
Icons.phone,
|
// Icons.phone,
|
||||||
size: 35,
|
// size: 35,
|
||||||
color: AppColor.secondaryColor,
|
// color: AppColor.secondaryColor,
|
||||||
)),
|
// )),
|
||||||
),
|
// ),
|
||||||
Column(
|
// Column(
|
||||||
children: [
|
// children: [
|
||||||
Text(callController.status),
|
// Text(callController.status),
|
||||||
Text(Get.find<MapDriverController>().passengerName.toString()),
|
// Text(Get.find<MapDriverController>().passengerName.toString()),
|
||||||
],
|
// ],
|
||||||
),
|
// ),
|
||||||
GestureDetector(
|
// GestureDetector(
|
||||||
onTap: () async {
|
// onTap: () async {
|
||||||
FirebaseMessagesController().sendNotificationToPassengerToken(
|
// FirebaseMessagesController().sendNotificationToPassengerToken(
|
||||||
'Call End'.tr,
|
// 'Call End'.tr,
|
||||||
'Call End',
|
// 'Call End',
|
||||||
Get.find<MapDriverController>().tokenPassenger,
|
// Get.find<MapDriverController>().tokenPassenger,
|
||||||
[],
|
// [],
|
||||||
'iphone_ringtone.wav');
|
// 'iphone_ringtone.wav');
|
||||||
callController.leave();
|
// callController.leave();
|
||||||
Get.back();
|
// Get.back();
|
||||||
},
|
// },
|
||||||
child: Container(
|
// child: Container(
|
||||||
width: 50,
|
// width: 50,
|
||||||
height: 50,
|
// height: 50,
|
||||||
decoration: const BoxDecoration(
|
// decoration: const BoxDecoration(
|
||||||
shape: BoxShape.circle, color: AppColor.redColor),
|
// shape: BoxShape.circle, color: AppColor.redColor),
|
||||||
child: const Icon(
|
// child: const Icon(
|
||||||
Icons.phone_disabled_sharp,
|
// Icons.phone_disabled_sharp,
|
||||||
size: 35,
|
// size: 35,
|
||||||
color: AppColor.secondaryColor,
|
// color: AppColor.secondaryColor,
|
||||||
)),
|
// )),
|
||||||
)
|
// )
|
||||||
],
|
// ],
|
||||||
),
|
// ),
|
||||||
// ignore: prefer_const_constructors
|
// // ignore: prefer_const_constructors
|
||||||
),
|
// ),
|
||||||
),
|
// ),
|
||||||
);
|
// );
|
||||||
}
|
// }
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
import FlutterMacOS
|
import FlutterMacOS
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
import agora_rtc_engine
|
|
||||||
import audio_session
|
import audio_session
|
||||||
import device_info_plus
|
import device_info_plus
|
||||||
import file_selector_macos
|
import file_selector_macos
|
||||||
@@ -17,7 +16,6 @@ import flutter_secure_storage_macos
|
|||||||
import flutter_tts
|
import flutter_tts
|
||||||
import geolocator_apple
|
import geolocator_apple
|
||||||
import google_sign_in_ios
|
import google_sign_in_ios
|
||||||
import iris_method_channel
|
|
||||||
import just_audio
|
import just_audio
|
||||||
import location
|
import location
|
||||||
import package_info_plus
|
import package_info_plus
|
||||||
@@ -30,7 +28,6 @@ import video_player_avfoundation
|
|||||||
import wakelock_plus
|
import wakelock_plus
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
AgoraRtcNgPlugin.register(with: registry.registrar(forPlugin: "AgoraRtcNgPlugin"))
|
|
||||||
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
|
AudioSessionPlugin.register(with: registry.registrar(forPlugin: "AudioSessionPlugin"))
|
||||||
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
DeviceInfoPlusMacosPlugin.register(with: registry.registrar(forPlugin: "DeviceInfoPlusMacosPlugin"))
|
||||||
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin"))
|
||||||
@@ -42,7 +39,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
|||||||
FlutterTtsPlugin.register(with: registry.registrar(forPlugin: "FlutterTtsPlugin"))
|
FlutterTtsPlugin.register(with: registry.registrar(forPlugin: "FlutterTtsPlugin"))
|
||||||
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
GeolocatorPlugin.register(with: registry.registrar(forPlugin: "GeolocatorPlugin"))
|
||||||
FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
|
FLTGoogleSignInPlugin.register(with: registry.registrar(forPlugin: "FLTGoogleSignInPlugin"))
|
||||||
IrisMethodChannelPlugin.register(with: registry.registrar(forPlugin: "IrisMethodChannelPlugin"))
|
|
||||||
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
|
JustAudioPlugin.register(with: registry.registrar(forPlugin: "JustAudioPlugin"))
|
||||||
LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin"))
|
LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin"))
|
||||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||||
|
|||||||
16
pubspec.lock
16
pubspec.lock
@@ -17,14 +17,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.34"
|
version: "1.3.34"
|
||||||
agora_rtc_engine:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: agora_rtc_engine
|
|
||||||
sha256: ec84db08cd6727e3e480abe9089df4a9522aa4315f688ac2abf25a82f26c4055
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "6.3.0"
|
|
||||||
analyzer:
|
analyzer:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@@ -1160,14 +1152,6 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.4"
|
version: "1.0.4"
|
||||||
iris_method_channel:
|
|
||||||
dependency: transitive
|
|
||||||
description:
|
|
||||||
name: iris_method_channel
|
|
||||||
sha256: "78caede20be4a1dd258262fb13704aab2f16fd05ef414bed06e7b1e3b95b3413"
|
|
||||||
url: "https://pub.dev"
|
|
||||||
source: hosted
|
|
||||||
version: "2.0.1"
|
|
||||||
js:
|
js:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ dependencies:
|
|||||||
# cached_network_image: ^3.3.0 #to be remove
|
# cached_network_image: ^3.3.0 #to be remove
|
||||||
calendar_builder: ^0.0.6
|
calendar_builder: ^0.0.6
|
||||||
fl_chart: ^0.66.0
|
fl_chart: ^0.66.0
|
||||||
agora_rtc_engine: ^6.2.6
|
# agora_rtc_engine: ^6.2.6
|
||||||
flutter_tts: ^3.8.5
|
flutter_tts: ^3.8.5
|
||||||
permission_handler: ^11.3.0
|
permission_handler: ^11.3.0
|
||||||
# google_generative_ai: ^0.0.1-dev
|
# google_generative_ai: ^0.0.1-dev
|
||||||
|
|||||||
@@ -6,22 +6,18 @@
|
|||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
#include <agora_rtc_engine/agora_rtc_engine_plugin.h>
|
|
||||||
#include <file_selector_windows/file_selector_windows.h>
|
#include <file_selector_windows/file_selector_windows.h>
|
||||||
#include <firebase_auth/firebase_auth_plugin_c_api.h>
|
#include <firebase_auth/firebase_auth_plugin_c_api.h>
|
||||||
#include <firebase_core/firebase_core_plugin_c_api.h>
|
#include <firebase_core/firebase_core_plugin_c_api.h>
|
||||||
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
#include <flutter_secure_storage_windows/flutter_secure_storage_windows_plugin.h>
|
||||||
#include <flutter_tts/flutter_tts_plugin.h>
|
#include <flutter_tts/flutter_tts_plugin.h>
|
||||||
#include <geolocator_windows/geolocator_windows.h>
|
#include <geolocator_windows/geolocator_windows.h>
|
||||||
#include <iris_method_channel/iris_method_channel_plugin_c_api.h>
|
|
||||||
#include <local_auth_windows/local_auth_plugin.h>
|
#include <local_auth_windows/local_auth_plugin.h>
|
||||||
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
#include <permission_handler_windows/permission_handler_windows_plugin.h>
|
||||||
#include <record_windows/record_windows_plugin_c_api.h>
|
#include <record_windows/record_windows_plugin_c_api.h>
|
||||||
#include <url_launcher_windows/url_launcher_windows.h>
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
AgoraRtcEnginePluginRegisterWithRegistrar(
|
|
||||||
registry->GetRegistrarForPlugin("AgoraRtcEnginePlugin"));
|
|
||||||
FileSelectorWindowsRegisterWithRegistrar(
|
FileSelectorWindowsRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("FileSelectorWindows"));
|
registry->GetRegistrarForPlugin("FileSelectorWindows"));
|
||||||
FirebaseAuthPluginCApiRegisterWithRegistrar(
|
FirebaseAuthPluginCApiRegisterWithRegistrar(
|
||||||
@@ -34,8 +30,6 @@ void RegisterPlugins(flutter::PluginRegistry* registry) {
|
|||||||
registry->GetRegistrarForPlugin("FlutterTtsPlugin"));
|
registry->GetRegistrarForPlugin("FlutterTtsPlugin"));
|
||||||
GeolocatorWindowsRegisterWithRegistrar(
|
GeolocatorWindowsRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
registry->GetRegistrarForPlugin("GeolocatorWindows"));
|
||||||
IrisMethodChannelPluginCApiRegisterWithRegistrar(
|
|
||||||
registry->GetRegistrarForPlugin("IrisMethodChannelPluginCApi"));
|
|
||||||
LocalAuthPluginRegisterWithRegistrar(
|
LocalAuthPluginRegisterWithRegistrar(
|
||||||
registry->GetRegistrarForPlugin("LocalAuthPlugin"));
|
registry->GetRegistrarForPlugin("LocalAuthPlugin"));
|
||||||
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
PermissionHandlerWindowsPluginRegisterWithRegistrar(
|
||||||
|
|||||||
@@ -3,14 +3,12 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
agora_rtc_engine
|
|
||||||
file_selector_windows
|
file_selector_windows
|
||||||
firebase_auth
|
firebase_auth
|
||||||
firebase_core
|
firebase_core
|
||||||
flutter_secure_storage_windows
|
flutter_secure_storage_windows
|
||||||
flutter_tts
|
flutter_tts
|
||||||
geolocator_windows
|
geolocator_windows
|
||||||
iris_method_channel
|
|
||||||
local_auth_windows
|
local_auth_windows
|
||||||
permission_handler_windows
|
permission_handler_windows
|
||||||
record_windows
|
record_windows
|
||||||
|
|||||||
Reference in New Issue
Block a user