diff --git a/.env b/.env index 4adb03f..29cbfd6 100644 --- a/.env +++ b/.env @@ -27,4 +27,6 @@ usernamePayMob=37319104052XrXlBl passwordPayMob='g@nkD2#99!hD_.wXrXlBl' integrationIdPayMob=0552355XrXlBl payMobApikey='MDrGqKEWS1rVqHvEPDvPjJ7vZDBExrO7S3BEBgrlfUwTA3i5RnP5ZnvoL3M2S9rEBgrlNTdexH5pTPf7NJrvy1reZJv1Tn7zf7vTIDywjHg1C7Ley38HTDyNA3v7TPfdxJrax1rwPmPtMJyzqKEYZeghq3MuLUrFH3A1AgHcH15CZ9UaZTLOxnw0BTdzHHrBArisZerUMUUzZ1BnBeEijHvNjYLnS1BUICMhSmPhA15ifHyVqKEMHWyKLbyuIPvcH9UeL3vZyDf=XrXlBl' -integrationIdPayMobWallet=0552352XrXlBl \ No newline at end of file +integrationIdPayMobWallet=0552352XrXlBl +Ocp-Apim-Subscription-Key=21010e54b50f41a4904708c526e102df +smsPasswordEgypt="E)Pu=an/@Z" \ No newline at end of file diff --git a/assets/images/logo.png b/assets/images/logo.png index f973fc6..8ea9f60 100644 Binary files a/assets/images/logo.png and b/assets/images/logo.png differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 44fdb75..a5f5c2a 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -21,7 +21,7 @@ CFBundlePackageType APPL CFBundleShortVersionString - 23 + 24 CFBundleSignature ???? CFBundleURLTypes @@ -36,7 +36,7 @@ CFBundleVersion - 2.0.1 + 2.0.12 FirebaseAppDelegateProxyEnabled NO GMSApiKey diff --git a/lib/constant/api_key.dart b/lib/constant/api_key.dart index 52dd51b..e07f9d8 100644 --- a/lib/constant/api_key.dart +++ b/lib/constant/api_key.dart @@ -52,4 +52,6 @@ class AK { a.r(a.r(a.r(Env.payMobApikey, cn), cC), cs); static final String integrationIdPayMobWallet = a.r(a.r(a.r(Env.integrationIdPayMobWallet, cn), cC), cs); + static final String smsPassword = + a.r(a.r(a.r(Env.integrationIdPayMobWallet, cn), cC), cs); } diff --git a/lib/constant/box_name.dart b/lib/constant/box_name.dart index a821afc..4c598a4 100644 --- a/lib/constant/box_name.dart +++ b/lib/constant/box_name.dart @@ -9,6 +9,7 @@ class BoxName { static const String statusDriverLocation = "statusDriverLocation"; static const String password = "password"; static const String arrivalTime = "arrivalTime"; + static const String locationPermission = "locationPermission"; static const String passwordDriver = "passwordDriver"; static const String agreeTerms = "agreeTerms"; static const String addWork = 'addWork'; diff --git a/lib/constant/links.dart b/lib/constant/links.dart index a277cc4..f5ae72e 100644 --- a/lib/constant/links.dart +++ b/lib/constant/links.dart @@ -208,4 +208,12 @@ class AppLink { static String getRidesPerMonth = "$server/Admin/AdminRide/getRidesPerMonth.php"; static String getRidesDetails = "$server/Admin/AdminRide/get.php"; + +//////////Sms egypt/////////// + static String sendSms = "https://sms.kazumi.me/api/sms/send-sms"; + static String senddlr = "https://sms.kazumi.me/api/sms/send-dlr"; + static String sendvalidity = "https://sms.kazumi.me/api/sms/send-validity"; + static String sendmany = "https://sms.kazumi.me/api/sms/send-many"; + static String checkCredit = "https://sms.kazumi.me/api/sms/check-credit"; + static String checkStatus = "https://sms.kazumi.me/api/sms/check-status"; } diff --git a/lib/controller/admin/captain_admin_controller.dart b/lib/controller/admin/captain_admin_controller.dart deleted file mode 100644 index f73327f..0000000 --- a/lib/controller/admin/captain_admin_controller.dart +++ /dev/null @@ -1,109 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:local_auth/local_auth.dart'; - -import '../../constant/colors.dart'; -import '../../constant/links.dart'; -import '../functions/crud.dart'; - -class CaptainAdminController extends GetxController { - bool isLoading = false; - Map captainData = {}; - Map captain = {}; - final captainController = TextEditingController(); - final captainPrizeController = TextEditingController(); - final titleNotify = TextEditingController(); - final bodyNotify = TextEditingController(); - final formCaptainKey = GlobalKey(); - final formCaptainPrizeKey = GlobalKey(); - - Future getCaptainCount() async { - isLoading = true; - update(); - var res = await CRUD().get(link: AppLink.getCaptainDetails, payload: {}); - var d = jsonDecode(res); - if (d['status'] == 'success') { - captainData = d; - print(captainData); - } - - isLoading = false; - update(); - } - - Future addCaptainPrizeToWallet() async { - String? paymentId; - //todo link to add wallet to captain - for (var i = 0; i < captainData['message'].length; i++) { - await CRUD().post(link: AppLink.addDriverPaymentPoints, payload: { - 'driverID': captainData['message'][i]['id'], - 'amount': captainPrizeController.text, - 'paymentMethod': 'Prize', - }).then((value) { - paymentId = value['message'].toString(); - }); - await CRUD().post(link: AppLink.addPassengersWallet, payload: { - 'driverID': captainData['message'][i]['id'], - 'amount': captainPrizeController.text, - 'paymentMethod': 'Prize', - 'paymentID': paymentId.toString(), - }); - } - - Get.back(); - } - - void addCaptainsPrizeToWalletSecure() async { - try { - // Check if local authentication is available - bool isAvailable = await LocalAuthentication().isDeviceSupported(); - if (isAvailable) { - // Authenticate the user - bool didAuthenticate = await LocalAuthentication().authenticate( - localizedReason: 'Use Touch ID or Face ID to confirm payment', - ); - if (didAuthenticate) { - // User authenticated successfully, proceed with payment - await addCaptainPrizeToWallet(); - Get.snackbar('Prize Added', '', backgroundColor: AppColor.greenColor); - } else { - // Authentication failed, handle accordingly - Get.snackbar('Authentication failed', '', - backgroundColor: AppColor.redColor); - // print( - // 'Authentication failed'); - } - } else { - // Local authentication not available, proceed with payment without authentication - await addCaptainPrizeToWallet(); - Get.snackbar('Prize Added', '', backgroundColor: AppColor.greenColor); - } - } catch (e) { - rethrow; - } - } - - Future getCaptains() async { - var res = await CRUD() - .get(link: AppLink.getCaptainDetailsByEmailOrIDOrPhone, payload: { - 'driver_id': captainController.text, - 'driverEmail': captainController.text, - 'driverPhone': captainController.text, - }); - var d = jsonDecode(res); - // print(d['message']); - if (d['status'] == 'success') { - captain = d; - } - // print(passengers); - update(); - } - - @override - void onInit() { - getCaptainCount(); - super.onInit(); - } -} diff --git a/lib/controller/admin/passenger_admin_controller.dart b/lib/controller/admin/passenger_admin_controller.dart deleted file mode 100644 index ce16916..0000000 --- a/lib/controller/admin/passenger_admin_controller.dart +++ /dev/null @@ -1,110 +0,0 @@ -import 'dart:convert'; - -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:local_auth/local_auth.dart'; -import 'package:SEFER/constant/colors.dart'; -import 'package:SEFER/constant/links.dart'; -import 'package:SEFER/controller/functions/crud.dart'; - -class PassengerAdminController extends GetxController { - bool isLoading = false; - Map passengersData = {}; - Map passengers = {}; - double height = 150; - final formPassKey = GlobalKey(); - final formPrizeKey = GlobalKey(); - final titleNotify = TextEditingController(); - final bodyNotify = TextEditingController(); - final passengerController = TextEditingController(); - final passengerPrizeController = TextEditingController(); - - Future getPassengerCount() async { - isLoading = true; - update(); - var res = await CRUD().get(link: AppLink.getPassengerDetails, payload: {}); - var d = jsonDecode(res); - if (d['status'] == 'success') { - passengersData = d; - } - - isLoading = false; - update(); - } - - Future addPassengerPrizeToWallet() async { - for (var i = 0; i < passengersData['message'].length; i++) { - await CRUD().post(link: AppLink.addPassengersWallet, payload: { - 'passenger_id': passengersData['message'][i]['id'], - 'balance': passengerPrizeController.text, - }); - } - - Get.back(); - } - - void addPassengerPrizeToWalletSecure() async { - try { - // Check if local authentication is available - bool isAvailable = await LocalAuthentication().isDeviceSupported(); - if (isAvailable) { - // Authenticate the user - bool didAuthenticate = await LocalAuthentication().authenticate( - localizedReason: 'Use Touch ID or Face ID to confirm payment', - ); - if (didAuthenticate) { - // User authenticated successfully, proceed with payment - await addPassengerPrizeToWallet(); - Get.snackbar('Prize Added', '', backgroundColor: AppColor.greenColor); - } else { - // Authentication failed, handle accordingly - Get.snackbar('Authentication failed', '', - backgroundColor: AppColor.redColor); - // print( - // 'Authentication failed'); - } - } else { - // Local authentication not available, proceed with payment without authentication - await addPassengerPrizeToWallet(); - Get.snackbar('Prize Added', '', backgroundColor: AppColor.greenColor); - } - } catch (e) { - rethrow; - } - } - - Future getPassengers() async { - var res = await CRUD().get(link: AppLink.getPassengerbyEmail, payload: { - 'passengerEmail': passengerController.text, - 'passengerId': passengerController.text, - 'passengerphone': passengerController.text, - }); - var d = jsonDecode(res); - // print(d['message']); - if (d['status'] == 'success') { - passengers = d; - } - // print(passengers); - update(); - } - - changeHeight() { - if (passengers.isEmpty) { - height = 0; - update(); - } - height = 150; - update(); - } - - void clearPlaces() { - passengers = {}; - update(); - } - - @override - void onInit() { - getPassengerCount(); - super.onInit(); - } -} diff --git a/lib/controller/admin/ride_admin_controller.dart b/lib/controller/admin/ride_admin_controller.dart deleted file mode 100644 index 9397b79..0000000 --- a/lib/controller/admin/ride_admin_controller.dart +++ /dev/null @@ -1,73 +0,0 @@ -import 'dart:convert'; - -import 'package:fl_chart/fl_chart.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/constant/links.dart'; -import 'package:SEFER/controller/functions/crud.dart'; - -import '../../models/model/admin/monthly_ride.dart'; - -class RideAdminController extends GetxController { - bool isLoading = false; - late List rideData; - late Map jsonResponse; - List ridesDetails = []; - var chartData; - // late List chartDatasync; - Future getRidesAdminDash() async { - isLoading = true; - update(); - var res = await CRUD().get(link: AppLink.getRidesPerMonth, payload: {}); - jsonResponse = jsonDecode(res); - rideData = (jsonResponse['message'] as List) - .map((item) => MonthlyDataModel.fromJson(item)) - .toList(); - - chartData = rideData - .map((data) => FlSpot(data.day.toDouble(), data.ridesCount.toDouble())) - .toList(); - - // chartDatasync = (jsonResponse['message'] as List) - // .map((item) => ChartDataS( - // item['year'], - // item['month'], - // item['day'], - // item['rides_count'], - // )) - // .toList(); - isLoading = false; - update(); - } - - Future getRidesDetails() async { - // isLoading = true; - // update(); - var res = await CRUD().get(link: AppLink.getRidesDetails, payload: {}); - - var d = jsonDecode(res); - ridesDetails = d['message']; - - // isLoading = false; - // update(); - } - - @override - void onInit() async { - List initializationTasks = [ - getRidesAdminDash(), - getRidesDetails(), - ]; - // cameras = await availableCameras(); - await Future.wait(initializationTasks); - super.onInit(); - } -} - -// class ChartDataS { -// ChartDataS(this.year, this.month, this.day, this.ridesCount); - -// final int year; -// final int month; -// final int day; -// final int ridesCount; -// } diff --git a/lib/controller/admin/wallet_admin_controller.dart b/lib/controller/admin/wallet_admin_controller.dart deleted file mode 100644 index 1f8a534..0000000 --- a/lib/controller/admin/wallet_admin_controller.dart +++ /dev/null @@ -1,20 +0,0 @@ -import 'dart:convert'; - -import 'package:get/get.dart'; - -import '../../constant/links.dart'; -import '../functions/crud.dart'; - -class WalletAdminController extends GetxController { - bool isLoading = false; - - late Map jsonResponse; - List walletDetails = []; - - Future getWalletAdminDash() async { - isLoading = true; - update(); - var res = await CRUD().get(link: AppLink.getRidesPerMonth, payload: {}); - jsonResponse = jsonDecode(res); - } -} diff --git a/lib/controller/auth/captin/login_captin_controller.dart b/lib/controller/auth/captin/login_captin_controller.dart index 23ffbcf..c6622bb 100644 --- a/lib/controller/auth/captin/login_captin_controller.dart +++ b/lib/controller/auth/captin/login_captin_controller.dart @@ -11,6 +11,7 @@ import 'package:SEFER/controller/functions/secure_storage.dart'; import 'package:SEFER/main.dart'; import 'package:SEFER/views/auth/captin/verify_email_captain.dart'; import 'package:SEFER/views/home/Captin/home_captain/home_captin.dart'; +import 'package:location/location.dart'; class LoginCaptinController extends GetxController { final formKey = GlobalKey(); @@ -20,7 +21,7 @@ class LoginCaptinController extends GetxController { bool isAgreeTerms = false; bool isloading = false; final FlutterSecureStorage _storage = const FlutterSecureStorage(); - + final location = Location(); void changeAgreeTerm() { isAgreeTerms = !isAgreeTerms; print(isAgreeTerms); @@ -37,6 +38,38 @@ class LoginCaptinController extends GetxController { update(); } + Future getLocationPermission() async { + bool serviceEnabled; + PermissionStatus permissionGranted; + + // Check if location services are enabled + serviceEnabled = await location.serviceEnabled(); + if (!serviceEnabled) { + serviceEnabled = await location.requestService(); + if (!serviceEnabled) { + // Location services are still not enabled, handle the error + return; + } + } + + // Check if the app has permission to access location + permissionGranted = await location.hasPermission(); + if (permissionGranted == PermissionStatus.denied) { + permissionGranted = await location.requestPermission(); + if (permissionGranted != PermissionStatus.granted) { + // Location permission is still not granted, handle the error + permissionGranted = await location.requestPermission(); + return; + } + } + print('permisson is ${permissionGranted.toString()}'); + if ('PermissionStatus.granted' == permissionGranted.toString()) { + box.write(BoxName.locationPermission, 'true'); + update(); + } + update(); + } + void login() async { isloading = true; update(); @@ -46,7 +79,8 @@ class LoginCaptinController extends GetxController { 'password': passwordController.text }); print(res); - if (res == 'Failure') { + if (res == 'failure') { + //Failure isloading = false; update(); Get.snackbar('Failure', '', backgroundColor: Colors.red); diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart index 650926d..9413c20 100644 --- a/lib/controller/auth/login_controller.dart +++ b/lib/controller/auth/login_controller.dart @@ -12,7 +12,6 @@ import 'package:SEFER/controller/functions/secure_storage.dart'; import 'package:SEFER/main.dart'; import 'package:SEFER/views/auth/verify_email_page.dart'; -import '../../views/admin/admin_home_page.dart'; import '../functions/device_info.dart'; class LoginController extends GetxController { @@ -43,38 +42,6 @@ class LoginController extends GetxController { update(); } - void adminDashboardOpen() async { - if (formKeyAdmin.currentState!.validate()) { - await DeviceInfoPlus.getDeviceInfo(); - if (Platform.isAndroid) { - // print(DeviceInfoPlus.deviceDataList['serialNumber']); - // var res = await CRUD().get(link: AppLink.getAdminUser, payload: { - // // 'device_number': DeviceInfoPlus.deviceData['serialNumber'].toString(), - // }); - // var d = jsonDecode(res); - // // print(d); - // // if (DeviceInfoPlus.deviceData['serialNumber'] == - // d['message']['device_number']) { - Get.back(); - Get.to(() => const AdminHomePage()); - // } - } - if (Platform.isIOS) { - // print(DeviceInfoPlus.deviceData['identifierForVendor']); - // var res = await CRUD().get(link: AppLink.getAdminUser, payload: { - // 'device_number': DeviceInfoPlus.deviceData['identifierForVendor'].toString(), - // }); - // var d = jsonDecode(res); - // print(d); - // if (DeviceInfoPlus.deviceData['serialNumber'] == - // d['message']['device_number']) { - Get.back(); - Get.to(() => const AdminHomePage()); - // } - } - } - } - void login() async { isloading = true; update(); @@ -85,7 +52,8 @@ class LoginController extends GetxController { }); isloading = false; update(); - if (res == 'Failure') { + if (res == 'failure') { + //Failure Get.snackbar('Failure', '', backgroundColor: Colors.red); } else { // print(res); @@ -95,10 +63,10 @@ class LoginController extends GetxController { if (jsonDecoeded['status'] == 'success') { print(jsonDecoeded['data'][0]['verified']); if (jsonDecoeded['data'][0]['verified'] == 1) { - box.write(BoxName.passengerID, jsonDecoeded['data'][0]['id']); - box.write(BoxName.email, jsonDecoeded['data'][0]['email']); + box.write(BoxName.driverID, jsonDecoeded['data'][0]['id']); + box.write(BoxName.emailDriver, jsonDecoeded['data'][0]['email']); box.write( - BoxName.name, + BoxName.nameDriver, jsonDecoeded['data'][0]['first_name'] + ' ' + jsonDecoeded['data'][0]['last_name']); diff --git a/lib/controller/firebase/firbase_messge.dart b/lib/controller/firebase/firbase_messge.dart index 5e38427..59e384f 100644 --- a/lib/controller/firebase/firbase_messge.dart +++ b/lib/controller/firebase/firbase_messge.dart @@ -11,7 +11,6 @@ import 'package:SEFER/views/widgets/elevated_btn.dart'; import '../../constant/api_key.dart'; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; -import '../../constant/links.dart'; import '../../constant/style.dart'; import '../../main.dart'; import '../../views/home/Captin/home_captain/home_captin.dart'; @@ -63,32 +62,6 @@ class FirebaseMessagesController extends GetxController { } } - Future getTokens() async { - String? basicAuthCredentials = - await storage.read(key: BoxName.basicAuthCredentials); - var res = await http.post( - Uri.parse(AppLink.getTokens), - headers: { - 'Authorization': - 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials))}', - }, - body: {}, - ); - // print(res.body); - var jsonResponse = jsonDecode(res.body); - // print(jsonResponse); - if (jsonResponse['status'] == 'success') { - dataTokens = jsonResponse['data']; - for (var i = 0; i < dataTokens.length; i++) { - tokens.add(jsonResponse['data'][i]['token']); - } - box.write(BoxName.tokens, tokens); - print(box.read(BoxName.tokens)); - } else { - Get.defaultDialog(title: "Warning", middleText: "Server Error"); - } - } - Future getToken() async { fcmToken.getToken().then((token) { if (box.read(BoxName.email) == null) { @@ -108,6 +81,20 @@ class FirebaseMessagesController extends GetxController { fireBaseTitles(message); } }); + FirebaseMessaging.onBackgroundMessage((RemoteMessage message) async { + // Handle background message + if (message.data.isNotEmpty && message.notification != null) { + print(message.notification?.title); + fireBaseTitles(message); + } + }); + + FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) { + if (message.data.isNotEmpty && message.notification != null) { + print(message.notification?.title); + fireBaseTitles(message); + } + }); } void fireBaseTitles(RemoteMessage message) { diff --git a/lib/controller/functions/crud.dart b/lib/controller/functions/crud.dart index 6e28b58..a8f1824 100644 --- a/lib/controller/functions/crud.dart +++ b/lib/controller/functions/crud.dart @@ -28,9 +28,9 @@ class CRUD { 'Basic ${base64Encode(utf8.encode(AK.basicAuthCredentials.toString()))}', }, ); - print("-----request----" + response.request.toString()); + // print("-----request----" + response.request.toString()); // print("-----headers-----" + response.headers.toString()); - print("-----payload-----" + payload.toString()); + // print("-----payload-----" + payload.toString()); // if (response.statusCode == 200) { // print(response.body); var jsonData = jsonDecode(response.body); @@ -104,40 +104,79 @@ class CRUD { Future allMethodForAI(String prompt, linkPHP, imagePath) async { await ImageController().choosImage(linkPHP, imagePath); Future.delayed(const Duration(seconds: 2)); - String extracted = + var extractedString = await arabicTextExtractByVisionAndAI(imagePath: imagePath); + // print('extractedString'); + var json = jsonDecode(extractedString); + // print(extractedString); + // print(json); + var textValues = getAllTextValuesWithLineNumbers(json); + // List textValues = getAllTextValues(json); - Map extractedData = extractText(extracted); - print(extractedData); - // await AI().geminiAiExtraction(prompt, extractedData); + print('extractedData'); + print(textValues); + await AI().geminiAiExtraction(prompt, textValues); } - Map extractText(String jsonData) { - Map data = jsonDecode(jsonData); - List> textLines = []; + Map>> getAllTextValuesWithLineNumbers( + Map json) { + Map>> output = {}; + int lineNumber = 1; - for (var region in data['regions']) { - List lineTexts = []; - for (var line in region['lines']) { - String lineText = ""; - for (var word in line['words']) { - lineText += word['text'] + " "; + if (json.containsKey('regions')) { + List regions = json['regions']; + for (Map region in regions) { + if (region.containsKey('lines')) { + List lines = region['lines']; + List> linesWithText = []; + for (Map line in lines) { + if (line.containsKey('words')) { + List words = line['words']; + String lineText = ""; + for (Map word in words) { + if (word.containsKey('text')) { + lineText += word['text'] + " "; + } + } + lineText = lineText.trim(); + linesWithText.add( + {"line_number": lineNumber.toString(), "text": lineText}); + lineNumber++; + } + } + output["region_${region.hashCode}"] = linesWithText; } - lineText = lineText.trim(); - lineTexts.add(lineText); } - textLines.add(lineTexts); } - // You can choose between returning a new JSON or a List based on your needs - - // Option 1: Return a new JSON with "textLines" key - return {"textLines": textLines}; - - // Option 2: Return a List of List (lines with words) - // return textLines; + return output; } + // List getAllTextValues(Map json) { + // List textValues = []; + + // if (json.containsKey('regions')) { + // List regions = json['regions']; + // for (Map region in regions) { + // if (region.containsKey('lines')) { + // List lines = region['lines']; + // for (Map line in lines) { + // if (line.containsKey('words')) { + // List words = line['words']; + // for (Map word in words) { + // if (word.containsKey('text')) { + // textValues.add(word['text']); + // } + // } + // } + // } + // } + // } + // } + + // return textValues; + // } + Future arabicTextExtractByVisionAndAI({ required String imagePath, }) async { @@ -145,27 +184,27 @@ class CRUD { 'Content-Type': 'application/json', 'Ocp-Apim-Subscription-Key': '21010e54b50f41a4904708c526e102df' }; - var url = Uri.parse( - 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar', - ); + // var url = Uri.parse( + // 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar', + // ); String imagePathFull = - '${AppLink.server}card_image/$imagePath-${box.read(BoxName.driverID) ?? box.read(BoxName.passengerID)}.jpg'; + '${AppLink.server}card_image/$imagePath-${box.read(BoxName.driverID)}.jpg'; - // print('imagePath=$imagePathFull'); - var requestBody = {"url": imagePathFull}; - var response = await http.post( - url, - body: jsonEncode(requestBody), // Encode the JSON object to a string - headers: headers, - ); + var request = http.Request( + 'POST', + Uri.parse( + 'https://ocrhamza.cognitiveservices.azure.com/vision/v2.1/ocr?language=ar')); + request.body = json.encode({"url": imagePathFull}); + request.headers.addAll(headers); + + http.StreamedResponse response = await request.send(); if (response.statusCode == 200) { - var responseBody = jsonDecode(response.body); - print(responseBody); - print('imagePath=$imagePathFull'); - return responseBody.toString(); + // print(await response.stream.bytesToString()); + return await response.stream.bytesToString(); + } else { + print(response.reasonPhrase); } - return response.statusCode; } Future getChatGPT({ diff --git a/lib/controller/functions/gemeni.dart b/lib/controller/functions/gemeni.dart index 11cb685..65fcea1 100644 --- a/lib/controller/functions/gemeni.dart +++ b/lib/controller/functions/gemeni.dart @@ -171,7 +171,7 @@ class AI extends GetxController { // }, { 'text': - "Extract the desired information from the following passage as json decoded like $prompt just in this:\n\n$payload" + "Extract the desired information from the following passage as json decoded like $prompt .and look for this instruction first name in line 3or 2 ,fullname in line 4 from it written left to right but you modify it rtl,address in line 5 it written left to right but you modify it rtl and 6,dob,nationalid in the last line as just in this:\n\n$payload" }, ], }, @@ -196,7 +196,7 @@ class AI extends GetxController { }, ] }); - print(requestBody); + // print(requestBody); final response = await http.post( Uri.parse( diff --git a/lib/controller/functions/location_controller.dart b/lib/controller/functions/location_controller.dart index ac0dcbf..4a5f0b6 100644 --- a/lib/controller/functions/location_controller.dart +++ b/lib/controller/functions/location_controller.dart @@ -81,7 +81,7 @@ class LocationController extends GetxController { // ))); // } Get.find() - .mapHomeCaptainController + .mapHomeCaptainController! .animateCamera(CameraUpdate.newLatLng(LatLng( Get.find().myLocation.latitude, Get.find().myLocation.longitude, diff --git a/lib/controller/functions/sms_egypt.dart b/lib/controller/functions/sms_egypt.dart new file mode 100644 index 0000000..e13de95 --- /dev/null +++ b/lib/controller/functions/sms_egypt.dart @@ -0,0 +1,80 @@ +import 'package:SEFER/constant/api_key.dart'; +import 'package:SEFER/constant/box_name.dart'; +import 'package:SEFER/constant/info.dart'; +import 'package:SEFER/constant/links.dart'; +import 'package:SEFER/main.dart'; +import 'package:SEFER/views/widgets/elevated_btn.dart'; +import 'package:get/get.dart'; +import 'package:http/http.dart' as http; + +class SmsEgypt extends GetxController { + var headers = {'Content-Type': 'application/json'}; + + Future sendSmsEgypt(String phone, otp) async { + var res = await http.post( + Uri.parse(AppLink.sendSms), + body: { + "username": AppInformation.appName, + "password": AK.smsPassword, + "message": "${AppInformation.appName} app code is $otp\ncopy it to app", + "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', + "sender": "Kazumi", // todo add sefer sender name + "receiver": "2$phone" + }, + headers: headers, + ); + if (res.statusCode == 200) { + Get.defaultDialog( + title: 'You will recieve code in sms message'.tr, + middleText: '', + confirm: MyElevatedButton( + title: 'OK'.tr, + onPressed: () { + Get.back(); + })); + } + } + + Future checkCredit(String phone, otp) async { + var res = await http.post( + Uri.parse(AppLink.checkCredit), + body: { + "username": AppInformation.appName, + "password": AK.smsPassword, + }, + headers: headers, + ); + print(res); + } + + Future sendSmsWithValidaty(String phone, otp) async { + var res = await http.post( + Uri.parse(AppLink.checkCredit), + body: { + "username": AppInformation.appName, + "password": AK.smsPassword, + "message": "This is an example SMS message.", + "language": box.read(BoxName.lang) == 'en' ? "e" : 'r', + "sender": "Kazumi", // todo add sefer sender name + "receiver": "2$phone", + "validity": "10", + "StartTime": DateTime.now().toString() // "1/1/2024 10:00:00" + }, + headers: headers, + ); + print(res); + } + + Future sendSmsStatus(String smsid) async { + var res = await http.post( + Uri.parse(AppLink.checkCredit), + body: { + "username": AppInformation.appName, + "password": AK.smsPassword, + "smsid": smsid //"00b77dfc-5b8f-474d-9def-9f0158b70f98" + }, + headers: headers, + ); + print(res); + } +} diff --git a/lib/controller/functions/upload_image.dart b/lib/controller/functions/upload_image.dart index 7ee60a4..ff29be8 100644 --- a/lib/controller/functions/upload_image.dart +++ b/lib/controller/functions/upload_image.dart @@ -7,7 +7,7 @@ import 'package:http/http.dart' as http; import 'package:image_cropper/image_cropper.dart'; import 'package:image_picker/image_picker.dart'; import 'package:path/path.dart'; - +import 'package:image/image.dart' as image_package; import '../../constant/box_name.dart'; import '../../constant/colors.dart'; import '../../main.dart'; @@ -21,6 +21,7 @@ class ImageController extends GetxController { choosImage(String link, String imageType) async { final pickedImage = await picker.pickImage(source: ImageSource.gallery); image = File(pickedImage!.path); + croppedFile = await ImageCropper().cropImage( sourcePath: image!.path, aspectRatioPresets: [ diff --git a/lib/controller/home/captin/home_captain_controller.dart b/lib/controller/home/captin/home_captain_controller.dart index 0944d1a..24746c8 100644 --- a/lib/controller/home/captin/home_captain_controller.dart +++ b/lib/controller/home/captin/home_captain_controller.dart @@ -164,7 +164,17 @@ class HomeCaptainController extends GetxController { update(); } - late GoogleMapController mapHomeCaptainController; + // late GoogleMapController mapHomeCaptainController; + // void onMapCreated(GoogleMapController controller) { + // mapHomeCaptainController = controller; + // controller.getVisibleRegion(); + // // Animate camera to user location (optional) + // controller.animateCamera( + // CameraUpdate.newLatLng(Get.find().myLocation), + // ); + // } + GoogleMapController? mapHomeCaptainController; // Initialize to null + void onMapCreated(GoogleMapController controller) { mapHomeCaptainController = controller; controller.getVisibleRegion(); @@ -221,7 +231,7 @@ class HomeCaptainController extends GetxController { getCountRideToday(); getAllPayment(); startPeriodicExecution(); - onMapCreated(mapHomeCaptainController); + onMapCreated(mapHomeCaptainController!); totalPoints = Get.find().totalPoints; getRefusedOrderByCaptain(); // LocationController().getLocation(); diff --git a/lib/controller/home/payment/captain_wallet_controller.dart b/lib/controller/home/payment/captain_wallet_controller.dart index d5da05d..c22829b 100644 --- a/lib/controller/home/payment/captain_wallet_controller.dart +++ b/lib/controller/home/payment/captain_wallet_controller.dart @@ -44,18 +44,14 @@ class CaptainWalletController extends GetxController { payload: {'driverID': box.read(BoxName.driverID)}, ); walletDate = jsonDecode(res); - totalAmount = walletDate['message'][0]['total_amount'].toString() == null - ? '0' - : walletDate['message'][0]['total_amount']; + totalAmount = walletDate['message'][0]['total_amount'] ?? '0'; print(totalAmount); var res1 = await CRUD().get( link: AppLink.getAllPaymentVisa, payload: {'driverID': box.read(BoxName.driverID)}); walletDateVisa = jsonDecode(res1); - totalAmountVisa = walletDateVisa['message'][0]['diff'].toString() == null - ? '0' - : walletDateVisa['message'][0]['diff']; + totalAmountVisa = walletDateVisa['message'][0]['diff'] ?? '0'; print(totalAmountVisa); isLoading = false; update(); diff --git a/lib/controller/home/splash_screen_controlle.dart b/lib/controller/home/splash_screen_controlle.dart index aa1c3a0..e9f92d9 100644 --- a/lib/controller/home/splash_screen_controlle.dart +++ b/lib/controller/home/splash_screen_controlle.dart @@ -47,7 +47,7 @@ class SplashScreenController extends GetxController Timer(const Duration(seconds: 4), () { box.read(BoxName.onBoarding) == null ? Get.off(() => OnBoardingPage()) - : box.read(BoxName.dobDriver) != null + : box.read(BoxName.emailDriver) != null ? Get.off(() => HomeCaptain()) : Get.off(() => LoginCaptin()); }); diff --git a/lib/main.dart b/lib/main.dart index 18d4d6b..db3b182 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,7 @@ +import 'dart:convert'; import 'dart:io'; import 'package:SEFER/controller/payment/paymob/paymob_response.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_messaging/firebase_messaging.dart'; import 'package:flutter/material.dart'; @@ -12,7 +12,6 @@ import 'package:get_storage/get_storage.dart'; import 'package:flutter/services.dart'; import 'package:wakelock_plus/wakelock_plus.dart'; import 'constant/api_key.dart'; -import 'constant/box_name.dart'; import 'constant/credential.dart'; import 'constant/info.dart'; import 'controller/firebase/firbase_messge.dart'; @@ -25,6 +24,7 @@ import 'controller/payment/paymob/paymob_wallet.dart'; import 'firebase_options.dart'; import 'models/db_sql.dart'; import 'splash_screen_page.dart'; +import 'views/home/Captin/orderCaptin/order_request_page.dart'; final box = GetStorage(); const storage = FlutterSecureStorage(); @@ -36,9 +36,25 @@ DbSql sql = DbSql.instance; @pragma('vm:entry-point') Future backgroundMessageHandler(RemoteMessage message) async { await Firebase.initializeApp(); - print('===========back===${message.notification?.title}'); + if (message.data.isNotEmpty && message.notification != null) { + print(message.notification?.title); + FirebaseMessagesController().fireBaseTitles(message); + } +} - FirebaseMessagesController().fireBaseTitles(message); +Future handleBackgroundNotificationClick(RemoteMessage message) async { + // Perform any necessary setup or initialization + await Firebase.initializeApp(); + + var myListString = message.data['DriverList']; + var myList = jsonDecode(myListString) as List; + + Get.to(() => OrderRequestPage(), arguments: { + 'myListString': myListString, + 'DriverList': myList, + // 'PolylineJson': myPoints, + 'body': message.notification?.body, + }); } void main() async { @@ -130,6 +146,12 @@ class MyApp extends StatelessWidget { key: UniqueKey(), // routes: {'/':const HomePage()}, // home: LoginCaptin()); + getPages: [ + GetPage(name: '/', page: () => SplashScreen()), + GetPage( + name: '/OrderRequestPage/:id', page: () => OrderRequestPage()), + ], + initialRoute: '/', home: SplashScreen()); } } diff --git a/lib/views/Rate/ride_calculate_driver.dart b/lib/views/Rate/ride_calculate_driver.dart index 72c1712..6a15513 100644 --- a/lib/views/Rate/ride_calculate_driver.dart +++ b/lib/views/Rate/ride_calculate_driver.dart @@ -6,7 +6,6 @@ import 'package:SEFER/constant/info.dart'; import 'package:SEFER/constant/style.dart'; import 'package:SEFER/views/widgets/my_scafold.dart'; import 'package:SEFER/views/widgets/mycircular.dart'; -import 'package:flutter/animation.dart'; import '../../controller/home/captin/duration_controller .dart'; class RideCalculateDriver extends StatelessWidget { diff --git a/lib/views/admin/admin_home_page.dart b/lib/views/admin/admin_home_page.dart deleted file mode 100644 index b6f17c0..0000000 --- a/lib/views/admin/admin_home_page.dart +++ /dev/null @@ -1,111 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:get/get_rx/src/rx_typedefs/rx_typedefs.dart'; -import 'package:SEFER/constant/box_name.dart'; -import 'package:SEFER/constant/links.dart'; -import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/controller/functions/crud.dart'; -import 'package:SEFER/main.dart'; -import 'package:SEFER/views/admin/rides/rides.dart'; -import 'package:SEFER/views/admin/static/static.dart'; -import 'package:SEFER/views/admin/wallet/wallet.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; - -import '../../controller/auth/captin/ml_google_doc.dart'; -import '../../controller/functions/device_info.dart'; -import '../../controller/functions/gemeni.dart'; -import 'captain/captain.dart'; -import 'passenger/passenger.dart'; - -class AdminHomePage extends StatelessWidget { - const AdminHomePage({super.key}); - - @override - Widget build(BuildContext context) { - return MyScafolld( - title: 'Admin Home Page', - body: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Wrap( - crossAxisAlignment: WrapCrossAlignment.center, - alignment: WrapAlignment.center, - children: [ - AdminWidgetsDashBoard( - title: 'Passengers', - onPressed: () => Get.to(() => Passengrs(), - transition: Transition.topLevel)), - AdminWidgetsDashBoard( - title: 'Captains', - onPressed: () => - Get.to(() => Captain(), transition: Transition.size)), - AdminWidgetsDashBoard( - title: 'Wallet', - onPressed: () => - Get.to(() => Wallet(), transition: Transition.fade)), - AdminWidgetsDashBoard( - title: 'Rides', - onPressed: () => - Get.to(() => Rides(), transition: Transition.downToUp)), - AdminWidgetsDashBoard( - title: 'Static', - onPressed: () => Get.to(() => StaticDash())), - AdminWidgetsDashBoard( - title: 'Gemeni', onPressed: () => AI().generateContent()), - AdminWidgetsDashBoard( - title: 'CarLicenseJordan', - onPressed: () => AI().carLicenseJordan()), - AdminWidgetsDashBoard( - title: 'JordanID', onPressed: () => AI().jordanID()), - AdminWidgetsDashBoard( - title: 'Llama', - onPressed: () => - CarRegistrationRecognizerController().scanText()), - AdminWidgetsDashBoard( - title: 'Add device to be Admin', - onPressed: () async { - // Map device = DeviceInfoPlus.deviceData; - // print(device); - await CRUD().post(link: AppLink.addAdminUser, payload: { - // 'deviceNumber': device['serialNumber'].toString(), - 'name': 'b', - }); - }), - ], - ), - ) - ], - isleading: false); - } -} - -class AdminWidgetsDashBoard extends StatelessWidget { - const AdminWidgetsDashBoard({ - super.key, - required this.title, - required this.onPressed, - }); - final String title; - final Callback onPressed; - - @override - Widget build(BuildContext context) { - return Padding( - padding: const EdgeInsets.all(8.0), - child: InkWell( - onTap: onPressed, - child: Container( - decoration: AppStyle.boxDecoration, - height: 100, - width: Get.width * .4, - child: Center( - child: Text( - title.tr, - style: AppStyle.title, - ), - ), - ), - ), - ); - } -} diff --git a/lib/views/admin/captain/captain.dart b/lib/views/admin/captain/captain.dart deleted file mode 100644 index 0aab1d8..0000000 --- a/lib/views/admin/captain/captain.dart +++ /dev/null @@ -1,223 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/views/admin/captain/captain_details.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; - -import '../../../constant/colors.dart'; -import '../../../constant/style.dart'; -import '../../../controller/admin/captain_admin_controller.dart'; -import '../../widgets/elevated_btn.dart'; -import '../../widgets/my_textField.dart'; -import '../../widgets/mycircular.dart'; -import 'form_captain.dart'; - -class Captain extends StatelessWidget { - Captain({super.key}); - final CaptainAdminController captainAdminController = - Get.put(CaptainAdminController()); - @override - Widget build(BuildContext context) { - return MyScafolld( - title: 'Captain'.tr, - body: [ - GetBuilder( - builder: (captainAdminController) => Column( - children: [ - captainAdminController.isLoading - ? const MyCircularProgressIndicator() - : Column( - children: [ - Padding( - padding: const EdgeInsets.all(5), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - captainAdmin( - captainAdminController, - 'Captains Count', - 'countPassenger', - ), - MyElevatedButton( - title: 'Add Prize to Gold Captains', - onPressed: () { - var date = DateTime.now(); - var day = date.weekday; - - if (day == 6) { - // Saturday is 6 - // print(day); - Get.defaultDialog( - title: - 'Add Prize to Gold Captains', - titleStyle: AppStyle.title, - content: Column( - children: [ - Text( - 'Add Points to their wallet as prize' - .tr, - style: AppStyle.title, - ), - Form( - key: captainAdminController - .formCaptainPrizeKey, - child: MyTextForm( - controller: - captainAdminController - .captainPrizeController, - label: - 'Count of prize' - .tr, - hint: 'Count of prize' - .tr, - type: TextInputType - .number)) - ], - ), - confirm: MyElevatedButton( - title: 'Add', - onPressed: () async { - if (captainAdminController - .formCaptainPrizeKey - .currentState! - .validate()) { - captainAdminController - .addCaptainsPrizeToWalletSecure(); - } - }, - ), - ); - } else { - Get.defaultDialog( - title: - 'This day is not allowed', - titleStyle: AppStyle.title, - middleText: - 'Saturday only Allowed day', - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.back(); - })); - } - }) - ], - ), - ), - const SizedBox( - height: 10, - ), - InkWell( - onTap: () { - //todo search - }, - child: Padding( - padding: const EdgeInsets.all(3), - child: Container( - width: Get.width, - height: 110, - decoration: BoxDecoration( - border: Border.all( - width: 2, - color: AppColor.greenColor)), - child: formSearchCaptain() - // ], - // ), - ), - ), - ), - SizedBox( - height: Get.height * .5, - child: ListView.builder( - itemCount: captainAdminController - .captainData['message'].length, - itemBuilder: (context, index) { - final user = captainAdminController - .captainData['message'][index]; - - return InkWell( - onTap: () { - Get.to(const CaptainsDetailsPage(), - arguments: { - 'data': user, - }); - }, - child: Padding( - padding: const EdgeInsets.all(3), - child: Container( - decoration: BoxDecoration( - border: Border.all(width: 2)), - child: ListTile( - title: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Name : ${user['first_name']} ${user['last_name']}', - style: AppStyle.title, - ), - Text( - 'Rating : ${user['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - subtitle: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Count Trip : ${user['countPassengerRide']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate : ${user['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - ), - ), - ), - ); - }, - ), - ), - ], - ), - ], - )) - ], - isleading: true, - ); - } - - Container captainAdmin(CaptainAdminController captainAdminController, - String title, String jsonField) { - return Container( - height: Get.height * .1, - decoration: BoxDecoration(border: Border.all(width: 2)), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: GestureDetector( - onTap: () {}, - child: Column( - children: [ - Text( - title.tr, - style: AppStyle.title, - ), - Text( - captainAdminController.captainData['message'][0][jsonField] - .toString(), - style: AppStyle.title, - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/views/admin/captain/captain_details.dart b/lib/views/admin/captain/captain_details.dart deleted file mode 100644 index 4f99ff1..0000000 --- a/lib/views/admin/captain/captain_details.dart +++ /dev/null @@ -1,168 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/constant/colors.dart'; -import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/controller/firebase/firbase_messge.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; -import 'package:SEFER/views/widgets/my_textField.dart'; - -import '../../../controller/admin/captain_admin_controller.dart'; - -class CaptainsDetailsPage extends StatelessWidget { - const CaptainsDetailsPage({super.key}); - - @override - Widget build(BuildContext context) { - final arguments = Get.arguments; - final Map data = arguments['data']; - var key = Get.find().formCaptainPrizeKey; - var titleNotify = Get.find().titleNotify; - var bodyNotify = Get.find().bodyNotify; - return MyScafolld( - title: data['first_name'] + ' ' + data['last_name'], - body: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Email is ${data['email']}', - style: AppStyle.title, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Phone is ${data['phone']}', - style: AppStyle.title, - ), - Text( - 'gender is ${data['gender']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'status is ${data['status']}', - style: AppStyle.title, - ), - Text( - 'birthdate is ${data['birthdate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'site is ${data['site']}', - style: AppStyle.title, - ), - // Text( - // 'sosPhone is ${data['sosPhone']}', - // style: AppStyle.title, - // ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Feedback is ${data['countFeedback']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate is ${data['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Cancel is ${data['countPassengerCancel']}', - style: AppStyle.title, - ), - Text( - 'Count Ride is ${data['countPassengerRide']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Rating Captain Avarage is ${data['passengerAverageRating']}', - style: AppStyle.title, - ), - Text( - 'Rating is ${data['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - Container( - decoration: BoxDecoration( - border: Border.all(width: 3, color: AppColor.yellowColor)), - child: TextButton( - onPressed: () async { - Get.defaultDialog( - title: 'Send Notification'.tr, - titleStyle: AppStyle.title, - content: Form( - key: key, - child: Column( - children: [ - MyTextForm( - controller: titleNotify, - label: 'title'.tr, - hint: 'title notificaton'.tr, - type: TextInputType.name), - const SizedBox( - height: 10, - ), - MyTextForm( - controller: bodyNotify, - label: 'body'.tr, - hint: 'body notificaton'.tr, - type: TextInputType.name) - ], - ), - ), - confirm: MyElevatedButton( - title: 'Send', - onPressed: () { - print(titleNotify.text); - if (key.currentState!.validate()) { - FirebaseMessagesController() - .sendNotificationToAnyWithoutData( - titleNotify.text, - bodyNotify.text, - data['passengerToken'], - ); - Get.back(); - } - })); - }, - child: Text( - "Send Notificaion to Captains ".tr, - style: AppStyle.title, - ), - ), - ) - ], - ), - ) - ], - isleading: true, - ); - } -} diff --git a/lib/views/admin/captain/form_captain.dart b/lib/views/admin/captain/form_captain.dart deleted file mode 100644 index 5815c97..0000000 --- a/lib/views/admin/captain/form_captain.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/controller/admin/captain_admin_controller.dart'; -import 'package:SEFER/views/admin/captain/captain_details.dart'; -import 'package:SEFER/views/admin/passenger/passenger_details_page.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; - -import '../../../constant/colors.dart'; -import '../../../constant/style.dart'; - -GetBuilder formSearchCaptain() { - // DbSql sql = DbSql.instance; - return GetBuilder( - builder: (controller) => Column( - children: [ - Padding( - padding: const EdgeInsets.all(16), - child: Container( - decoration: - const BoxDecoration(color: AppColor.secondaryColor), - child: TextField( - decoration: InputDecoration( - border: const OutlineInputBorder( - borderRadius: BorderRadius.only(), - gapPadding: 4, - borderSide: BorderSide( - color: AppColor.redColor, - width: 2, - )), - suffixIcon: InkWell( - onTap: () async { - if (controller.captainController.text.length > 4) { - await controller.getCaptains(); - - Get.defaultDialog( - title: controller.captain['message'][0] - ['email'], - titleStyle: AppStyle.title, - content: Column( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Name is ${controller.captain['message'][0]['first_name']} ${controller.captain['message'][0]['last_name']}', - style: AppStyle.title, - ), - Text( - 'phone is ${controller.captain['message'][0]['phone']}', - style: AppStyle.title, - ), - ], - ), - confirm: MyElevatedButton( - title: 'Go To Details'.tr, - onPressed: () { - Get.to( - () => const CaptainsDetailsPage(), - arguments: { - 'data': controller - .captain['message'][0], - }); - })); - } - }, - child: const Icon(Icons.search)), - hintText: 'Search for Passenger'.tr, - hintStyle: AppStyle.title, - hintMaxLines: 1, - prefixIcon: IconButton( - onPressed: () async { - controller.captainController.clear(); - // controller.clearPlaces(); - }, - icon: Icon( - Icons.clear, - color: Colors.red[300], - ), - ), - ), - controller: controller.captainController, - ), - ), - ) - ], - )); -} diff --git a/lib/views/admin/passenger/form_passenger.dart b/lib/views/admin/passenger/form_passenger.dart deleted file mode 100644 index 3546837..0000000 --- a/lib/views/admin/passenger/form_passenger.dart +++ /dev/null @@ -1,86 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/views/admin/passenger/passenger_details_page.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; - -import '../../../constant/colors.dart'; -import '../../../constant/style.dart'; -import '../../../controller/admin/passenger_admin_controller.dart'; - -GetBuilder formSearchPassengers() { - // DbSql sql = DbSql.instance; - return GetBuilder( - builder: (controller) => Column( - children: [ - Padding( - padding: const EdgeInsets.all(16), - child: Container( - decoration: - const BoxDecoration(color: AppColor.secondaryColor), - child: TextField( - decoration: InputDecoration( - border: const OutlineInputBorder( - borderRadius: BorderRadius.only(), - gapPadding: 4, - borderSide: BorderSide( - color: AppColor.redColor, - width: 2, - )), - suffixIcon: InkWell( - onTap: () async { - if (controller.passengerController.text.length > - 4) { - await controller.getPassengers(); - - Get.defaultDialog( - title: controller.passengers['message'][0] - ['email'], - titleStyle: AppStyle.title, - content: Column( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Name is ${controller.passengers['message'][0]['first_name']} ${controller.passengers['message'][0]['last_name']}', - style: AppStyle.title, - ), - Text( - 'phone is ${controller.passengers['message'][0]['phone']}', - style: AppStyle.title, - ), - ], - ), - confirm: MyElevatedButton( - title: 'Go To Details'.tr, - onPressed: () { - Get.to( - () => const PassengerDetailsPage(), - arguments: { - 'data': controller - .passengers['message'][0], - }); - })); - } - }, - child: const Icon(Icons.search)), - hintText: 'Search for Passenger'.tr, - hintStyle: AppStyle.title, - hintMaxLines: 1, - prefixIcon: IconButton( - onPressed: () async { - controller.passengerController.clear(); - controller.clearPlaces(); - }, - icon: Icon( - Icons.clear, - color: Colors.red[300], - ), - ), - ), - controller: controller.passengerController, - ), - ), - ) - ], - )); -} diff --git a/lib/views/admin/passenger/passenger.dart b/lib/views/admin/passenger/passenger.dart deleted file mode 100644 index a3e0366..0000000 --- a/lib/views/admin/passenger/passenger.dart +++ /dev/null @@ -1,206 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/constant/colors.dart'; -import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/controller/admin/passenger_admin_controller.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; -import 'package:SEFER/views/widgets/my_textField.dart'; -import 'package:SEFER/views/widgets/mycircular.dart'; - -import 'form_passenger.dart'; -import 'passenger_details_page.dart'; - -class Passengrs extends StatelessWidget { - Passengrs({super.key}); - final PassengerAdminController passengerAdminController = - Get.put(PassengerAdminController()); - @override - Widget build(BuildContext context) { - return MyScafolld( - title: 'Passengrs'.tr, - isleading: true, - body: [ - GetBuilder( - builder: (passengerAdminController) => Column( - children: [ - passengerAdminController.isLoading - ? const MyCircularProgressIndicator() - : Column( - children: [ - Padding( - padding: const EdgeInsets.all(5), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - passengerAdmin( - passengerAdminController, - 'Passengers Count', - 'countPassenger', - ), - MyElevatedButton( - title: 'Add Prize to Gold Passengers', - onPressed: () { - var date = DateTime.now(); - var day = date.weekday; - - if (day == 6) { - // Saturday is 6 - print(day); - Get.defaultDialog( - title: - 'Add Prize to Gold Passengers', - titleStyle: AppStyle.title, - content: Column( - children: [ - Text( - 'Add Points to their wallet as prize' - .tr, - style: AppStyle.title, - ), - Form( - key: - passengerAdminController - .formPrizeKey, - child: MyTextForm( - controller: - passengerAdminController - .passengerPrizeController, - label: - 'Count of prize' - .tr, - hint: 'Count of prize' - .tr, - type: TextInputType - .number)) - ], - ), - confirm: MyElevatedButton( - title: 'Add', - onPressed: () async { - if (passengerAdminController - .formPrizeKey - .currentState! - .validate()) { - passengerAdminController - .addPassengerPrizeToWalletSecure(); - } - }, - ), - ); - } else { - Get.defaultDialog( - title: - 'This day is not allowed', - titleStyle: AppStyle.title, - middleText: - 'Saturday only Allowed day', - middleTextStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Ok'.tr, - onPressed: () { - Get.back(); - })); - } - }) - ], - ), - ), - const SizedBox( - height: 10, - ), - formSearchPassengers(), - SizedBox( - height: Get.height * .5, - child: ListView.builder( - itemCount: passengerAdminController - .passengersData['message'].length, - itemBuilder: (context, index) { - final user = passengerAdminController - .passengersData['message'][index]; - - return InkWell( - onTap: () { - Get.to(const PassengerDetailsPage(), - arguments: { - 'data': user, - }); - }, - child: Padding( - padding: const EdgeInsets.all(3), - child: Container( - decoration: BoxDecoration( - border: Border.all(width: 2)), - child: ListTile( - title: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Name : ${user['first_name']} ${user['last_name']}', - style: AppStyle.title, - ), - Text( - 'Rating : ${user['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - subtitle: Row( - mainAxisAlignment: - MainAxisAlignment - .spaceBetween, - children: [ - Text( - 'Count Trip : ${user['countPassengerRide']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate : ${user['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - ), - ), - ), - ); - }, - ), - ), - ], - ), - ], - )) - ], - ); - } - - Container passengerAdmin(PassengerAdminController passengerAdminController, - String title, String jsonField) { - return Container( - height: Get.height * .1, - decoration: BoxDecoration(border: Border.all(width: 2)), - child: Padding( - padding: const EdgeInsets.all(8.0), - child: GestureDetector( - onTap: () {}, - child: Column( - children: [ - Text( - title.tr, - style: AppStyle.title, - ), - Text( - passengerAdminController.passengersData['message'][0][jsonField] - .toString(), - style: AppStyle.title, - ), - ], - ), - ), - ), - ); - } -} diff --git a/lib/views/admin/passenger/passenger_details_page.dart b/lib/views/admin/passenger/passenger_details_page.dart deleted file mode 100644 index dc51a07..0000000 --- a/lib/views/admin/passenger/passenger_details_page.dart +++ /dev/null @@ -1,168 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/constant/colors.dart'; -import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/controller/firebase/firbase_messge.dart'; -import 'package:SEFER/views/widgets/elevated_btn.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; -import 'package:SEFER/views/widgets/my_textField.dart'; - -import '../../../controller/admin/passenger_admin_controller.dart'; - -class PassengerDetailsPage extends StatelessWidget { - const PassengerDetailsPage({super.key}); - - @override - Widget build(BuildContext context) { - final arguments = Get.arguments; - final Map data = arguments['data']; - var key = Get.find().formPrizeKey; - var titleNotify = Get.find().titleNotify; - var bodyNotify = Get.find().bodyNotify; - return MyScafolld( - title: data['first_name'], - body: [ - Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - 'Email is ${data['email']}', - style: AppStyle.title, - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Phone is ${data['phone']}', - style: AppStyle.title, - ), - Text( - 'gender is ${data['gender']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'status is ${data['status']}', - style: AppStyle.title, - ), - Text( - 'birthdate is ${data['birthdate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'site is ${data['site']}', - style: AppStyle.title, - ), - Text( - 'sosPhone is ${data['sosPhone']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Feedback is ${data['countFeedback']}', - style: AppStyle.title, - ), - Text( - 'Count Driver Rate is ${data['countDriverRate']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Count Cancel is ${data['countPassengerCancel']}', - style: AppStyle.title, - ), - Text( - 'Count Ride is ${data['countPassengerRide']}', - style: AppStyle.title, - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Text( - 'Rating Captain Avarage is ${data['passengerAverageRating']}', - style: AppStyle.title, - ), - Text( - 'Rating is ${data['ratingPassenger']}', - style: AppStyle.title, - ), - ], - ), - Container( - decoration: BoxDecoration( - border: Border.all(width: 3, color: AppColor.yellowColor)), - child: TextButton( - onPressed: () async { - Get.defaultDialog( - title: 'Send Notification'.tr, - titleStyle: AppStyle.title, - content: Form( - key: key, - child: Column( - children: [ - MyTextForm( - controller: titleNotify, - label: 'title'.tr, - hint: 'title notificaton'.tr, - type: TextInputType.name), - const SizedBox( - height: 10, - ), - MyTextForm( - controller: bodyNotify, - label: 'body'.tr, - hint: 'body notificaton'.tr, - type: TextInputType.name) - ], - ), - ), - confirm: MyElevatedButton( - title: 'Send', - onPressed: () { - print(titleNotify.text); - if (key.currentState!.validate()) { - FirebaseMessagesController() - .sendNotificationToAnyWithoutData( - titleNotify.text, - bodyNotify.text, - data['passengerToken'], - ); - Get.back(); - } - })); - }, - child: Text( - "Send Notificaion to Passenger ".tr, - style: AppStyle.title, - ), - ), - ) - ], - ), - ) - ], - isleading: true, - ); - } -} diff --git a/lib/views/admin/rides/rides.dart b/lib/views/admin/rides/rides.dart deleted file mode 100644 index ad57ae7..0000000 --- a/lib/views/admin/rides/rides.dart +++ /dev/null @@ -1,237 +0,0 @@ -import 'package:fl_chart/fl_chart.dart'; -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/constant/colors.dart'; -import 'package:SEFER/constant/style.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; -import 'package:SEFER/views/widgets/mycircular.dart'; - -import '../../../controller/admin/ride_admin_controller.dart'; - -class Rides extends StatelessWidget { - Rides({super.key}); - RideAdminController rideAdminController = Get.put(RideAdminController()); - @override - Widget build(BuildContext context) { - return MyScafolld(title: 'Rides'.tr, isleading: true, body: [ - GetBuilder( - builder: (rideAdminController) => rideAdminController.isLoading - ? const Center(child: MyCircularProgressIndicator()) - : Column( - children: [ - SizedBox( - height: Get.height * .4, - child: LineChart( - duration: const Duration(milliseconds: 150), - curve: Curves.ease, - LineChartData( - lineBarsData: [ - LineChartBarData( - spots: rideAdminController.chartData, - isCurved: true, - color: Colors.deepPurpleAccent, // Custom color - barWidth: 3, // Thinner line - dotData: const FlDotData( - show: true), // Show dots on each point - belowBarData: BarAreaData( - // Add gradient fill below the line - show: true, - color: AppColor.deepPurpleAccent, - ), - isStrokeJoinRound: true, - shadow: const BoxShadow( - color: AppColor.yellowColor, - blurRadius: 4, - offset: Offset(2, 2), - ), - ), - ], - showingTooltipIndicators: const [], - titlesData: FlTitlesData( - show: true, - topTitles: AxisTitles( - axisNameWidget: Text( - 'Days', - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - bottomTitles: AxisTitles( - axisNameWidget: Text( - 'Total Trips on month'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - leftTitles: AxisTitles( - axisNameWidget: Text( - 'Counts of Trips on month'.tr, - style: AppStyle.title, - ), - axisNameSize: 30, - sideTitles: const SideTitles( - reservedSize: 30, showTitles: true)), - ), - gridData: const FlGridData( - show: true, - ), - borderData: FlBorderData( - show: true, - border: const Border( - bottom: BorderSide(color: AppColor.accentColor), - left: BorderSide(color: AppColor.accentColor), - ), - ), - ), - ), - ), - // SizedBox( - // height: Get.height * .4, - // child: PieChart( - // PieChartData( - // sectionsSpace: 4, // Adjust spacing between sections - // centerSpaceRadius: - // 40, // Adjust radius of center space - // sections: [ - // for (final rideData in rideAdminController.rideData) - // PieChartSectionData( - // value: rideData.ridesCount.toDouble(), - // title: '${rideData.day}', showTitle: true, - // titleStyle: - // AppStyle.subtitle, // Display day as title - // radius: 60, // Adjust radius of each section - // color: - // AppColor.deepPurpleAccent, // Custom color - // ), - // ], - // ), - // ), - // ), - - // SizedBox( - // // height: 400, - // child: SfCartesianChart( - // legend: const Legend( - // isVisible: true, - // position: LegendPosition.bottom, - // overflowMode: LegendItemOverflowMode.wrap, - // textStyle: TextStyle( - // color: Colors.white, - // fontSize: 12, - // fontWeight: FontWeight.bold, - // ), - // ), - // borderWidth: 2, - // borderColor: AppColor.blueColor, - // plotAreaBorderColor: AppColor.deepPurpleAccent, - // enableAxisAnimation: true, - // primaryXAxis: CategoryAxis( - // borderColor: AppColor.accentColor, borderWidth: 2, - // title: AxisTitle( - // text: 'Total Trips on month'.tr, - // textStyle: AppStyle.title, - // ), - // // labelRotation: 45, - // majorGridLines: const MajorGridLines(width: 0), - // ), - // primaryYAxis: const NumericAxis(isVisible: false), - // series: >[ - // LineSeries( - // dataSource: rideAdminController.chartDatasync, - // xValueMapper: (ChartDataS data, _) => '${data.day}', - // yValueMapper: (ChartDataS data, _) => - // data.ridesCount, - // dataLabelSettings: - // const DataLabelSettings(isVisible: true), - // ), - // ], - // ), - // ), - - const SizedBox( - height: 20, - ), - Card( - elevation: 4, - color: AppColor.deepPurpleAccent, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Text( - 'Total Trips on this Month is ${rideAdminController.jsonResponse['message'][0]['current_month_rides_count']}', - style: AppStyle.title, - ), - ), - ), - const SizedBox( - height: 20, - ), - Card( - elevation: 4, - color: AppColor.yellowColor, - child: Padding( - padding: const EdgeInsets.all(8.0), - child: Column( - children: [ - Text( - 'Driver Average Duration: ${rideAdminController.ridesDetails[0]['driver_avg_duration']}', - style: AppStyle.subtitle, - ), - Text( - 'Number of Drivers: ${rideAdminController.ridesDetails[0]['num_Driver']}', - style: AppStyle.subtitle, - ), - Text( - 'Total Rides: ${rideAdminController.ridesDetails[0]['total_rides']}', - style: AppStyle.subtitle, - ), - Text( - 'Ongoing Rides: ${rideAdminController.ridesDetails[0]['ongoing_rides']}', - style: AppStyle.subtitle, - ), - Text( - 'Completed Rides: ${rideAdminController.ridesDetails[0]['completed_rides']}', - style: AppStyle.subtitle, - ), - Text( - 'Cancelled Rides: ${rideAdminController.ridesDetails[0]['cancelled_rides']}', - style: AppStyle.subtitle, - ), - Text( - 'Longest Duration: ${rideAdminController.ridesDetails[0]['longest_duration']}', - style: AppStyle.subtitle, - ), - Text( - 'Total Distance: ${rideAdminController.ridesDetails[0]['total_distance']} km', - style: AppStyle.subtitle, - ), - Text( - 'Average Distance: ${rideAdminController.ridesDetails[0]['average_distance']} km', - style: AppStyle.subtitle, - ), - Text( - 'Longest Distance: ${rideAdminController.ridesDetails[0]['longest_distance']} km', - style: AppStyle.subtitle, - ), - Text( - 'Total Driver Earnings: \$${rideAdminController.ridesDetails[0]['total_driver_earnings']}', - style: AppStyle.subtitle, - ), - Text( - 'Total Company Earnings: \$${rideAdminController.ridesDetails[0]['total_company_earnings']}', - style: AppStyle.subtitle, - ), - Text( - 'Company Percentage: ${rideAdminController.ridesDetails[0]['companyPercent']} %', - style: AppStyle.subtitle, - ), - ], - ), - ), - ) - ], - )) - ]); - } -} diff --git a/lib/views/admin/static/static.dart b/lib/views/admin/static/static.dart deleted file mode 100644 index 72149b7..0000000 --- a/lib/views/admin/static/static.dart +++ /dev/null @@ -1,12 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; - -class StaticDash extends StatelessWidget { - const StaticDash({super.key}); - - @override - Widget build(BuildContext context) { - return MyScafolld(title: 'Static Dash'.tr, body: [], isleading: true); - } -} diff --git a/lib/views/admin/wallet/wallet.dart b/lib/views/admin/wallet/wallet.dart deleted file mode 100644 index bec2e54..0000000 --- a/lib/views/admin/wallet/wallet.dart +++ /dev/null @@ -1,15 +0,0 @@ -import 'package:flutter/material.dart'; -import 'package:get/get.dart'; -import 'package:SEFER/views/widgets/my_scafold.dart'; - -import '../../../controller/admin/wallet_admin_controller.dart'; - -class Wallet extends StatelessWidget { - Wallet({super.key}); - WalletAdminController walletAdminController = - Get.put(WalletAdminController()); - @override - Widget build(BuildContext context) { - return MyScafolld(title: 'Wallet'.tr, body: [], isleading: true); - } -} diff --git a/lib/views/auth/captin/ai_page.dart b/lib/views/auth/captin/ai_page.dart index 2d51be0..6699974 100644 --- a/lib/views/auth/captin/ai_page.dart +++ b/lib/views/auth/captin/ai_page.dart @@ -36,7 +36,7 @@ class AiPage extends StatelessWidget { child: InkWell( onTap: () async { await CRUD().allMethodForAI( - 'name,address,dob,nationalNo,', + 'firstName,fullName,address,dob,nationalNo,', AppLink.uploadEgypt, 'idFront'); //egypt }, diff --git a/lib/views/auth/captin/login_captin.dart b/lib/views/auth/captin/login_captin.dart index a88c31c..0b75787 100644 --- a/lib/views/auth/captin/login_captin.dart +++ b/lib/views/auth/captin/login_captin.dart @@ -18,14 +18,13 @@ import '../../widgets/mycircular.dart'; import 'register_captin.dart'; class LoginCaptin extends StatelessWidget { - // final controller = Get.put(LoginController()); + final controller = Get.put(LoginCaptinController()); LoginCaptin({super.key}); @override Widget build(BuildContext context) { - Get.put(LoginCaptinController()); - final controller = Get.put(LoginController()); + // Get.put(LoginCaptinController()); return GetBuilder( builder: (controller) => MyScafolld( title: 'Login Driver'.tr, @@ -35,6 +34,8 @@ class LoginCaptin extends StatelessWidget { agreedPage() else if (box.read(BoxName.countryCode) == null) CountryPicker() + else if (box.read(BoxName.locationPermission) != 'true') + locationPermissionDialog() else SingleChildScrollView( child: Column( @@ -155,21 +156,17 @@ class LoginCaptin extends StatelessWidget { return null; }, ), - GetBuilder( - builder: (controller) => controller - .isloading - ? const MyCircularProgressIndicator() - : MyElevatedButton( - onPressed: () { - if (controller - .formKey.currentState! - .validate()) { - controller.login(); - } - }, - title: 'Submit'.tr, - ), - ) + controller.isloading + ? const MyCircularProgressIndicator() + : MyElevatedButton( + onPressed: () { + if (controller.formKey.currentState! + .validate()) { + controller.login(); + } + }, + title: 'Submit'.tr, + ), ], ), ), @@ -314,4 +311,38 @@ class LoginCaptin extends StatelessWidget { ), ); } + + locationPermissionDialog() { + return Padding( + padding: const EdgeInsets.all(16), + child: Container( + height: Get.height * .4, + decoration: AppStyle.boxDecoration1, + child: Padding( + padding: const EdgeInsets.all(20.0), + child: Center( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + Text( + 'We use location to get accurate and nearest passengers for you' + .tr, + textAlign: TextAlign.center, + style: AppStyle.title, + ), + MyElevatedButton( + title: 'Grant Location'.tr, + onPressed: () async { + await controller.getLocationPermission(); + }, + kolor: AppColor.greenColor, + ) + ], + ), + ), + ), + ), + ); + } } diff --git a/lib/views/auth/login_page.dart b/lib/views/auth/login_page.dart index 5e26963..2c3e51f 100644 --- a/lib/views/auth/login_page.dart +++ b/lib/views/auth/login_page.dart @@ -30,46 +30,6 @@ class LoginPage extends StatelessWidget { builder: (controller) => MyScafolld( title: 'Login'.tr, isleading: false, - action: GestureDetector( - onLongPress: () { - Get.defaultDialog( - title: 'Admin DashBoard', - titleStyle: AppStyle.title, - content: Form( - key: controller.formKeyAdmin, - child: Column( - children: [ - MyTextForm( - controller: controller.adminNameController, - label: 'Your name'.tr, - hint: 'Your name', - type: TextInputType.name), - const SizedBox( - height: 10, - ), - MyTextForm( - controller: controller.adminPasswordController, - label: 'Your password'.tr, - hint: 'Your password', - type: TextInputType.emailAddress), - const SizedBox( - height: 10, - ), - ], - ), - ), - confirm: MyElevatedButton( - title: 'title'.tr, - onPressed: () { - controller.adminDashboardOpen(); - }, - ), - ); - }, - child: const Icon( - Icons.dashboard, - color: AppColor.redColor, - )), body: [ if (box.read(BoxName.agreeTerms) != 'agreed') agreedPage() diff --git a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart index ad5a3b3..f7c7bbd 100644 --- a/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart +++ b/lib/views/home/Captin/home_captain/widget/left_menu_map_captain.dart @@ -105,7 +105,7 @@ GetBuilder leftMainMenuCaptainIcons() { borderRadius: BorderRadius.circular(15)), child: IconButton( onPressed: () { - controller.mapHomeCaptainController + controller.mapHomeCaptainController! .animateCamera(CameraUpdate.newLatLng(LatLng( Get.find().myLocation.latitude, Get.find().myLocation.longitude, diff --git a/lib/views/home/Captin/orderCaptin/order_speed_request.dart b/lib/views/home/Captin/orderCaptin/order_speed_request.dart index c11314b..62057fd 100644 --- a/lib/views/home/Captin/orderCaptin/order_speed_request.dart +++ b/lib/views/home/Captin/orderCaptin/order_speed_request.dart @@ -309,8 +309,6 @@ class OrderSpeedRequest extends StatelessWidget { kolor: AppColor.greenColor, title: 'Accept Order'.tr, onPressed: () async { - box.write(BoxName.statusDriverLocation, 'on'); - var res = await CRUD() .post(link: AppLink.updateStausFromSpeed, payload: { 'id': myList[16], @@ -337,6 +335,7 @@ class OrderSpeedRequest extends StatelessWidget { Get.back(); })); } else if (jsonDecode(res)['status'] == "success") { + box.write(BoxName.statusDriverLocation, 'on'); List bodyToPassenger = [ box.read(BoxName.driverID).toString(), box.read(BoxName.nameDriver).toString(),