This commit is contained in:
Hamza-Ayed
2024-06-15 21:10:06 +03:00
parent e04b594860
commit 03cd18dae0
30 changed files with 710 additions and 158 deletions

View File

@@ -0,0 +1,96 @@
import 'dart:io';
import 'package:SEFER/controller/home/trip_monitor_controller.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:vibration/vibration.dart';
import '../../../../constant/colors.dart';
import '../../../../constant/style.dart';
import '../../../widgets/elevated_btn.dart';
class TripMonitor extends StatelessWidget {
const TripMonitor({super.key});
@override
Widget build(BuildContext context) {
Get.put(TripMonitorController()).init();
return GetBuilder<TripMonitorController>(builder: (tripMonitorController) {
return MyScafolld(
title: 'Trip Monitor'.tr,
body: [
GoogleMap(
onMapCreated: tripMonitorController.onMapCreated,
initialCameraPosition: CameraPosition(
// bearing: 45,
target: tripMonitorController.parentLocation,
zoom: 16,
tilt: 40,
),
// onCameraMove: (position) {},
markers: {
Marker(
markerId: MarkerId('start'.tr),
position: tripMonitorController.parentLocation,
draggable: true,
icon: tripMonitorController.carIcon,
rotation: tripMonitorController.rotation,
),
},
),
speedCircle()
],
isleading: true,
);
});
}
}
GetBuilder<TripMonitorController> speedCircle() {
if (Get.find<TripMonitorController>().speed > 100) {
if (Platform.isIOS) {
HapticFeedback.selectionClick();
} else {
Vibration.vibrate(duration: 1000);
}
Get.defaultDialog(
barrierDismissible: false,
titleStyle: AppStyle.title,
title: 'Speed Over'.tr,
middleText: 'Please slow down'.tr,
middleTextStyle: AppStyle.title,
confirm: MyElevatedButton(
title: 'I will slow down'.tr,
onPressed: () => Get.back(),
),
);
}
return GetBuilder<TripMonitorController>(
builder: (tripMonitorController) {
return Positioned(
bottom: 25,
right: 100,
child: Container(
decoration: BoxDecoration(
shape: BoxShape.circle,
color: tripMonitorController.speed > 100
? Colors.red
: AppColor.secondaryColor,
border: Border.all(width: 3, color: AppColor.redColor),
),
height: 60,
width: 60,
child: Center(
child: Text(
tripMonitorController.speed.toStringAsFixed(0),
style: AppStyle.number,
),
),
),
);
},
);
}

View File

