9/8/1-captin

This commit is contained in:
Hamza-Ayed
2023-09-08 18:25:14 +03:00
parent c2600c5938
commit a626915f45
69 changed files with 1808 additions and 316 deletions

View File

View File

@@ -0,0 +1,259 @@
import 'package:animated_text_kit/animated_text_kit.dart';
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/style.dart';
import 'package:ride/controller/auth/captin/login_captin_controller.dart';
import 'package:ride/main.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
import 'package:ride/views/widgets/my_scafold.dart';
import '../../../controller/auth/login_controller.dart';
import '../../widgets/mycircular.dart';
import '../register_page.dart';
class LoginCaptin extends StatelessWidget {
final controller = Get.put(LoginController());
LoginCaptin({super.key});
@override
Widget build(BuildContext context) {
Get.put(LoginCaptinController());
return GetBuilder<LoginCaptinController>(
builder: (controller) => MyScafolld(
title: 'Login Captin'.tr,
isleading: true,
body: [
if (box.read(BoxName.agreeTerms) != 'agreed')
agreedPage()
else
SingleChildScrollView(
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(25),
child: Container(
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
offset: Offset(3, 3),
color: AppColor.accentColor,
blurRadius: 3)
],
color: AppColor.secondaryColor,
),
child: Form(
key: controller.formKey,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
children: [
TextFormField(
keyboardType: TextInputType.emailAddress,
controller: controller.emailController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius: BorderRadius.circular(10),
),
fillColor: AppColor.accentColor,
hoverColor: AppColor.accentColor,
focusColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Email'.tr,
hintText: 'Enter your email address'.tr,
),
validator: (value) {
if (value!.isEmpty ||
(!value.contains('@') ||
!value.contains('.'))) {
return 'Please enter Your Email.'.tr;
}
return null;
},
),
const SizedBox(
height: 30,
),
TextFormField(
keyboardType: TextInputType.phone,
cursorColor: AppColor.accentColor,
controller: controller.phoneController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius: BorderRadius.circular(10),
),
focusColor: AppColor.accentColor,
fillColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Phone'.tr,
hintText: 'Enter your phone number'.tr,
),
validator: (value) {
if (value!.isEmpty ||
value.length != 10) {
return 'Please enter your phone number.'
.tr;
}
return null;
},
),
const SizedBox(
height: 15,
),
TextFormField(
obscureText: true,
keyboardType: TextInputType.emailAddress,
controller: controller.passwordController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius: BorderRadius.circular(10),
),
fillColor: AppColor.accentColor,
hoverColor: AppColor.accentColor,
focusColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Password'.tr,
hintText:
'Please enter your phone number.'.tr,
),
validator: (value) {
if (value!.isEmpty ||
(value.length > 6)) {
return 'Please enter Your Password.'.tr;
}
return null;
},
),
GetBuilder<LoginCaptinController>(
builder: (controller) => controller
.isloading
? const MyCircularProgressIndicator()
: MyElevatedButton(
onPressed: () {
if (controller
.formKey.currentState!
.validate()) {
controller.login();
}
},
title: 'Submit'.tr,
),
)
],
),
),
),
),
)),
Text(
'if you dont have account'.tr,
style: AppStyle.subtitle,
),
AnimatedTextKit(
onTap: () => Get.to(() => const RegisterPage()),
animatedTexts: [
TypewriterAnimatedText(
'Register'.tr,
textStyle: AppStyle.headtitle2,
speed: const Duration(milliseconds: 200),
),
],
totalRepeatCount: 4,
pause: const Duration(milliseconds: 200),
displayFullTextOnTap: true,
stopPauseOnTap: true,
),
],
),
)
],
),
);
}
Padding agreedPage() {
return Padding(
padding: const EdgeInsets.all(16),
child: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Image.asset(
'assets/images/notepad.png',
width: Get.width * .2,
),
SizedBox(
width: Get.width * .7,
child: Text(
'Accept Ride\'s Terms & Review Privacy Notice'.tr,
style: AppStyle.headtitle2,
),
),
],
),
const SizedBox(
height: 30,
),
Text(
'By selecting "I Agree" below, I have reviewed and agree to the Terms of Use and acknowledge the Privacy Notice. I am at least 18 years of age.'
.tr,
style: AppStyle.title,
),
const SizedBox(
height: 100,
),
GetBuilder<LoginController>(
builder: (controller) => Column(
children: [
Row(
children: [
Checkbox.adaptive(
autofocus: true,
tristate: true,
splashRadius: 25,
activeColor: AppColor.primaryColor,
value: controller.isAgreeTerms,
onChanged: (value) => controller.changeAgreeTerm(),
),
Text(
'I Agree'.tr,
style: controller.isAgreeTerms
? AppStyle.title
: AppStyle.title
.copyWith(color: AppColor.accentColor),
),
],
),
MyElevatedButton(
title: 'Submit'.tr,
onPressed: () => controller.saveAgreementTerms())
],
),
)
],
),
);
}
}

