This commit is contained in:
Hamza-Ayed
2024-07-07 19:23:54 +03:00
parent 50a89e02cf
commit 1589c215df
18 changed files with 602 additions and 474 deletions

View File

@@ -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']
} }

View File

@@ -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>

View File

@@ -91,16 +91,30 @@ class RegisterCaptainController extends GetxController {
.post(link: AppLink.checkPhoneNumberISVerfiedDriver, payload: { .post(link: AppLink.checkPhoneNumberISVerfiedDriver, payload: {
'phone_number': '+2${phoneController.text}', 'phone_number': '+2${phoneController.text}',
}); });
var d = jsonDecode(responseCheker); if (responseCheker != 'failure') {
if (d['message'][0]['is_verified'].toString() == '1') { var d = jsonDecode(responseCheker);
Get.snackbar('Phone number is verified before'.tr, '', if (d['message'][0]['is_verified'].toString() == '1') {
backgroundColor: AppColor.greenColor); Get.snackbar('Phone number is verified before'.tr, '',
box.write(BoxName.isVerified, '1'); backgroundColor: AppColor.greenColor);
box.write(BoxName.phone, '+2${phoneController.text}'); box.write(BoxName.isVerified, '1');
await Get.put(LoginDriverController()).loginUsingCredentials( box.write(BoxName.phone, '+2${phoneController.text}');
box.read(BoxName.driverID).toString(), await Get.put(LoginDriverController()).loginUsingCredentials(
box.read(BoxName.emailDriver).toString(), box.read(BoxName.driverID).toString(),
); box.read(BoxName.emailDriver).toString(),
);
} 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;
update();
}
} else { } else {
await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: { await CRUD().post(link: AppLink.sendVerifyOtpMessage, payload: {
'phone_number': '+2${phoneController.text}', 'phone_number': '+2${phoneController.text}',

View File

@@ -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(

View File

@@ -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();
} // }
} // }

View File

@@ -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();

View File

@@ -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}');
}
}
} }

View File

@@ -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();

View File

@@ -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": "تاريخ الفحص",

View File

@@ -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,
),
);
}
}

View File

@@ -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),
), ),

View File

@@ -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,
); // );
} // }
} // }

View File

@@ -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
), // ),
), // ),
); // );
} // }

View File

@@ -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"))

View File

@@ -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:

View File

@@ -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
@@ -74,22 +74,22 @@ dev_dependencies:
build_runner: build_runner:
flutter_launcher_icons: flutter_launcher_icons:
android: "launcher_icon" android: "launcher_icon"
ios: true ios: true
image_path: "assets/images/logo.png" image_path: "assets/images/logo.png"
min_sdk_android: 21 min_sdk_android: 21
web: web:
generate: true generate: true
image_path: "assets/images/logo.png" image_path: "assets/images/logo.png"
background_color: "#hexcode" background_color: "#hexcode"
theme_color: "#hexcode" theme_color: "#hexcode"
windows: windows:
generate: true generate: true
image_path: "assets/images/logo.png" image_path: "assets/images/logo.png"
icon_size: 48 icon_size: 48
macos: macos:
generate: true generate: true
image_path: "assets/images/logo.png" image_path: "assets/images/logo.png"
flutter: flutter:
uses-material-design: true uses-material-design: true

View File

@@ -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(

View File

@@ -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