This commit is contained in:
Hamza-Ayed
2024-12-01 10:17:23 +02:00
parent 5aeb3cf685
commit 0129162309
34 changed files with 1317 additions and 875 deletions

View File

@@ -41,9 +41,9 @@ class HomeCaptain extends StatelessWidget {
closeOverlayIfFound();
checkForUpdate(context);
getPermissionOverlay();
showDriverGiftClaim(context);
// getPermissionLocation1();
await showFirstTimeOfferNotification(context);
// await showFirstTimeOfferNotification(context);
});
return Scaffold(
appBar: AppBar(
@@ -424,7 +424,7 @@ showFirstTimeOfferNotification(BuildContext context) async {
borderRadius: BorderRadius.circular(15),
),
child: Text(
'3000 LE'.tr,
'300 LE'.tr,
style: const TextStyle(
color: Colors.white,
fontSize: 25,

View File

@@ -7,7 +7,6 @@ import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart';
import '../../../../../constant/style.dart';
import '../../../../widgets/elevated_btn.dart';
import '../../../../../controller/home/captin/home_captain_controller.dart';
import '../../../../../controller/home/captin/order_request_controller.dart';
class ConnectWidget extends StatelessWidget {
const ConnectWidget({
@@ -27,14 +26,14 @@ class ConnectWidget extends StatelessWidget {
builder: (homeCaptainController) => int.parse(
homeCaptainController.countRefuse) >
3 ||
double.parse(captainWalletController.totalPoints) < -3000
double.parse(captainWalletController.totalPoints) < -300
? CupertinoButton(
onPressed: () {
Get.defaultDialog(
// backgroundColor: CupertinoColors.destructiveRed,
barrierDismissible: false,
title: double.parse(captainWalletController.totalPoints) <
-3000
-300
? 'You dont have Points'.tr
: 'You Are Stopped For this Day !'.tr,
titleStyle: AppStyle.title,
@@ -44,7 +43,7 @@ class ConnectWidget extends StatelessWidget {
onPressed: () async {
double.parse(
captainWalletController.totalPoints) <
-3000
-300
? await Get.find<TextToSpeechController>()
.speakText(
'You must be recharge your Account'
@@ -58,7 +57,7 @@ class ConnectWidget extends StatelessWidget {
),
Text(
double.parse(captainWalletController.totalPoints) <
-3000
-300
? 'You must be recharge your Account'.tr
: 'You Refused 3 Rides this Day that is the reason \nSee you Tomorrow!'
.tr,
@@ -68,7 +67,7 @@ class ConnectWidget extends StatelessWidget {
),
confirm:
double.parse(captainWalletController.totalPoints) <
-3000
-300
? MyElevatedButton(
title: 'Recharge my Account'.tr,
onPressed: () {

View File

@@ -1,6 +1,8 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/controller/firebase/local_notification.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/home/Captin/orderCaptin/order_request_page.dart';
import 'package:SEFER/views/home/Captin/orderCaptin/order_speed_request.dart';
import 'package:SEFER/views/home/Captin/orderCaptin/vip_order_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter_font_icons/flutter_font_icons.dart';
@@ -9,6 +11,8 @@ import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../../../../constant/colors.dart';
import '../../../../../controller/home/payment/captain_wallet_controller.dart';
import '../../../../../print.dart';
import '../../../../Rate/ride_calculate_driver.dart';
import '../../../../../controller/functions/location_controller.dart';
@@ -175,32 +179,29 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
),
// Platform.isAndroid
// ?
AnimatedContainer(
duration: const Duration(microseconds: 200),
width: controller.widthMapTypeAndTraffic,
decoration: BoxDecoration(
color: AppColor.secondaryColor,
border: Border.all(color: AppColor.blueColor),
borderRadius: BorderRadius.circular(15)),
child: Builder(builder: (context) {
return IconButton(
onPressed: () async {
// mySnakeBarError('ad');
Get.to(() => VipOrderPage(), arguments: {
'myListString': 'myListString',
'DriverList': 'myList',
// 'PolylineJson': myPoints,
'body': 'message.notification!.body'
});
},
icon: const Icon(
FontAwesome5.window_close,
size: 29,
color: AppColor.blueColor,
),
);
}),
),
int.parse(box.read(BoxName.carYear).toString()) > 2023
? AnimatedContainer(
duration: const Duration(microseconds: 200),
width: controller.widthMapTypeAndTraffic,
decoration: BoxDecoration(
color: AppColor.secondaryColor,
border: Border.all(color: AppColor.blueColor),
borderRadius: BorderRadius.circular(15)),
child: Builder(builder: (context) {
return IconButton(
onPressed: () async {
// mySnakeBarError('ad');
Get.to(() => VipOrderPage());
},
icon: const Icon(
Octicons.watch,
size: 29,
color: AppColor.blueColor,
),
);
}),
)
: const SizedBox(),
// : const SizedBox(),
// AnimatedContainer(
// duration: const Duration(microseconds: 200),
@@ -212,84 +213,84 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
// child: Builder(builder: (context) {
// return IconButton(
// onPressed: () async {
// // Get.to(() => LoginCaptin());
// // print(box.read(BoxName.myList));
// // Bubble().startBubbleHead(sendAppToBackground: true);
// List<String> d = [
// "30.003028,31.2419628",
// "30.0955661,31.2665336",
// "160.00",
// "25.92",
// "1488",
// "16.93",
// "114243034311436865474",
// "113172279072358305645",
// "hamza ayed",
// "rlMbi4Hc8L1STMPE99iPKqK4Gddwv8r9qZOCadsz9qTEJZ6KLEE9ruTJI6N8dKfK4CXez5pme5WIs14-1QGo29s07fQOniZgIlJV5XFL3yqzPRSUmn3",
// "+201023248456",
// "1 min",
// "1 m",
// "false",
// "QwUMoyUtZ0J3oR6yXKUavrB_gBl9npUZe-qZtax-Raq4QBbdKv0AmtLKm0BfBd6N_592HBv4CVa41ii4122W3hr-BCUKKzJhzZcK8m0YjbWbtpvgJRD8uD_nuMk9",
// "0",
// "238",
// "false",
// "114243034311436865474",
// "1488",
// "startEnd",
// "30.049307749732176,31.274291574954987",
// "",
// "",
// "",
// "",
// "17.73",
// "0",
// "hamzaayedflutter@gmail.com",
// "الفسطاط، حي مصر القديمة، مصر",
// " الزاوية الحمراء، محافظة القاهرة، مصر",
// "Speed",
// "8",
// "5.00"
// ];
// box.write(BoxName.rideArguments, {
// 'passengerLocation': d[0].toString(),
// 'passengerDestination': d[1].toString(),
// 'Duration': d[4].toString(),
// 'totalCost': d[26].toString(),
// 'Distance': d[5].toString(),
// 'name': d[8].toString(),
// 'phone': d[10].toString(),
// 'email': d[28].toString(),
// 'WalletChecked': d[13].toString(),
// 'tokenPassenger': d[9].toString(),
// 'direction':
// 'https://www.google.com/maps/dir/${d[0]}/${d[1]}/',
// 'DurationToPassenger': d[15].toString(),
// 'rideId': d[16].toString(),
// 'passengerId': d[7].toString(),
// 'driverId': d[18].toString(),
// 'durationOfRideValue': d[19].toString(),
// 'paymentAmount': d[2].toString(),
// 'paymentMethod':
// d[13].toString() == 'true' ? 'visa' : 'cash',
// 'isHaveSteps': d[20].toString(),
// 'step0': d[21].toString(),
// 'step1': d[22].toString(),
// 'step2': d[23].toString(),
// 'step3': d[24].toString(),
// 'step4': d[25].toString(),
// 'passengerWalletBurc': d[26].toString(),
// 'timeOfOrder': DateTime.now().toString(),
// 'totalPassenger': d[2].toString(),
// 'carType': d[31].toString(),
// 'kazan': d[32].toString(),
// 'startNameLocation': d[29].toString(),
// 'endNameLocation': d[30].toString(),
// });
// Get.to(() => PassengerLocationMapPage(),
// arguments: box.read(BoxName.rideArguments));
// // Get.offAll(() => HomeCaptainController());
// NotificationController()
// .showTimerNotification('title', 'message', 'tone1');
// // Get.to(() => OrderRequestPage(), arguments: {
// // 'myListString': [
// // "30.1068014,31.244621",
// // "30.0664345,31.2857709",
// // "68.56",
// // "25.92",
// // "1445",
// // "11.29",
// // "114243034311436865474",
// // "114243034311436865474",
// // "sefer app",
// // "cAVvCAywQvm6LUAqF2E3sU:APA91bHusGWWBwlaKQ6A4idNTVzvakCxtFxPPrHwVR2ycMZK5IP27Tf-RDnUypure0NVGxdFf6npAV7bi4_KWZP-UKJ0Pz3lUogWWbtzO9bIPJgBP3SPCvA",
// // "+201023248456",
// // "0",
// // "0",
// // "true",
// // "fbeWrFqeQMqorzVU9-2mIa:APA91bHWIcbxzsk3C-w7fiAZ0NRRpPuAmRgNjduS2oQ5lZ7jFEMhA7gfWQLyRWfnhcjmUA9GByyzoLxcfvb7VhcL9zSgo15hVG4DMyJ_k5di1I3oii5Pe9w",
// // "0",
// // "1087",
// // "false",
// // "114243034311436865474",
// // "1445",
// // "startEnd",
// // "30.08517654446625,31.27303797751665",
// // "",
// // "",
// // "",
// // "",
// // "13.98",
// // "0",
// // "sefertraveling@gmail.com",
// // "5 مصر اسكندريه، شبرا الخيمة، قسم أول شبرا الخيمة، محافظة القليوبية 6210011، مصر",
// // "12 مدرسة العباسية الميكانيكية، السرايات، الوايلى، محافظة القاهرة 4391080، مصر",
// // "Speed",
// // "8",
// // "5.00"
// // ],
// // 'DriverList': [
// // "30.1068014,31.244621",
// // "30.0664345,31.2857709",
// // "68.56",
// // "25.92",
// // "1445",
// // "11.29",
// // "114243034311436865474",
// // "114243034311436865474",
// // "sefer app",
// // "cAVvCAywQvm6LUAqF2E3sU:APA91bHusGWWBwlaKQ6A4idNTVzvakCxtFxPPrHwVR2ycMZK5IP27Tf-RDnUypure0NVGxdFf6npAV7bi4_KWZP-UKJ0Pz3lUogWWbtzO9bIPJgBP3SPCvA",
// // "+201023248456",
// // "0",
// // "0",
// // "true",
// // "fbeWrFqeQMqorzVU9-2mIa:APA91bHWIcbxzsk3C-w7fiAZ0NRRpPuAmRgNjduS2oQ5lZ7jFEMhA7gfWQLyRWfnhcjmUA9GByyzoLxcfvb7VhcL9zSgo15hVG4DMyJ_k5di1I3oii5Pe9w",
// // "0",
// // "1087",
// // "false",
// // "114243034311436865474",
// // "1445",
// // "startEnd",
// // "30.08517654446625,31.27303797751665",
// // "",
// // "",
// // "",
// // "",
// // "13.98",
// // "0",
// // "sefertraveling@gmail.com",
// // "5 مصر اسكندريه، شبرا الخيمة، قسم أول شبرا الخيمة، محافظة القليوبية 6210011، مصر",
// // "12 مدرسة العباسية الميكانيكية، السرايات، الوايلى، محافظة القاهرة‬ 4391080، مصر",
// // "Speed",
// // "8",
// // "5.00"
// // ],
// // // 'PolylineJson': myPoints,
// // // 'body': message.notification!.body
// // });
// },
// icon: const Icon(
// FontAwesome5.grin_tears,
@@ -299,7 +300,7 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
// );
// }),
// ),
// ,
const SizedBox(
height: 5,
),

View File

@@ -23,7 +23,7 @@ class GoogleDriverMap extends StatelessWidget {
builder: (controller) => Column(
children: [
SizedBox(
height: Get.height * .6,
height: Get.height * .92,
child: GoogleMap(
onMapCreated: controller.onMapCreated,
zoomControlsEnabled: true,

File diff suppressed because it is too large Load Diff

View File

@@ -23,17 +23,6 @@ class OrderSpeedRequest extends StatelessWidget {
Get.put(OrderRequestController());
@override
Widget build(BuildContext context) {
// void addCustomStartIcon() async {
// Create the marker with the resized image
// orderRequestController.initilizeOrderPage();
// }
// double mpg = 0;
// calculateConsumptionFuel() {
// mpg = Get.find<HomeCaptainController>().fuelPrice /
// 12; //todo in register car add mpg in box
// }
return GetBuilder<OrderRequestController>(
builder: (orderRequestController) {
return MyScafolld(
@@ -188,7 +177,7 @@ class OrderSpeedRequest extends StatelessWidget {
height: 5,
),
Container(
height: Get.height * .22,
height: Get.height * .3,
width: Get.width * .9,
decoration: AppStyle.boxDecoration1,
child: Padding(

View File

@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../../main.dart';
import '../../../../print.dart';
class VipOrderPage extends StatelessWidget {
const VipOrderPage({super.key});
@@ -19,10 +20,58 @@ class VipOrderPage extends StatelessWidget {
title: 'VIP Order'.tr,
body: [
GetBuilder<VipOrderController>(builder: (vipOrderController) {
if (vipOrderController.isLoading) {
return const Center(
child: CircularProgressIndicator(),
);
}
if (vipOrderController.tripData.isEmpty) {
return Center(
child: Text('No orders available'.tr),
);
}
final order = vipOrderController.tripData[0];
Log.print('order: ${order}');
return SafeArea(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [],
));
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Passenger Section
_buildSectionTitle('Passenger Information'.tr),
_buildInfoCard(
children: [
_buildDetailRow('Name'.tr,
'${order['passengerName'] ?? 'Unknown'} ${order['passengerLastName'] ?? ''}'),
_buildDetailRow(
'Phone'.tr, order['passengerPhone'] ?? 'Unknown'),
_buildDetailRow(
'Gender'.tr, order['passengergender'] ?? 'Unknown'),
_buildDetailRow('time Selected'.tr,
order['timeSelected'] ?? 'Unknown'),
_buildDetailRow(
'Ride Status'.tr, order['status'] ?? 'Unknown'),
// _buildDetailRow('Ride Status'.tr,
// vipOrderController.myList[4] ?? 'Unknown'),
IconButton(
onPressed: () {
// print(vipOrderController.myList);
},
icon: const Icon(Icons.add),
),
],
),
const SizedBox(height: 24),
// Action Buttons
_buildActionButtons(context),
],
),
),
);
})
],
isleading: true,
@@ -30,39 +79,158 @@ class VipOrderPage extends StatelessWidget {
}
}
Widget _buildSectionTitle(String title) {
return Padding(
padding: const EdgeInsets.only(bottom: 8.0),
child: Text(
title,
style: const TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: Colors.black87,
),
),
);
}
Widget _buildInfoCard({required List<Widget> children}) {
return Container(
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(12),
boxShadow: [
BoxShadow(
color: Colors.grey.withOpacity(0.2),
spreadRadius: 1,
blurRadius: 5,
offset: const Offset(0, 3),
),
],
),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: children,
),
),
);
}
Widget _buildDetailRow(String label, String value) {
return Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Expanded(
flex: 2,
child: Text(
label,
style: const TextStyle(
fontWeight: FontWeight.bold,
color: Colors.black87,
),
),
),
Expanded(
flex: 3,
child: Text(
value,
style: const TextStyle(color: Colors.black54),
),
),
],
),
);
}
Widget _buildActionButtons(BuildContext context) {
return Row(
children: [
Expanded(
child: ElevatedButton(
onPressed: () => _onReject(context),
style: ElevatedButton.styleFrom(
backgroundColor: Colors.red,
padding: const EdgeInsets.symmetric(vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: Text(
'Reject'.tr,
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
),
const SizedBox(width: 16),
Expanded(
child: ElevatedButton(
onPressed: () => _onApply(context),
style: ElevatedButton.styleFrom(
backgroundColor: Colors.green,
padding: const EdgeInsets.symmetric(vertical: 16),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: Text(
'Apply'.tr,
style: const TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
),
],
);
}
void _onReject(BuildContext context) {
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Ride Rejected'),
backgroundColor: Colors.red,
),
);
}
void _onApply(BuildContext context) {
// TODO: Implement application logic
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Ride Applied'),
backgroundColor: Colors.green,
),
);
}
class VipOrderController extends GetxController {
bool isLoading = false;
final arguments = Get.arguments;
late String body;
List tripData = [];
var myList;
initilize() {
final myListString = arguments['myListString'];
if (arguments['DriverList'] == null || arguments['DriverList'].isEmpty) {
myList = jsonDecode(myListString);
} else {
myList = arguments['DriverList'];
}
body = arguments['body'];
update();
}
fetchOrder() async {
var res = await CRUD().get(link: AppLink.getMishwari, payload: {
isLoading = true; // Set loading state
update(); // Notify listeners
var res = await CRUD().get(link: AppLink.getMishwariDriver, payload: {
'driverId': box.read(BoxName.driverID).toString(),
});
if (res != 'failure') {
tripData = jsonDecode(res)['message'];
update();
} else {
tripData = [];
}
isLoading = false; // Loading complete
update(); // Notify listeners
}
@override
void onInit() async {
await initilize();
fetchOrder();
super.onInit();
}