@@ -33,8 +33,9 @@ class ApplyOrderWidget extends StatelessWidget {
if (box.read(BoxName.carType) == 'Speed' ||
box.read(BoxName.carType) == 'Delivery') {
Get.snackbar(
'This price is ${controller.totalPassenger.toStringAsFixed(2)}'
.tr,
'This price is'.tr +
' ${controller.totalPassenger.toStringAsFixed(2)}'
.tr,
'This ride type does not allow changes to the destination or additional stops'
.tr,
snackPosition: SnackPosition.BOTTOM,
@@ -108,7 +109,7 @@ class ApplyOrderWidget extends StatelessWidget {
children: [
Image.asset(
'assets/images/blob.png',
width: 100,
width: 80,
),
Column(
children: [
@@ -165,7 +166,7 @@ class ApplyOrderWidget extends StatelessWidget {
Get.defaultDialog(
title: 'Select one message'.tr,
titleStyle: AppStyle.title,
content: Container(
content: SizedBox(
height: Get.height * .5,
child: Column(
mainAxisAlignment:
@@ -391,6 +392,8 @@ class TimeDriverToPassenger extends StatelessWidget {
children: [
Text(
'The driver on your way'.tr,
style: AppStyle.title
.copyWith(color: AppColor.yellowColor),
textAlign: TextAlign.center,
),
const SizedBox(

View File

@@ -7,7 +7,7 @@ import 'package:get/get.dart';
import 'package:get/get_rx/src/rx_typedefs/rx_typedefs.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/views/home/my_wallet/passenger_wallet.dart';
import 'package:SEFER/views/home/profile/feed_back_page.dart';
import 'package:SEFER/views/home/profile/complaint_page.dart';
import 'package:SEFER/views/home/profile/order_history.dart';
import 'package:SEFER/views/home/profile/promos_passenger_page.dart';
import 'package:SEFER/views/home/profile/taarif_page.dart';
@@ -188,9 +188,9 @@ class MapMenuWidget extends StatelessWidget {
),
IconMainPageMap(
onTap: () {
Get.to(() => FeedBackPage());
Get.to(() => ComplaintPage());
},
title: 'Feed Back'.tr,
title: 'Complaint'.tr,
icon: Icons.feedback,
),
IconMainPageMap(

View File

@@ -1,5 +1,5 @@
import 'package:SEFER/constant/links.dart';
import 'package:SEFER/views/home/profile/feed_back_page.dart';
import 'package:SEFER/views/home/profile/complaint_page.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:flutter/material.dart';
import 'package:flutter_font_icons/flutter_font_icons.dart';
@@ -32,7 +32,7 @@ class RideBeginPassenger extends StatelessWidget {
right: 10,
bottom: 4,
child: Container(
decoration: AppStyle.boxDecoration,
decoration: AppStyle.boxDecoration1,
height: controller.statusRide == 'Begin' ? Get.height * .33 : 0,
// width: 100,
child: Padding(
@@ -51,14 +51,14 @@ class RideBeginPassenger extends StatelessWidget {
Column(
children: [
Container(
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: Text(
controller.firstName,
style: AppStyle.title,
),
),
Container(
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
@@ -79,7 +79,7 @@ class RideBeginPassenger extends StatelessWidget {
children: <Widget>[
const Text(''),
Container(
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: Padding(
padding:
const EdgeInsets.symmetric(horizontal: 4),
@@ -94,7 +94,7 @@ class RideBeginPassenger extends StatelessWidget {
Column(
children: [
Container(
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: Padding(
padding: const EdgeInsets.all(3),
child: Text(
@@ -124,7 +124,7 @@ class RideBeginPassenger extends StatelessWidget {
},
child: Container(
width: Get.width * .15,
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: Column(
children: [
Text(
@@ -150,7 +150,7 @@ class RideBeginPassenger extends StatelessWidget {
},
child: Container(
width: Get.width * .15,
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: Column(
children: [
Text(
@@ -167,10 +167,10 @@ class RideBeginPassenger extends StatelessWidget {
),
Container(
width: Get.width * .15,
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: IconButton(
onPressed: () => Get.to(
() => FeedBackPage(),
() => ComplaintPage(),
transition: Transition.downToUp,
),
icon: const Icon(
@@ -182,7 +182,7 @@ class RideBeginPassenger extends StatelessWidget {
),
Container(
width: Get.width * .15,
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
child: audioController.isRecording == false
? IconButton(
onPressed: () async {
@@ -237,7 +237,7 @@ class RideBeginPassenger extends StatelessWidget {
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Container(
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
width: Get.width * .15,
child: IconButton(
onPressed: () async {
@@ -260,7 +260,7 @@ class RideBeginPassenger extends StatelessWidget {
),
),
Container(
decoration: AppStyle.boxDecoration1,
decoration: AppStyle.boxDecoration,
width: Get.width * .15,
child: IconButton(
onPressed: () async {
@@ -292,6 +292,19 @@ class RideBeginPassenger extends StatelessWidget {
),
),
),
Container(
decoration: AppStyle.boxDecoration,
width: Get.width * .15,
child: IconButton(
onPressed: () async {
await controller.getTokenForParent();
},
icon: const Icon(
Foundation.record,
color: AppColor.yellowColor,
),
),
),
],
)
],

View File

@@ -115,7 +115,7 @@ Widget _buildTimer(MapPassengerController mapPassengerController) {
SizedBox(
width: 100,
child: Form(
key: mapPassengerController.increasFeeFormKey,
key: mapPassengerController.increaseFeeFormKey,
child: MyTextForm(
controller: mapPassengerController
.increasFeeFromPassenger,

View File

@@ -69,7 +69,7 @@ class PassengerWallet extends StatelessWidget {
},
),
)),
const PassengerWalletDialoge(),
const PassengerWalletDialog(),
],
);
}

View File

@@ -9,8 +9,8 @@ import 'package:SEFER/views/widgets/elevated_btn.dart';
import '../../../main.dart';
class PassengerWalletDialoge extends StatelessWidget {
const PassengerWalletDialoge({
class PassengerWalletDialog extends StatelessWidget {
const PassengerWalletDialog({
super.key,
});

View File

@@ -0,0 +1,61 @@
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/payment/payment_controller.dart';
import '../../../constant/box_name.dart';
import '../../../main.dart';
import '../my_wallet/passenger_wallet.dart';
class PointsCaptain extends StatelessWidget {
PaymentController paymentController = Get.put(PaymentController());
PointsCaptain({
super.key,
required this.kolor,
required this.countPoint,
required this.pricePoint,
});
final Color kolor;
final String countPoint;
double pricePoint;
@override
Widget build(BuildContext context) {
return InkWell(
onTap: () async {
Get.to(() => const PassengerWallet());
paymentController.changePromoSheetDialogue();
},
child: Padding(
padding: const EdgeInsets.symmetric(horizontal: 3, vertical: 8),
child: Container(
width: Get.width * .21,
height: Get.width * .29,
margin: const EdgeInsets.all(4),
decoration: BoxDecoration(
color: kolor,
border: Border.all(color: AppColor.accentColor),
borderRadius: BorderRadius.circular(12),
shape: BoxShape.rectangle,
),
child: Center(
child: Column(
children: [
Text(
'$countPoint ${'Point'.tr}',
style: AppStyle.subtitle,
),
Text(
'$pricePoint ${box.read(BoxName.countryCode) == 'Jordan' ? 'JOD'.tr : 'LE'.tr}',
style: AppStyle.title,
textAlign: TextAlign.center,
),
],
),
)),
),
);
}
}

View File

@@ -3,7 +3,7 @@ import 'package:get/get.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import '../../../controller/home/profile/feed_back_controller.dart';
import '../../../controller/home/profile/complaint_controller.dart';
import '../../widgets/elevated_btn.dart';
class ComplaintPage extends StatelessWidget {
@@ -28,11 +28,11 @@ class ComplaintPage extends StatelessWidget {
decoration: InputDecoration(
border: const OutlineInputBorder(),
hintText: 'Enter your complaint here'.tr,
labelText: 'Complaint', // Update label
labelText: 'Complaint'.tr, // Update label
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter your complaint.';
return 'Please enter your complaint.'.tr;
}
return null;
},
@@ -51,7 +51,7 @@ class ComplaintPage extends StatelessWidget {
complaintController.formKey.currentState!.reset();
}
},
title: 'Submit '.tr,
title: 'Submit'.tr,
),
],
),

View File

@@ -4,9 +4,12 @@ import 'package:get/get.dart';
import 'package:SEFER/controller/home/profile/promos_controller.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import '../../../constant/box_name.dart';
import '../../../constant/colors.dart';
import '../../../constant/style.dart';
import '../../../main.dart';
import '../../widgets/mycircular.dart';
import 'budgets_ads.dart';
class PromosPassengerPage extends StatelessWidget {
const PromosPassengerPage({super.key});
@@ -22,89 +25,155 @@ class PromosPassengerPage extends StatelessWidget {
builder: (orderHistoryController) => orderHistoryController.isLoading
? const MyCircularProgressIndicator()
: ListView.builder(
itemCount: orderHistoryController.promoList.length,
itemCount: orderHistoryController.promoList.length +
1, // Adding 1 for the ad
itemBuilder: (BuildContext context, int index) {
final rides = orderHistoryController.promoList[index];
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: AppColor.secondaryColor,
boxShadow: [
BoxShadow(
color: AppColor.accentColor,
offset: Offset(-3, -3),
blurRadius: 0,
spreadRadius: 0,
blurStyle: BlurStyle.outer),
BoxShadow(
color: AppColor.accentColor,
offset: Offset(3, 3),
blurRadius: 0,
spreadRadius: 0,
blurStyle: BlurStyle.outer)
]),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
AnimatedTextKit(
animatedTexts: [
ScaleAnimatedText(rides['promo_code'],
textStyle: AppStyle.title),
WavyAnimatedText(rides['promo_code'],
textStyle: AppStyle.title),
FlickerAnimatedText(
rides['promo_code'],
textStyle: AppStyle.title),
WavyAnimatedText(rides['promo_code'],
textStyle: AppStyle.title),
],
isRepeatingAnimation: true,
onTap: () {
print("Tap Event");
},
),
Text(
rides['description'],
style: AppStyle.title,
),
],
),
Column(
children: [
Text(
rides['validity_start_date'],
style: AppStyle.title,
),
Text(
rides['validity_end_date'],
style: AppStyle.title,
),
],
),
],
),
Text(
'Copy this Promo to use it in your Ride!'.tr,
textAlign: TextAlign.center,
style: AppStyle.headTitle2
.copyWith(color: AppColor.accentColor),
)
],
if (index == 0) {
// Ad at the beginning
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: 120, // Adjust the height of the ad container
decoration: BoxDecoration(
color:
Colors.grey[200], // Background color for the ad
borderRadius: BorderRadius.circular(10),
),
child: Center(
child: Container(
decoration: AppStyle.boxDecoration,
height: Get.height * .19,
child: ListView(
scrollDirection: Axis.horizontal,
children: [
PointsCaptain(
kolor: AppColor.blueColor,
pricePoint:
box.read(BoxName.countryCode) ==
'Jordan'
? 5
: 100,
countPoint:
box.read(BoxName.countryCode) ==
'Jordan'
? '300'
: '100',
),
PointsCaptain(
kolor: Colors.green,
pricePoint:
box.read(BoxName.countryCode) ==
'Jordan'
? 10
: 200,
countPoint:
box.read(BoxName.countryCode) ==
'Jordan'
? '1040'
: '210',
),
PointsCaptain(
kolor: Colors.amberAccent,
pricePoint:
box.read(BoxName.countryCode) ==
'Jordan'
? 22
: 400,
countPoint:
box.read(BoxName.countryCode) ==
'Jordan'
? '2300'
: '450',
),
PointsCaptain(
kolor: AppColor.yellowColor,
pricePoint:
box.read(BoxName.countryCode) ==
'Jordan'
? 50
: 1000,
countPoint:
box.read(BoxName.countryCode) ==
'Jordan'
? '55000'
: '1200',
),
],
)),
),
),
),
);
);
} else {
// Promo items
final rides = orderHistoryController.promoList[index - 1];
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: AppStyle.boxDecoration,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Row(
mainAxisAlignment:
MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment:
CrossAxisAlignment.start,
children: [
AnimatedTextKit(
animatedTexts: [
ScaleAnimatedText(
rides['promo_code'],
textStyle: AppStyle.title),
WavyAnimatedText(
rides['promo_code'],
textStyle: AppStyle.title),
FlickerAnimatedText(
rides['promo_code'],
textStyle: AppStyle.title),
WavyAnimatedText(
rides['promo_code'],
textStyle: AppStyle.title),
],
isRepeatingAnimation: true,
onTap: () {
print("Tap Event");
},
),
Text(
rides['description'],
style: AppStyle.title,
),
],
),
Column(
children: [
Text(
rides['validity_start_date'],
style: AppStyle.title,
),
Text(
rides['validity_end_date'],
style: AppStyle.title,
),
],
),
],
),
Text(
'Copy this Promo to use it in your Ride!'.tr,
textAlign: TextAlign.center,
style: AppStyle.headTitle2
.copyWith(color: AppColor.accentColor),
)
],
),
),
),
);
}
},
),
)