This commit is contained in:
Hamza-Ayed
2023-11-13 17:34:00 +03:00
parent 8d405c5381
commit 8aab58d4aa
26 changed files with 349 additions and 88 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.4 KiB

After

Width:  |  Height:  |  Size: 37 KiB

View File

@@ -44,6 +44,11 @@ class AppLink {
static const String getDriverpaymentToday = "$ride/payment/get.php";
static const String getAllPayment = "$ride/payment/getAllPayment.php";
//-----------------Feed Back------------------
static const String addFeedBack = "$ride/feedBack/add.php";
static const String getFeedBack = "$ride/feedBack/get.php";
static const String updateFeedBack = "$ride/feedBack/updateFeedBack.php";
//-----------------DriverOrder------------------
static const String addDriverOrder = "$ride/driver_order/add.php";

View File

@@ -11,7 +11,7 @@ import 'package:ride/controller/functions/secure_storage.dart';
import 'package:ride/main.dart';
import 'package:ride/views/auth/verify_email_page.dart';
import 'package:ride/views/home/Captin/home_captin.dart';
import 'package:ride/views/home/map_page.dart';
import 'package:ride/views/home/map_page_passenger.dart';
class LoginCaptinController extends GetxController {
final formKey = GlobalKey<FormState>();

View File

@@ -10,7 +10,7 @@ import 'package:ride/controller/functions/crud.dart';
import 'package:ride/controller/functions/secure_storage.dart';
import 'package:ride/main.dart';
import 'package:ride/views/auth/verify_email_page.dart';
import 'package:ride/views/home/map_page.dart';
import 'package:ride/views/home/map_page_passenger.dart';
class LoginController extends GetxController {
final formKey = GlobalKey<FormState>();
@@ -56,7 +56,7 @@ class LoginController extends GetxController {
box.write(BoxName.name, jsonDecoeded['data'][0]['first_name']);
box.write(BoxName.phone, jsonDecoeded['data'][0]['phone']);
SecureStorage().saveData(BoxName.password, passwordController.text);
Get.offAll(() => MapPage());
Get.offAll(() => MapPagePassenger());
isloading = false;
update();
print(box.read(BoxName.passengerID).toString());
@@ -98,7 +98,7 @@ class LoginController extends GetxController {
goToMapPage() {
if (box.read(BoxName.email) != null) {
Get.offAll(() => const MapPage());
Get.offAll(() => const MapPagePassenger());
}
}

View File

@@ -109,7 +109,7 @@ class CameraClassController extends GetxController {
await http.MultipartFile.fromPath('image', imageFile.path),
); // Add the headers to the request
request.headers.addAll({
// "Content-Type": "application/x-www-form-urlencoded",
"Content-Type": "application/x-www-form-urlencoded",
'Authorization':
'Basic ${base64Encode(utf8.encode(AppCredintials.basicAuthCredentials))}',
});

View File

@@ -27,8 +27,10 @@ class CRUD {
var jsonData = jsonDecode(response.body);
if (jsonData['status'] == 'success') {
print(jsonData);
return response.body;
}
return jsonData['status'];
}
}
@@ -78,7 +80,7 @@ class CRUD {
jsonData['status'],
jsonData['message'],
);
// print(response.body);
return response.body;
}
}

View File

@@ -7,6 +7,7 @@ import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_polyline_algorithm/google_polyline_algorithm.dart';
import 'package:location/location.dart';
import 'package:ride/constant/box_name.dart';
import 'package:ride/constant/colors.dart';
import 'package:ride/constant/credential.dart';
import 'package:ride/constant/links.dart';
import 'package:ride/controller/firebase/firbase_messge.dart';
@@ -84,6 +85,7 @@ class MapPassengerController extends GetxController {
int remainingTimeTimerRideBegin = 60;
String stringRemainingTimeRideBegin = '';
late String rideId;
bool noCarString = false;
late String driverToken;
int carsOrder = 0;
@@ -415,15 +417,19 @@ class MapPassengerController extends GetxController {
'northeastLon': northeast.longitude.toString(),
});
if (res == 'failure') {
Get.defaultDialog(
title: 'No Car in your site.Sorry!',
middleText: '',
confirm: MyElevatedButton(
title: 'Back',
onPressed: () {
Get.back();
markerReloadingTimer.cancel();
}));
noCarString = true;
update();
// Get.snackbar('No Car in your site.Sorry!'.tr, '',
// backgroundColor: AppColor.redColor);
// Get.defaultDialog(
// title: 'No Car in your site.Sorry!'.tr,
// middleText: '',
// confirm: MyElevatedButton(
// title: 'Back',
// onPressed: () {
// Get.back();
// markerReloadingTimer.cancel();
// }));
} else {
dataCarsLocationByPassenger = jsonDecode(res);
// print(dataCarsLocationByPassenger);

View File

@@ -0,0 +1,45 @@
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/constant/box_name.dart';
import 'package:ride/constant/colors.dart';
import 'package:ride/constant/links.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/controller/functions/crud.dart';
import 'package:ride/main.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
class FeedBackController extends GetxController {
bool isLoading = false;
final formKey = GlobalKey<FormState>();
final feedbackController = TextEditingController();
void addFeedBack() async {
isLoading = true;
update();
var res = await CRUD().post(link: AppLink.addFeedBack, payload: {
'passengerId': box.read(BoxName.passengerID).toString(),
'feedBack': feedbackController.text
});
var d = jsonDecode(res);
// print(d);
if (d['status'].toString() == 'success') {
Get.defaultDialog(
title: 'Success'.tr,
titleStyle: AppStyle.title,
middleText: 'Feedback data saved successfully'.tr,
middleTextStyle: AppStyle.title,
confirm: MyElevatedButton(
kolor: AppColor.greenColor,
title: 'Ok'.tr,
onPressed: () {
Get.back();
Get.back();
}));
}
isLoading = false;
update();
}
}

View File

@@ -2,12 +2,15 @@ import 'dart:convert';
import 'package:get/get.dart';
import 'package:ride/constant/links.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/controller/functions/crud.dart';
import 'package:ride/views/home/map_page_passenger.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
class PromosController extends GetxController {
List<dynamic> promoList = [];
bool isloading = true;
bool isLoading = true;
late String promos;
@override
void onInit() {
getPromoBytody();
@@ -17,16 +20,25 @@ class PromosController extends GetxController {
Future getPromoBytody() async {
var res = await CRUD().get(link: AppLink.getPromoBytody, payload: {});
if (res.toString() == 'failure') {
Get.snackbar('failure', 'message');
isloading = false;
Get.defaultDialog(
title: 'No Promo for tody .'.tr,
middleText: '',
titleStyle: AppStyle.title,
confirm: MyElevatedButton(
title: 'Back'.tr,
onPressed: () {
Get.back();
Get.back();
}));
isLoading = false;
update();
} else {
var jsonDecoded = jsonDecode(res);
promoList = jsonDecoded['message'];
print(promoList);
isloading = false;
isLoading = false;
update();
print(promoList);
}
}
}

View File

@@ -9,7 +9,7 @@ import '../../main.dart';
import '../../onbording_page.dart';
import '../../views/auth/captin/login_captin.dart';
import '../../views/home/Captin/home_captin.dart';
import '../../views/home/map_page.dart';
import '../../views/home/map_page_passenger.dart';
class SplashScreenController extends GetxController
with SingleGetTickerProviderMixin {
@@ -48,7 +48,7 @@ class SplashScreenController extends GetxController
box.read(BoxName.onBoarding) == null
? Get.off(() => OnBoardingPage())
: box.read(BoxName.email) != null
? Get.off(() => const MapPage())
? Get.off(() => const MapPagePassenger())
: box.read(BoxName.emailDriver) == null
? Get.off(() => LoginPage())
: box.read(BoxName.emailDriver) != null

View File

@@ -7,7 +7,7 @@ import 'package:ride/controller/functions/crud.dart';
import 'package:ride/controller/home/map_passenger_controller.dart';
import 'package:ride/main.dart';
import 'package:ride/views/home/Captin/home_captin.dart';
import 'package:ride/views/home/map_page.dart';
import 'package:ride/views/home/map_page_passenger.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
// import '../home/captin/home_captain_controller.dart';
@@ -72,7 +72,7 @@ class RateController extends GetxController {
'comment': comment.text,
}).then((value) {
Get.find<MapPassengerController>().restCounter();
Get.offAll(const MapPage());
Get.offAll(const MapPagePassenger());
});
}
}

View File

@@ -39,7 +39,7 @@ class HomePage extends StatelessWidget {
padding: const EdgeInsets.symmetric(horizontal: 20, vertical: 10),
child: ListTile(
onTap: () {
Get.to(() => Language());
Get.to(() => const Language());
},
title: Text(
'Language'.tr,

View File

@@ -21,8 +21,8 @@ import 'map_widget.dart/payment_method.page.dart';
import 'map_widget.dart/timer_for_cancell_trip_from_passenger.dart';
import 'map_widget.dart/timer_to_passenger_from_driver.dart';
class MapPage extends StatelessWidget {
const MapPage({super.key});
class MapPagePassenger extends StatelessWidget {
const MapPagePassenger({super.key});
@override
Widget build(BuildContext context) {

View File

@@ -49,7 +49,9 @@ GetBuilder<MapPassengerController> buttomSheetMapPage() {
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Padding(
SizedBox(
width: Get.width * .15,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Image.asset(
'assets/images/jeep.png',
@@ -58,20 +60,35 @@ GetBuilder<MapPassengerController> buttomSheetMapPage() {
repeat: ImageRepeat.repeatX,
),
),
Column(
crossAxisAlignment: CrossAxisAlignment.start,
),
SizedBox(
width: Get.width * .55,
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.spaceEvenly,
children: [
Text(
'${'Your Ride Duration is '.tr}${controller.duration} minutes'),
'${'Your Ride Duration is '.tr}${controller.duration} minutes',
style: AppStyle.subtitle,
),
Text(
'${'You will be thier in'.tr} ${DateFormat('h:mm a').format(controller.newTime)}'),
'${'You will be thier in'.tr} ${DateFormat('h:mm a').format(controller.newTime)}',
style: AppStyle.subtitle,
),
Text(
'${'You trip distance is'.tr} ${controller.distance} KM')
'${'You trip distance is'.tr} ${controller.distance} KM',
style: AppStyle.subtitle,
)
],
),
Padding(
padding:
const EdgeInsets.only(right: 5, left: 5),
),
SizedBox(
width: Get.width * .2,
child: Padding(
padding: const EdgeInsets.only(
right: 5, left: 5),
child: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
@@ -91,6 +108,7 @@ GetBuilder<MapPassengerController> buttomSheetMapPage() {
],
),
),
),
],
),
),

View File

@@ -95,22 +95,48 @@ class MainBottomMenuMap extends StatelessWidget {
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text('Nearest Car for you about '.tr),
Container(
controller.noCarString == false
? Text(
'Nearest Car for you about '.tr)
: Container(
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(12),
color: AppColor.redColor,
),
child: Padding(
padding:
const EdgeInsets.all(6),
child: Text(
'No Car in your site. Sorry!'
.tr,
style: AppStyle.title
.copyWith(
color: AppColor
.secondaryColor),
),
),
),
controller.noCarString == false
? Container(
decoration: BoxDecoration(
border: Border.all(
color: AppColor.redColor,
color:
AppColor.redColor,
width: 3)),
child: Padding(
padding: const EdgeInsets.all(4),
child: Text(
(controller.nearestCar != null
padding:
const EdgeInsets.all(4),
child: Text((controller
.nearestCar !=
null
? controller
.durationByPassenger
.toString()
: 'N/A')),
),
),
)
: const SizedBox(),
],
)
],

View File

@@ -3,8 +3,10 @@ import 'package:get/get.dart';
import 'package:get/get_rx/src/rx_typedefs/rx_typedefs.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/views/home/my_wallet/passenger_wallet.dart';
import 'package:ride/views/home/profile/feed_back_page.dart';
import 'package:ride/views/home/profile/order_history.dart';
import 'package:ride/views/home/profile/promos_passenger_page.dart';
import 'package:ride/views/home/profile/taarif_page.dart';
import '../../../constant/colors.dart';
import '../../../controller/home/map_passenger_controller.dart';
@@ -120,7 +122,9 @@ class MapMenuWidget extends StatelessWidget {
icon: Icons.history,
),
IconMainPageMap(
onTap: () {},
onTap: () {
Get.to(() => const TaarifPage());
},
title: 'Tariff',
icon: Icons.money,
),
@@ -160,7 +164,9 @@ class MapMenuWidget extends StatelessWidget {
icon: Icons.settings,
),
IconMainPageMap(
onTap: () {},
onTap: () {
Get.to(() => FeedBackPage());
},
title: 'Feed Back',
icon: Icons.feedback,
),

View File

@@ -1,6 +1,6 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/views/home/map_page.dart';
import 'package:ride/views/home/map_page_passenger.dart';
import '../../../constant/style.dart';
import '../../../controller/home/map_passenger_controller.dart';

View File

@@ -329,11 +329,19 @@ class PassengerWallet extends StatelessWidget {
),
MyElevatedButton(
title: 'Pay with Credit Card'.tr,
onPressed: () => controller.makePaymentStripe(
onPressed: () {
if (controller.selectedAmount != 0) {
controller.makePaymentStripe(
controller.selectedAmount as int,
'USD',
() => Get.snackbar('Hi', '')),
),
() => Get.snackbar('Hi', ''));
} else {
Toast.show(
context,
'You will choose one of above !'.tr,
AppColor.redColor);
}
}),
MyElevatedButton(
title: 'Cancel'.tr,
kolor: AppColor.redColor,

View File

@@ -0,0 +1,60 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/controller/home/profile/feed_back_controller.dart';
import 'package:ride/views/widgets/my_scafold.dart';
import 'package:ride/views/widgets/mycircular.dart';
import '../../widgets/elevated_btn.dart';
class FeedBackPage extends StatelessWidget {
FeedBackPage({super.key});
FeedBackController feedBackController = Get.put(FeedBackController());
@override
Widget build(BuildContext context) {
return MyScafolld(
title: 'Feed Back'.tr,
body: [
Padding(
padding: const EdgeInsets.all(26),
child: Form(
key: feedBackController.formKey,
child: Column(
children: [
TextFormField(
controller: feedBackController.feedbackController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
hintText: 'Enter your feedback here',
labelText: 'Feedback',
),
validator: (value) {
if (value == null || value.isEmpty) {
return 'Please enter your feedback.';
}
return null;
},
),
const SizedBox(height: 20),
feedBackController.isLoading
? const MyCircularProgressIndicator()
: MyElevatedButton(
onPressed: () {
if (feedBackController.formKey.currentState!
.validate()) {
feedBackController.addFeedBack();
// Clear the feedback form
feedBackController.formKey.currentState!.reset();
}
},
title: 'Submit Feedback'.tr,
),
],
),
),
),
],
isleading: true,
);
}
}

View File

@@ -19,7 +19,7 @@ class PromosPassengerPage extends StatelessWidget {
isleading: true,
body: [
GetBuilder<PromosController>(
builder: (orderHistoryController) => orderHistoryController.isloading
builder: (orderHistoryController) => orderHistoryController.isLoading
? const MyCircularProgressIndicator()
: ListView.builder(
itemCount: orderHistoryController.promoList.length,

View File

@@ -0,0 +1,73 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/views/widgets/my_scafold.dart';
class TaarifPage extends StatelessWidget {
const TaarifPage({super.key});
@override
Widget build(BuildContext context) {
return MyScafolld(isleading: true, title: 'Tariffs'.tr, body: [
Padding(
padding: const EdgeInsets.symmetric(horizontal: 4),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Table(
defaultVerticalAlignment: TableCellVerticalAlignment.middle,
border: TableBorder.symmetric(),
textBaseline: TextBaseline.alphabetic,
children: [
TableRow(
// decoration: AppStyle.boxDecoration,
children: [
Text('Minimum fare'.tr, style: AppStyle.title),
Text('1 USD', style: AppStyle.title),
],
),
TableRow(
children: [
Text('Maximum fare'.tr, style: AppStyle.title),
Text('200 USD', style: AppStyle.title),
],
),
TableRow(
children: [
Text('Flag-down fee'.tr, style: AppStyle.title),
Text('0.47 USD', style: AppStyle.title),
],
),
TableRow(
children: [
Text('0.05 USD/min and 0.21 USD/km', style: AppStyle.title),
Text('Including Tax', style: AppStyle.title),
],
),
],
),
const SizedBox(height: 10),
Text('BookingFee'.tr, style: AppStyle.headtitle2),
const SizedBox(height: 10),
Text('4.17%', style: AppStyle.title),
const SizedBox(height: 20),
Text('Morning', style: AppStyle.headtitle2),
const SizedBox(height: 10),
Text('from 07:30 till 10:30 (Thursday, Friday, Saturday, Monday)',
style: AppStyle.title),
const SizedBox(height: 20),
Text('Evening', style: AppStyle.headtitle2),
const SizedBox(height: 10),
Text('from 12:00 till 15:00 (Thursday, Friday, Saturday, Monday)',
style: AppStyle.title),
const SizedBox(height: 20),
Text('Night', style: AppStyle.headtitle2),
const SizedBox(height: 10),
Text('from 23:59 till 05:30', style: AppStyle.title),
],
),
),
]);
}
}

View File

@@ -6,7 +6,7 @@ import 'package:ride/views/widgets/elevated_btn.dart';
import '../../constant/box_name.dart';
import '../../controller/local/local_controller.dart';
import '../auth/login_page.dart';
import '../home/map_page.dart';
import '../home/map_page_passenger.dart';
class Language extends StatelessWidget {
const Language({Key? key}) : super(key: key);
@@ -31,7 +31,7 @@ class Language extends StatelessWidget {
onPressed: () {
controller.changeLang("ar");
box.read(BoxName.email) != null
? Get.offAll(() => const MapPage())
? Get.offAll(() => const MapPagePassenger())
: Get.offAll(() => LoginPage());
},
),
@@ -40,7 +40,7 @@ class Language extends StatelessWidget {
onPressed: () {
controller.changeLang("en");
box.read(BoxName.email) != null
? Get.offAll(() => const MapPage())
? Get.offAll(() => const MapPagePassenger())
: Get.offAll(() => LoginPage());
},
),
@@ -49,7 +49,7 @@ class Language extends StatelessWidget {
onPressed: () {
controller.changeLang("tr");
box.read(BoxName.email) != null
? Get.offAll(() => const MapPage())
? Get.offAll(() => const MapPagePassenger())
: Get.offAll(() => LoginPage());
},
),