View File

@@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class RegisterCaptin extends StatelessWidget {
const RegisterCaptin({super.key});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Register Captin'.tr),
),
body: Container(),
);
}
}

View File

View File

@@ -5,6 +5,7 @@ import 'package:ride/constant/box_name.dart';
import 'package:ride/constant/colors.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/main.dart';
import 'package:ride/views/auth/captin/login_captin.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
import 'package:ride/views/widgets/my_scafold.dart';
@@ -21,184 +22,184 @@ class LoginPage extends StatelessWidget {
Widget build(BuildContext context) {
Get.put(LoginController());
return GetBuilder<LoginController>(
builder: (controller) =>
MyScafolld(title: 'Login'.tr, isleading: false, body: [
if (box.read(BoxName.agreeTerms) != 'agreed')
agreedpage()
else
SingleChildScrollView(
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(25),
child: Container(
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
offset: Offset(3, 3),
color: AppColor.accentColor,
blurRadius: 3)
],
color: AppColor.secondaryColor,
),
child: Form(
key: controller.formKey,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
children: [
TextFormField(
keyboardType:
TextInputType.emailAddress,
controller: controller.emailController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius:
BorderRadius.circular(10),
),
fillColor: AppColor.accentColor,
hoverColor: AppColor.accentColor,
focusColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Email'.tr,
hintText:
'Enter your email address'.tr,
builder: (controller) => MyScafolld(
title: 'Login'.tr,
isleading: false,
body: [
if (box.read(BoxName.agreeTerms) != 'agreed')
agreedPage()
else
SingleChildScrollView(
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(25),
child: Container(
decoration: const BoxDecoration(
boxShadow: [
BoxShadow(
offset: Offset(3, 3),
color: AppColor.accentColor,
blurRadius: 3)
],
color: AppColor.secondaryColor,
),
child: Form(
key: controller.formKey,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: SingleChildScrollView(
child: Column(
children: [
TextFormField(
keyboardType: TextInputType.emailAddress,
controller: controller.emailController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
validator: (value) {
if (value!.isEmpty ||
(!value.contains('@') ||
!value.contains('.'))) {
return 'Please enter Your Email.'
.tr;
}
return null;
},
borderRadius: BorderRadius.circular(10),
),
const SizedBox(
height: 30,
),
TextFormField(
keyboardType: TextInputType.phone,
cursorColor: AppColor.accentColor,
controller: controller.phoneController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius:
BorderRadius.circular(10),
),
focusColor: AppColor.accentColor,
fillColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Phone'.tr,
hintText:
'Enter your phone number'.tr,
),
validator: (value) {
if (value!.isEmpty ||
value.length != 10) {
return 'Please enter your phone number.'
.tr;
}
return null;
},
),
const SizedBox(
height: 15,
),
TextFormField(
obscureText: true,
keyboardType:
TextInputType.emailAddress,
controller:
controller.passwordController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius:
BorderRadius.circular(10),
),
fillColor: AppColor.accentColor,
hoverColor: AppColor.accentColor,
focusColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Password'.tr,
hintText:
'Please enter your phone number.'
.tr,
),
validator: (value) {
if (value!.isEmpty ||
(value.length > 6)) {
return 'Please enter Your Password.'
.tr;
}
return null;
},
),
GetBuilder<LoginController>(
builder: (controller) => controller
.isloading
? const MyCircularProgressIndicator()
: MyElevatedButton(
onPressed: () {
if (controller
.formKey.currentState!
.validate()) {
controller.login();
}
},
title: 'Submit'.tr,
),
)
],
fillColor: AppColor.accentColor,
hoverColor: AppColor.accentColor,
focusColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Email'.tr,
hintText: 'Enter your email address'.tr,
),
validator: (value) {
if (value!.isEmpty ||
(!value.contains('@') ||
!value.contains('.'))) {
return 'Please enter Your Email.'.tr;
}
return null;
},
),
),
const SizedBox(
height: 30,
),
TextFormField(
keyboardType: TextInputType.phone,
cursorColor: AppColor.accentColor,
controller: controller.phoneController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius: BorderRadius.circular(10),
),
focusColor: AppColor.accentColor,
fillColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Phone'.tr,
hintText: 'Enter your phone number'.tr,
),
validator: (value) {
if (value!.isEmpty ||
value.length != 10) {
return 'Please enter your phone number.'
.tr;
}
return null;
},
),
const SizedBox(
height: 15,
),
TextFormField(
obscureText: true,
keyboardType: TextInputType.emailAddress,
controller: controller.passwordController,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: const BorderSide(
color: AppColor.primaryColor,
width: 2.0,
),
borderRadius: BorderRadius.circular(10),
),
fillColor: AppColor.accentColor,
hoverColor: AppColor.accentColor,
focusColor: AppColor.accentColor,
border: const OutlineInputBorder(
borderRadius: BorderRadius.all(
Radius.circular(12))),
labelText: 'Password'.tr,
hintText:
'Please enter your phone number.'.tr,
),
validator: (value) {
if (value!.isEmpty ||
(value.length > 6)) {
return 'Please enter Your Password.'.tr;
}
return null;
},
),
GetBuilder<LoginController>(
builder: (controller) => controller
.isloading
? const MyCircularProgressIndicator()
: MyElevatedButton(
onPressed: () {
if (controller
.formKey.currentState!
.validate()) {
controller.login();
}
},
title: 'Submit'.tr,
),
)
],
),
),
)),
Text(
'if you dont have account'.tr,
style: AppStyle.subtitle,
),
AnimatedTextKit(
onTap: () => Get.to(() => const RegisterPage()),
animatedTexts: [
TypewriterAnimatedText(
'Register'.tr,
textStyle: AppStyle.headtitle2,
speed: const Duration(milliseconds: 200),
),
],
totalRepeatCount: 4,
pause: const Duration(milliseconds: 200),
displayFullTextOnTap: true,
stopPauseOnTap: true,
)
],
),
)),
Text(
'if you dont have account'.tr,
style: AppStyle.subtitle,
),
)
]));
AnimatedTextKit(
onTap: () => Get.to(() => const RegisterPage()),
animatedTexts: [
TypewriterAnimatedText(
'Register'.tr,
textStyle: AppStyle.headtitle2,
speed: const Duration(milliseconds: 200),
),
],
totalRepeatCount: 4,
pause: const Duration(milliseconds: 200),
displayFullTextOnTap: true,
stopPauseOnTap: true,
),
GestureDetector(
onTap: () => Get.to(LoginCaptin()),
child: Text(
'If You Want be Captin Click Here.'.tr,
style: AppStyle.headtitle2,
),
)
],
),
)
],
),
);
}
Padding agreedpage() {
Padding agreedPage() {
return Padding(
padding: const EdgeInsets.all(16),
child: Column(

View File

@@ -0,0 +1,44 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/views/widgets/mycircular.dart';
import '../../../controller/functions/locaton_controller.dart';
import '../../widgets/my_scafold.dart';
class HomeCaptin extends StatelessWidget {
const HomeCaptin({super.key});
@override
Widget build(BuildContext context) {
Get.put(LocationController());
return MyScafolld(
title: 'Captin Home'.tr,
action: GetBuilder<LocationController>(
builder: (locationController) => locationController.isloading
? const SizedBox(
height: 2, width: 2, child: CircularProgressIndicator())
: const SizedBox(),
),
body: [
GetBuilder<LocationController>(
builder: (locationController) => Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text(
'${locationController.mylocation}',
style: AppStyle.subtitle,
),
Text(
'${DateTime.now()}',
style: AppStyle.subtitle,
)
],
),
))
],
isleading: true);
}
}

View File

@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/constant/box_name.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/controller/home/payment/payment_controller.dart';
import 'package:ride/controller/home/payment/credit_card_Controller.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
import '../../../constant/colors.dart';
@@ -125,16 +125,16 @@ class CashConfirmPageShown extends StatelessWidget {
height: 2,
indent: 1,
),
controller.cardNumber == null ||
controller.cardNumber!.isEmpty
? MyElevatedButton(
title: 'Add Payment Method'.tr,
onPressed: () {
controller.changePaymentMethodPageShown();
CreditCardController().openPayment();
},
)
: const SizedBox()
// controller.cardNumber == null ||
// controller.cardNumber!.isEmpty
// ? MyElevatedButton(
// title: 'Add Payment Method'.tr,
// onPressed: () {
// controller.changePaymentMethodPageShown();
// CreditCardController().openPayment();
// },
// )
// : const SizedBox()
],
),
),

