642 lines
33 KiB
Dart
642 lines
33 KiB
Dart
import 'package:SEFER/constant/links.dart';
|
|
import 'package:SEFER/controller/functions/crud.dart';
|
|
import 'package:SEFER/controller/functions/tts.dart';
|
|
import 'package:SEFER/controller/home/payment/paymob_payout.dart';
|
|
import 'package:SEFER/views/home/my_wallet/bank_account_egypt.dart';
|
|
import 'package:SEFER/views/home/my_wallet/payment_history_driver_page.dart';
|
|
import 'package:SEFER/views/widgets/mydialoug.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:get/get.dart';
|
|
import 'package:SEFER/constant/box_name.dart';
|
|
import 'package:SEFER/constant/colors.dart';
|
|
import 'package:SEFER/constant/info.dart';
|
|
import 'package:SEFER/constant/style.dart';
|
|
import 'package:SEFER/controller/home/payment/captain_wallet_controller.dart';
|
|
import 'package:SEFER/controller/payment/payment_controller.dart';
|
|
import 'package:SEFER/main.dart';
|
|
import 'package:SEFER/views/widgets/elevated_btn.dart';
|
|
import 'package:SEFER/views/widgets/my_textField.dart';
|
|
import 'package:SEFER/views/widgets/mycircular.dart';
|
|
|
|
import '../../../controller/payment/driver_payment_controller.dart';
|
|
import '../../widgets/my_scafold.dart';
|
|
import 'card_wallet_widget.dart';
|
|
import 'points_captain.dart';
|
|
import 'transfer_budget_page.dart';
|
|
import 'weekly_payment_page.dart';
|
|
|
|
class WalletCaptain extends StatelessWidget {
|
|
WalletCaptain({super.key});
|
|
CaptainWalletController captainWalletController =
|
|
Get.put(CaptainWalletController());
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
// Get.put(MapDriverController()).totalPricePassenger = '0';
|
|
captainWalletController.refreshCaptainWallet();
|
|
return MyScafolld(
|
|
title: 'Driver Wallet'.tr,
|
|
body: [
|
|
GetBuilder<CaptainWalletController>(
|
|
builder: (captainWalletController) => captainWalletController
|
|
.isLoading
|
|
? const MyCircularProgressIndicator()
|
|
: Padding(
|
|
padding: const EdgeInsets.all(10),
|
|
child: ListView(
|
|
children: [
|
|
const SizedBox(),
|
|
Container(
|
|
// decoration: AppStyle.boxDecoration1.copyWith(
|
|
color: double.parse(
|
|
captainWalletController.totalPoints) <
|
|
0 &&
|
|
double.parse(
|
|
captainWalletController.totalPoints) >
|
|
-3000
|
|
? AppColor.yellowColor
|
|
: double.parse(
|
|
captainWalletController.totalPoints) <
|
|
-3000
|
|
? AppColor.redColor
|
|
: AppColor.greenColor,
|
|
// ),
|
|
child: InkWell(
|
|
onTap: () {
|
|
Get.snackbar(
|
|
'the 3000 points equal 3000 L.E'.tr,
|
|
'the 3000 points equal 3000 L.E for you \nSo go and gain your money'
|
|
.tr,
|
|
backgroundColor: AppColor.greenColor,
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
duration: const Duration(seconds: 4),
|
|
);
|
|
},
|
|
child: Padding(
|
|
padding:
|
|
const EdgeInsets.symmetric(horizontal: 4),
|
|
child: Text(
|
|
'${'Total Points is'.tr} ${captainWalletController.totalPoints.toString()} 💎',
|
|
style: AppStyle.headTitle2,
|
|
textAlign: TextAlign.center,
|
|
),
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
double.parse(captainWalletController.totalPoints
|
|
.toString()) <
|
|
-3000
|
|
? MyElevatedButton(
|
|
title: 'Charge your Account'.tr,
|
|
onPressed: () {})
|
|
: const SizedBox(),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
const CardSeferWalletDriver(),
|
|
Card(
|
|
elevation: 4,
|
|
child: Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 4),
|
|
child: Column(
|
|
children: [
|
|
Row(
|
|
mainAxisAlignment:
|
|
MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'Total Budget from trips is '.tr,
|
|
style: AppStyle.title,
|
|
),
|
|
Container(
|
|
decoration: BoxDecoration(
|
|
border: Border.all(
|
|
width: 2,
|
|
color: AppColor.writeColor)),
|
|
child: GestureDetector(
|
|
onTap: () {
|
|
Get.snackbar(
|
|
icon: InkWell(
|
|
onTap: () async {
|
|
await Get.put(
|
|
TextToSpeechController())
|
|
.speakText(
|
|
'This amount for all trip I get from Passengers'
|
|
.tr);
|
|
},
|
|
child: const Icon(
|
|
Icons.headphones)),
|
|
'${'Total Amount:'.tr} ${captainWalletController.totalAmount}\$',
|
|
'This amount for all trip I get from Passengers'
|
|
.tr,
|
|
duration:
|
|
const Duration(seconds: 6),
|
|
backgroundColor:
|
|
AppColor.yellowColor,
|
|
snackPosition: SnackPosition.BOTTOM,
|
|
);
|
|
},
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(2),
|
|
child: Text(
|
|
'${captainWalletController.totalAmount}\$'),
|
|
),
|
|
),
|
|
)
|
|
],
|
|
),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
Row(
|
|
mainAxisAlignment:
|
|
MainAxisAlignment.spaceBetween,
|
|
children: [
|
|
Text(
|
|
'Total Budget from trips by\nCredit card is '
|
|
.tr,
|
|
style: AppStyle.title,
|
|
),
|
|
Container(
|
|
decoration: BoxDecoration(
|
|
border: Border.all(
|
|
width: 2,
|
|
color: AppColor.writeColor)),
|
|
child: Padding(
|
|
padding: const EdgeInsets.all(2),
|
|
child: InkWell(
|
|
onTap: () {
|
|
Get.snackbar(
|
|
icon: InkWell(
|
|
onTap: () async {
|
|
await Get.find<
|
|
TextToSpeechController>()
|
|
.speakText(
|
|
'This amount for all trip I get from Passengers and Collected For me in'
|
|
.tr +
|
|
' SAFAR Wallet'.tr,
|
|
);
|
|
},
|
|
child: const Icon(
|
|
Icons.headphones),
|
|
),
|
|
'${'Total Amount:'.tr} ${captainWalletController.totalAmountVisa}\$',
|
|
'This amount for all trip I get from Passengers and Collected For me in'
|
|
.tr +
|
|
' ${AppInformation.appName} Wallet'
|
|
.tr,
|
|
duration:
|
|
const Duration(seconds: 6),
|
|
backgroundColor:
|
|
AppColor.redColor,
|
|
snackPosition:
|
|
SnackPosition.BOTTOM,
|
|
);
|
|
},
|
|
child: Text(
|
|
'${captainWalletController.totalAmountVisa}\$'),
|
|
),
|
|
))
|
|
],
|
|
),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
MyElevatedButton(
|
|
title:
|
|
'You can buy points from your budget'.tr,
|
|
onPressed: () {
|
|
Get.defaultDialog(
|
|
title: 'Pay from my budget'.tr,
|
|
titleStyle: AppStyle.title,
|
|
content: Form(
|
|
key: captainWalletController.formKey,
|
|
child: MyTextForm(
|
|
controller: captainWalletController
|
|
.amountFromBudgetController,
|
|
label:
|
|
'${'You have in account'.tr} ${captainWalletController.totalAmountVisa}',
|
|
hint:
|
|
'${'You have in account'.tr} ${captainWalletController.totalAmountVisa}',
|
|
type: TextInputType.number,
|
|
),
|
|
),
|
|
confirm: MyElevatedButton(
|
|
title: 'Pay'.tr,
|
|
onPressed: () async {
|
|
if (double.parse(
|
|
captainWalletController
|
|
.amountFromBudgetController
|
|
.text) <
|
|
double.parse(
|
|
captainWalletController
|
|
.totalAmountVisa)) {
|
|
await captainWalletController
|
|
.payFromBudget();
|
|
} else {
|
|
Get.back();
|
|
Get.snackbar(
|
|
'Your Budget less than needed'
|
|
.tr,
|
|
'',
|
|
duration: const Duration(
|
|
seconds: 3),
|
|
backgroundColor:
|
|
AppColor.redColor,
|
|
snackPosition:
|
|
SnackPosition.BOTTOM,
|
|
);
|
|
}
|
|
}),
|
|
cancel: MyElevatedButton(
|
|
title: 'Cancel'.tr,
|
|
onPressed: () {
|
|
Get.back();
|
|
}));
|
|
},
|
|
),
|
|
MyElevatedButton(
|
|
title: 'Transfer budget'.tr,
|
|
onPressed: () {
|
|
if (double.parse(captainWalletController
|
|
.totalAmountVisa) >
|
|
15) {
|
|
Get.to(
|
|
() => const TransferBudgetPage());
|
|
} else {
|
|
Get.snackbar(
|
|
"You don't have enough money in your SEFER wallet"
|
|
.tr,
|
|
'');
|
|
}
|
|
})
|
|
],
|
|
),
|
|
),
|
|
),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Container(
|
|
decoration: AppStyle.boxDecoration,
|
|
child: Column(children: [
|
|
Text(
|
|
"You can purchase a budget to enable online access through the options listed below."
|
|
.tr,
|
|
textAlign: TextAlign.center,
|
|
style: AppStyle.title,
|
|
),
|
|
const Divider(
|
|
indent: 30,
|
|
endIndent: 30,
|
|
color: AppColor.accentColor,
|
|
thickness: 3,
|
|
),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
Container(
|
|
decoration: AppStyle.boxDecoration,
|
|
height: Get.height * .19,
|
|
child: ListView(
|
|
scrollDirection: Axis.horizontal,
|
|
children: [
|
|
PointsCaptain(
|
|
kolor: AppColor.greyColor,
|
|
pricePoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? 5
|
|
: 80,
|
|
countPoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? '3000'
|
|
: '1000',
|
|
),
|
|
PointsCaptain(
|
|
kolor: AppColor
|
|
.bronze, // Bronze color for medium value
|
|
pricePoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? 10
|
|
: 200,
|
|
countPoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? '1040'
|
|
: '2500',
|
|
),
|
|
PointsCaptain(
|
|
kolor: AppColor
|
|
.goldenBronze, // Golden bronze color for higher value
|
|
pricePoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? 22
|
|
: 400,
|
|
countPoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? '23000'
|
|
: '5100',
|
|
),
|
|
PointsCaptain(
|
|
kolor: AppColor
|
|
.gold, // Gold color for highest value
|
|
pricePoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? 50
|
|
: 1000,
|
|
countPoint:
|
|
box.read(BoxName.countryCode) ==
|
|
'Jordan'
|
|
? '55000'
|
|
: '130000',
|
|
),
|
|
],
|
|
),
|
|
),
|
|
]))),
|
|
const SizedBox(
|
|
height: 30,
|
|
),
|
|
box
|
|
.read(BoxName.accountIdStripeConnect)
|
|
.toString()
|
|
.isEmpty
|
|
? Row(
|
|
mainAxisAlignment: MainAxisAlignment.center,
|
|
children: [
|
|
MyElevatedButton(
|
|
title:
|
|
'Create Wallet to receive your money',
|
|
onPressed: () async {
|
|
box.read(BoxName.countryCode) == 'Egypt'
|
|
? addBankCodeEgypt(
|
|
captainWalletController)
|
|
: Get.find<PaymentController>()
|
|
.createConnectAccount();
|
|
}),
|
|
],
|
|
)
|
|
: const SizedBox(
|
|
height: 30,
|
|
),
|
|
|
|
GetBuilder<CaptainWalletController>(
|
|
builder: (captainWalletController) {
|
|
return Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
SizedBox(
|
|
width: Get.width * .9,
|
|
// height: Get.height * .1,
|
|
// decoration: AppStyle.boxDecoration,
|
|
child: Stack(
|
|
children: [
|
|
InkWell(
|
|
onTap: () {
|
|
MyDialog().getDialog(
|
|
'Morning Promo'.tr,
|
|
"this is count of your all trips in the morning promo today from 7:00am-10:00am"
|
|
.tr, () {
|
|
Get.back();
|
|
});
|
|
},
|
|
child: LinearProgressIndicator(
|
|
minHeight: 35,
|
|
color: AppColor.blueColor,
|
|
borderRadius:
|
|
BorderRadius.circular(12),
|
|
backgroundColor: AppColor.accentColor
|
|
.withOpacity(.5),
|
|
value: double.parse(
|
|
captainWalletController
|
|
.walletDate['message'][0]
|
|
['morning_count']
|
|
.toString()) /
|
|
5,
|
|
),
|
|
),
|
|
Row(
|
|
mainAxisAlignment:
|
|
MainAxisAlignment.center,
|
|
children: <Widget>[
|
|
Text(
|
|
'Morning Promo Rides'.tr,
|
|
style: AppStyle.title,
|
|
),
|
|
const SizedBox(
|
|
width: 20,
|
|
),
|
|
Text(
|
|
'${captainWalletController.walletDate['message'][0]['morning_count']} / 5',
|
|
style: AppStyle.title,
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}),
|
|
GetBuilder<CaptainWalletController>(
|
|
builder: (captainWalletController) {
|
|
return Padding(
|
|
padding: const EdgeInsets.all(8.0),
|
|
child: Row(
|
|
children: [
|
|
SizedBox(
|
|
width: Get.width * .9,
|
|
// height: Get.height * .1,
|
|
// decoration: AppStyle.boxDecoration,
|
|
child: Stack(
|
|
children: [
|
|
InkWell(
|
|
onTap: () {
|
|
MyDialog().getDialog(
|
|
'Afternoon Promo'.tr,
|
|
"this is count of your all trips in the Afternoon promo today from 3:00pm-6:00 pm"
|
|
.tr, () {
|
|
Get.back();
|
|
});
|
|
},
|
|
child: LinearProgressIndicator(
|
|
minHeight: 35,
|
|
color: AppColor.blueColor,
|
|
borderRadius:
|
|
BorderRadius.circular(12),
|
|
backgroundColor: AppColor.accentColor
|
|
.withOpacity(.5),
|
|
value: double.parse(
|
|
captainWalletController
|
|
.walletDate['message'][0]
|
|
['afternoon_count']
|
|
.toString()) /
|
|
5,
|
|
),
|
|
),
|
|
Row(
|
|
mainAxisAlignment:
|
|
MainAxisAlignment.center,
|
|
children: <Widget>[
|
|
Text(
|
|
'Afternoon Promo Rides'.tr,
|
|
style: AppStyle.title,
|
|
),
|
|
const SizedBox(
|
|
width: 20,
|
|
),
|
|
Text(
|
|
'${captainWalletController.walletDate['message'][0]['afternoon_count']} / 5',
|
|
style: AppStyle.title,
|
|
),
|
|
],
|
|
),
|
|
],
|
|
),
|
|
)
|
|
],
|
|
),
|
|
);
|
|
}),
|
|
|
|
Padding(
|
|
padding: const EdgeInsets.symmetric(horizontal: 10),
|
|
child: Row(
|
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
|
children: [
|
|
MyElevatedButton(
|
|
kolor: AppColor.blueColor,
|
|
title: 'Payment History'.tr,
|
|
onPressed: () async {
|
|
await Get.put(DriverWalletHistoryController())
|
|
.getArchivePayment();
|
|
Get.to(() => const PaymentHistoryDriverPage(),
|
|
transition: Transition.size);
|
|
},
|
|
),
|
|
MyElevatedButton(
|
|
kolor: AppColor.blueColor,
|
|
title: 'Weekly Budget'.tr,
|
|
onPressed: () async {
|
|
await Get.put(DriverWalletHistoryController())
|
|
.getWeekllyArchivePayment();
|
|
Get.to(() => const WeeklyPaymentPage(),
|
|
transition: Transition.size);
|
|
},
|
|
),
|
|
],
|
|
),
|
|
),
|
|
|
|
// TextButton(
|
|
// onPressed: () async {
|
|
// PaymentController paymentController =
|
|
// Get.put(PaymentController());
|
|
// await paymentController.createTransactionToCaptain(
|
|
// '1000',
|
|
// box.read(BoxName.accountIdStripeConnect));
|
|
// },
|
|
// child: const Text(
|
|
// "Pay to Captain",
|
|
// ),
|
|
// )
|
|
],
|
|
),
|
|
))
|
|
],
|
|
isleading: true,
|
|
action: InkWell(
|
|
onTap: () async {
|
|
captainWalletController.refreshCaptainWallet();
|
|
},
|
|
child: const Icon(Icons.refresh)),
|
|
);
|
|
}
|
|
}
|
|
|
|
Future<dynamic> addBankCodeEgypt(
|
|
CaptainWalletController captainWalletController) {
|
|
return Get.defaultDialog(
|
|
title: "Insert Account Bank".tr,
|
|
content: Form(
|
|
key: captainWalletController.formKeyAccount,
|
|
child: Column(
|
|
children: [
|
|
Text("Insert Card Bank Details to Receive Your Visa Money Weekly"
|
|
.tr),
|
|
MyTextForm(
|
|
controller: captainWalletController.cardBank,
|
|
label: "Insert card number".tr,
|
|
hint: '4123 4567 8910 1235',
|
|
type: TextInputType.number),
|
|
const SizedBox(
|
|
height: 10,
|
|
),
|
|
BankDropdown()
|
|
],
|
|
)),
|
|
confirm: MyElevatedButton(
|
|
title: 'Ok'.tr,
|
|
onPressed: () async {
|
|
if (captainWalletController.formKeyAccount.currentState!
|
|
.validate()) {
|
|
Get.back();
|
|
var res =
|
|
await CRUD().post(link: AppLink.updateAccountBank, payload: {
|
|
"bankCode": Get.find<BankController>().selectedBank.toString(),
|
|
"accountBank": captainWalletController.cardBank.text.toString(),
|
|
"id": box.read(BoxName.driverID).toString()
|
|
});
|
|
print('res: ${res}');
|
|
if (res != 'failure') {
|
|
Get.snackbar(
|
|
'updated succses'.tr, 'bank account added succesfly',
|
|
backgroundColor: AppColor.greenColor);
|
|
}
|
|
}
|
|
}));
|
|
}
|
|
|
|
class MyDropDown1 extends StatelessWidget {
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
Get.put(PaymobPayout());
|
|
return GetBuilder<PaymobPayout>(builder: (controller) {
|
|
return DropdownButton<String>(
|
|
value: controller.dropdownValue,
|
|
icon: const Icon(Icons.arrow_drop_down),
|
|
elevation: 16,
|
|
style: const TextStyle(color: Colors.deepPurple),
|
|
underline: Container(
|
|
height: 2,
|
|
color: Colors.deepPurpleAccent,
|
|
),
|
|
onChanged: (String? newValue) {
|
|
controller.dropdownValue = newValue!;
|
|
controller.update();
|
|
},
|
|
items: <String>['etisalat', 'aman', 'orange', 'vodafone']
|
|
.map<DropdownMenuItem<String>>((String value) {
|
|
return DropdownMenuItem<String>(
|
|
value: value,
|
|
child: Text(value),
|
|
);
|
|
}).toList(),
|
|
);
|
|
});
|
|
}
|
|
}
|