View File

@@ -5,6 +5,7 @@ import 'package:ride/constant/style.dart';
import 'package:ride/controller/home/profile/order_history_controller.dart';
import 'package:ride/views/home/my_wallet/passenger_wallet.dart';
import 'package:ride/views/home/profile/order_history.dart';
import 'package:ride/views/home/profile/promos_passenger_page.dart';
import '../../../constant/colors.dart';
import '../../../controller/home/map_page_controller.dart';
@@ -181,7 +182,9 @@ class MapMenuWidget extends StatelessWidget {
icon: Icons.feedback,
),
IconMainPageMap(
onTap: () {},
onTap: () {
Get.to(() => const PromosPassengerPage());
},
title: 'Promos',
icon: Icons.monetization_on,
),

View File

@@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/constant/box_name.dart';
import 'package:ride/controller/functions/secure_storage.dart';
import 'package:ride/controller/home/payment/payment_controller.dart';
import 'package:ride/controller/home/payment/credit_card_Controller.dart';
import 'package:ride/views/widgets/elevated_btn.dart';
import '../../../constant/colors.dart';
@@ -126,6 +126,7 @@ class CreditCardWidget extends StatelessWidget {
return GetBuilder<CreditCardController>(
builder: (controller) => Container(
height: Get.height * .3,
width: Get.width * .9,
decoration: const BoxDecoration(
color: AppColor.secondaryColor,
borderRadius: BorderRadius.all(Radius.circular(15)),
@@ -147,6 +148,7 @@ class CreditCardWidget extends StatelessWidget {
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
SizedBox(
child: Row(

View File

@@ -1,12 +1,19 @@
import 'package:flutter/material.dart';
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/controller/payment/payment_controller.dart';
import 'package:ride/views/widgets/my_scafold.dart';
import 'package:flutter_paypal/flutter_paypal.dart';
import '../../../constant/box_name.dart';
import '../../../constant/colors.dart';
import '../../../controller/functions/secure_storage.dart';
import '../../../controller/home/payment/credit_card_Controller.dart';
import '../../../main.dart';
import '../../widgets/elevated_btn.dart';
import '../map_widget.dart/payment_method.page.dart';
class PassengerWallet extends StatelessWidget {
const PassengerWallet({super.key});
@@ -14,6 +21,7 @@ class PassengerWallet extends StatelessWidget {
@override
Widget build(BuildContext context) {
Get.put(PaymentController());
Get.put(CreditCardController());
return MyScafolld(
title: 'My Wallet',
isleading: true,
@@ -21,39 +29,449 @@ class PassengerWallet extends StatelessWidget {
GetBuilder<PaymentController>(
builder: (controller) => Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
Column(
children: [
Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: AppColor.secondaryColor,
boxShadow: [
BoxShadow(
color: AppColor.accentColor,
offset: Offset(-1, -1),
blurRadius: 0,
spreadRadius: 0,
blurStyle: BlurStyle.normal),
BoxShadow(
color: AppColor.accentColor,
offset: Offset(3, 3),
blurRadius: 1,
spreadRadius: 0,
blurStyle: BlurStyle.normal)
]),
child: Padding(
padding: const EdgeInsets.all(10),
child: Text(
'You Have ${box.read(BoxName.passengerWalletTotal).toString()} JD in SEFER Wallet',
style: AppStyle.title,
Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Container(
decoration: const BoxDecoration(
borderRadius:
BorderRadius.all(Radius.circular(12)),
color: AppColor.secondaryColor,
boxShadow: [
BoxShadow(
color: AppColor.accentColor,
offset: Offset(-1, -1),
blurRadius: 0,
spreadRadius: 0,
blurStyle: BlurStyle.normal),
BoxShadow(
color: AppColor.accentColor,
offset: Offset(3, 3),
blurRadius: 1,
spreadRadius: 0,
blurStyle: BlurStyle.normal)
]),
child: Padding(
padding: const EdgeInsets.all(10),
child: Text(
'You Have ${box.read(BoxName.passengerWalletTotal).toString()} JD in SEFER Wallet',
style: AppStyle.title,
),
),
),
],
),
),
const SizedBox(
height: 30,
),
const CreditCardWidget(),
const SizedBox(
height: 10,
),
GetBuilder<CreditCardController>(
builder: (reditCardControllerc) => Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
MyElevatedButton(
title: 'Save Credit Card'.tr,
onPressed: () async {
if (controller.formKey.currentState!
.validate()) {
SecureStorage().saveData(
BoxName.cardNumber,
reditCardControllerc
.cardNumberController.text);
SecureStorage().saveData(
BoxName.cardHolderName,
reditCardControllerc
.cardHolderNameController.text);
SecureStorage().saveData(
BoxName.cvvCode,
reditCardControllerc
.cvvCodeController.text);
SecureStorage().saveData(
BoxName.expiryDate,
reditCardControllerc
.expiryDateController.text);
}
},
),
],
)),
// MyElevatedButton(
// title: 'Charge your Wallet',
// onPressed: () {
// Get.defaultDialog(
// title: 'Choose amount you will Charge?'.tr,
// content: Column(
// crossAxisAlignment: CrossAxisAlignment.center,
// children: [
// Row(
// children: [
// Radio(
// value: 10,
// groupValue: controller.selectedAmount,
// onChanged: (value) {
// controller.selectedAmount =
// value as String?;
// },
// ),
// Text('10 and get 4% discount'.tr),
// ],
// ),
// Row(
// children: [
// Radio(
// value: 20,
// groupValue: controller.selectedAmount,
// onChanged: (value) {
// controller.selectedAmount =
// value as String?;
// },
// ),
// Text('20 and get 6% discount'.tr),
// ],
// ),
// Row(
// children: [
// Radio(
// value: 40,
// groupValue: controller.selectedAmount,
// onChanged: (value) {
// controller.selectedAmount =
// value as String?;
// },
// ),
// Text('40 and get 8% discount'.tr),
// ],
// ),
// Row(
// children: [
// Radio(
// value: 100,
// groupValue: controller.selectedAmount,
// onChanged: (value) {
// controller.selectedAmount =
// value as String?;
// },
// ),
// Text('100 and get 11% discount'.tr),
// ],
// ),
// ],
// ));
// },
// )
],
),
],
),
],
),
),
GetBuilder<PaymentController>(
builder: (controller) => controller.isPromoSheetDialogue
? Container(
color: AppColor.accentColor.withOpacity(.91),
)
: const SizedBox()),
GetBuilder<PaymentController>(
builder: (controller) => Positioned(
bottom: Get.height * .3,
left: Get.width * .3,
right: Get.width * .3,
child: MyElevatedButton(
title: 'Show Promos',
onPressed: () {
controller.changePromoSheetDialogue();
},
),
)),
GetBuilder<PaymentController>(
builder: (controller) => Positioned(
top: Get.height * .2,
right: Get.width * .15,
left: Get.width * .15,
bottom: Get.height * .2,
child: controller.isPromoSheetDialogue
? Container(
decoration: const BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(12)),
color: AppColor.secondaryColor,
boxShadow: [
BoxShadow(
color: AppColor.accentColor,
offset: Offset(-1, -1),
blurRadius: 0,
spreadRadius: 0,
blurStyle: BlurStyle.normal),
BoxShadow(
color: AppColor.accentColor,
offset: Offset(3, 3),
blurRadius: 1,
spreadRadius: 0,
blurStyle: BlurStyle.normal)
]),
child: Padding(
padding: const EdgeInsets.all(6),
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
GestureDetector(
onTap: () {
controller.updateSelectedAmount(10);
},
child: Row(
children: [
Radio(
value: 10,
groupValue: controller.selectedAmount,
onChanged: (value) {
controller
.updateSelectedAmount(value as int);
},
),
Text(
'10 and get 4% discount'.tr,
style: AppStyle.title,
),
],
),
),
GestureDetector(
onTap: () {
controller.updateSelectedAmount(20);
},
child: Row(
children: [
Radio(
value: 20,
groupValue: controller.selectedAmount,
onChanged: (value) {
controller
.updateSelectedAmount(value as int);
},
),
Text(
'20 and get 6% discount'.tr,
style: AppStyle.title,
),
],
)),
GestureDetector(
onTap: () {
controller.updateSelectedAmount(40);
},
child: Row(
children: [
Radio(
value: 40,
groupValue: controller.selectedAmount,
onChanged: (value) {
controller
.updateSelectedAmount(value as int);
},
),
Text(
'40 and get 8% discount'.tr,
style: AppStyle.title,
),
],
)),
GestureDetector(
onTap: () {
controller.updateSelectedAmount(100);
},
child: Row(
children: [
Radio(
value: 100,
groupValue: controller.selectedAmount,
onChanged: (value) {
controller
.updateSelectedAmount(value as int);
},
),
Text(
'100 and get 11% discount'.tr,
style: AppStyle.title,
),
],
)),
const Spacer(),
MyElevatedButton(
title: 'Pay with Your PayPal',
onPressed: () {
Navigator.of(context).push(
MaterialPageRoute(
builder: (BuildContext context) =>
UsePaypal(
sandboxMode: true,
clientId:
"AW1TdvpSGbIM5iP4HJNI5TyTmwpY9Gv9dYw8_8yW5lYIbCqf326vrkrp0ce9TAqjEGMHiV3OqJM_aRT0",
secretKey:
"EHHtTDjnmTZATYBPiGzZC_AZUfMpMAzj2VZUeqlFUrRJA_C0pQNCxDccB5qoRQSEdcOnnKQhycuOWdP9",
returnURL:
"https://samplesite.com/return",
cancelURL:
"https://samplesite.com/cancel",
transactions: [
{
"amount": {
//sb-opsju26682403@personal.example.com
"total":
'${controller.selectedAmount}',
"currency": "USD",
"details": {
"subtotal":
'${controller.selectedAmount}',
"shipping": '0',
"shipping_discount": 0
}
},
"description":
"The payment transaction description.",
"payment_options": const {
"allowed_payment_method":
"INSTANT_FUNDING_SOURCE"
},
"item_list": {
"items": [
{
"name": "Sefer Wallet ",
"quantity": 1,
"price":
'${controller.selectedAmount}',
"currency": "USD"
}
],
// shipping address is not required though
"shipping_address": const {
"recipient_name":
"SEFER Wallet",
"line1": "Shafa Badran",
"line2": "",
"city": "Amman",
"country_code": "JO",
"postal_code": "13112",
"phone": "+962798583052",
"state": "Amman"
},
}
}
],
note:
"Contact us for any questions on your order.",
onSuccess: (Map params) async {
print("onSuccess: $params");
await CRUD().post(
link: AppLink
.addPassengersWallet,
payload: {
'passenger_id': box
.read(
BoxName.pasengerID)
.toString(),
'balance': controller
.selectedAmount
.toString()
});
controller
.changePromoSheetDialogue();
await controller
.getPassengerWallet();
},
onError: (error) {
print("onError: $error");
},
onCancel: (params) {
print('cancelled: $params');
}),
),
);
// controller.changePromoSheetDialogue();
// Get.to(() {
// UsePaypal(
// sandboxMode: true,
// clientId:
// "AXE7bR3WzFEfAInUA2PBDOsW4zolx11Qr3jVOOjjJ7KGDLY3tnMIhZgyFT5Qkvj1NKWPaE8VZbG4UrZs",
// secretKey:
// "EJPW01FKqOm-SKKP16LQ_2cr3b124aZgmE0vi3JfbkWgLffv2xIjT4iCIfQv8RYn3W8h4DzxgZu_UxZC",
// returnURL:
// "https://samplesite.com/return",
// cancelURL:
// "https://samplesite.com/cancel",
// transactions: const [
// {
// "amount": {
// "total": '10.12',
// "currency": "USD",
// "details": {
// "subtotal": '10.12',
// "shipping": '0',
// "shipping_discount": 0
// }
// },
// "description":
// "The payment transaction description.",
// // "payment_options": {
// // "allowed_payment_method":
// // "INSTANT_FUNDING_SOURCE"
// // },
// "item_list": {
// "items": [
// {
// "name": "A demo product",
// "quantity": 1,
// "price": '10.12',
// "currency": "USD"
// }
// ],
// // shipping address is not required though
// "shipping_address": {
// "recipient_name": "Jane Foster",
// "line1": "Travis County",
// "line2": "",
// "city": "Austin",
// "country_code": "US",
// "postal_code": "73301",
// "phone": "+00000000",
// "state": "Texas"
// },
// }
// }
// ],
// note:
// "Contact us for any questions on your order.",
// onSuccess: (Map params) async {
// print("onSuccess: $params");
// },
// onError: (error) {
// print("onError: $error");
// },
// onCancel: (params) {
// print('cancelled: $params');
// });
// });
},
),
MyElevatedButton(
title: 'Cancel',
kolor: AppColor.redColor,
onPressed: () {
controller.changePromoSheetDialogue();
},
),
],
),
))
: const SizedBox()),
)
],
);

View File

@@ -1,8 +1,11 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/constant/style.dart';
import 'package:ride/views/widgets/my_scafold.dart';
import 'package:ride/views/widgets/mycircular.dart';
import '../../../constant/colors.dart';
import '../../../controller/functions/launch.dart';
import '../../../controller/home/profile/order_history_controller.dart';
class OrderHistory extends StatelessWidget {
@@ -24,8 +27,75 @@ class OrderHistory extends StatelessWidget {
itemCount:
orderHistoryController.orderHistoryListPassenger.length,
itemBuilder: (BuildContext context, int index) {
return Text(orderHistoryController
.orderHistoryListPassenger[0]['date']);
final rides =
orderHistoryController.orderHistoryListPassenger[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: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
InkWell(
onTap: () {
String mapUrl =
'https://www.google.com/maps/dir/${rides['start_location']}/${rides['end_location']}/';
print(mapUrl);
launchUrl1(mapUrl);
},
child: Column(
children: [
Text(rides['start_location']),
Text(rides['end_location']),
],
),
),
Column(
children: [
Text(
rides['date'],
style: AppStyle.subtitle,
),
Text(
rides['time'],
style: AppStyle.subtitle,
),
Text(
rides['status'],
style: rides['status'] != 'Canceled'
? AppStyle.subtitle
: AppStyle.subtitle
.copyWith(color: AppColor.redColor),
),
Text(
rides['price'],
style: AppStyle.subtitle,
),
],
),
],
),
),
),
);
},
),
)

View File

@@ -0,0 +1,114 @@
import 'package:animated_text_kit/animated_text_kit.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/controller/home/profile/promos_controller.dart';
import 'package:ride/views/widgets/my_scafold.dart';
import '../../../constant/colors.dart';
import '../../../constant/style.dart';
import '../../widgets/mycircular.dart';
class PromosPassengerPage extends StatelessWidget {
const PromosPassengerPage({super.key});
@override
Widget build(BuildContext context) {
Get.put(PromosController());
return MyScafolld(
title: 'Promos For today'.tr,
isleading: true,
body: [
GetBuilder<PromosController>(
builder: (orderHistoryController) => orderHistoryController.isloading
? const MyCircularProgressIndicator()
: ListView.builder(
itemCount: orderHistoryController.promoList.length,
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),
)
],
),
),
),
);
},
),
)
],
);
}
}

View File

@@ -0,0 +1,113 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:ride/views/widgets/my_scafold.dart';
import '../../constant/colors.dart';
import '../../constant/links.dart';
import '../../constant/style.dart';
import '../../controller/functions/crud.dart';
import '../../controller/functions/launch.dart';
import '../widgets/elevated_btn.dart';
class OrderRequestPage extends StatelessWidget {
const OrderRequestPage({super.key});
@override
Widget build(BuildContext context) {
final arguments = Get.arguments;
final myListString = arguments['myListString'];
final myList = arguments['myList'];
final body = arguments['body'];
return MyScafolld(
title: 'Order Request Page',
body: [
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// Text(message.notification!.body.toString()),
Padding(
padding: const EdgeInsets.all(8.0),
child: TextButton.icon(
onPressed: () {
String mapUrl =
'https://www.google.com/maps/dir/${myList[0]}/${myList[1]}/';
print(mapUrl);
launchUrl1(mapUrl);
},
icon: const Icon(Icons.map),
label: Text('Rouats of Trip'.tr)),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Tatal From Passenger is '.tr +
double.parse(myList[2]).toStringAsFixed(2),
style: AppStyle.title,
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Tatal For You is '.tr +
double.parse(myList[3]).toStringAsFixed(2),
style: AppStyle.title,
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Distance is '.tr + myList[5].toString() + ' KM'.tr,
style: AppStyle.title,
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Duration of Trip is '.tr +
myList[4].toString() +
' Minutes'.tr,
style: AppStyle.title,
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
MyElevatedButton(
title: 'Apply Order'.tr,
onPressed: () async {
await CRUD().postFromDialogue(
link: AppLink.addDriverOrder,
payload: {
'driver_id': myList[6].toString(),
// box.read(BoxName.driverID).toString(),
'order_id': body.toString(),
'status': 'Apply'
});
},
),
MyElevatedButton(
title: 'Refuse Order'.tr,
onPressed: () async {
await CRUD().postFromDialogue(
link: AppLink.addDriverOrder,
payload: {
'driver_id': myList[6].toString(),
// box.read(BoxName.driverID).toString(),
'order_id': body.toString(),
'status': 'Refused'
});
},
kolor: AppColor.redColor,
),
],
),
)
],
)
],
isleading: true);
}
}