This commit is contained in:
Hamza-Ayed
2024-06-15 12:47:08 +03:00
parent a13f9254ae
commit 4eb0d46402
59 changed files with 413 additions and 743 deletions

View File

@@ -55,8 +55,8 @@ android {
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
versionCode 30
versionName '1.5.30'
versionCode 32
versionName '1.5.32'
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 226 KiB

After

Width:  |  Height:  |  Size: 916 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 179 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.4 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.5 KiB

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 144 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.1 KiB

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.1 KiB

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.7 KiB

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 486 B

After

Width:  |  Height:  |  Size: 424 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.7 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.0 KiB

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 592 B

After

Width:  |  Height:  |  Size: 550 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 956 B

After

Width:  |  Height:  |  Size: 850 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 939 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 40 KiB

After

Width:  |  Height:  |  Size: 46 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.1 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.3 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.3 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -21,7 +21,7 @@
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>32</string>
<string>33</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleURLTypes</key>
@@ -36,7 +36,7 @@
</dict>
</array>
<key>CFBundleVersion</key>
<string>4.0.32</string>
<string>4.0.33</string>
<key>FirebaseAppDelegateProxyEnabled</key>
<string>NO</string>
<key>GMSApiKey</key>

View File

@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
class AppColor {
static const Color primaryColor = Color(0xFF1DA1F2);
static const Color writeColor = Color(0xFF333333);
static const Color writeColor = Color(0xff222359);
static const Color secondaryColor = Colors.white;
static const Color accentColor = Colors.grey;
static const Color greyColor = Colors.grey;

View File

@@ -29,6 +29,7 @@ class AppLink {
static String getWalletByDriver = "$walletDriver/getWalletByDriver.php";
static String driverStatistic = "$walletDriver/driverStatistic.php";
static String getDriverDetails = "$walletDriver/getDriverDetails.php";
static String getDriverWeekPaymentMove =
"$walletDriver/getDriverWeekPaymentMove.php";
static String getDriversWallet = "$walletDriver/get.php";
@@ -71,6 +72,8 @@ class AppLink {
////-----------------DriverPayment------------------
static String addDriverpayment = "$ride/payment/add.php";
static String addDriverPaymentPoints = "$ride/driverPayment/add.php";
static String addPaymentToken =
"$ride/driverWallet/addPaymentToken.php"; //driverWallet/addPaymentToken.php
static String getDriverPaymentPoints = "$ride/driverWallet/get.php";
static String getDriverpaymentToday = "$ride/payment/get.php";
static String getCountRide = "$ride/payment/getCountRide.php";

View File

@@ -878,23 +878,9 @@ class MapDriverController extends GetxController {
startNameLocation = Get.arguments['startNameLocation'];
endNameLocation = Get.arguments['endNameLocation'];
// var coords = passengerLocation.toString().split(',');
// var coordDestination = passengerDestination.toString().split(',');
// Parse to double
latlng(passengerLocation, passengerDestination);
// double latPassengerLocation =
// double.parse(passengerLocation.toString().split(',')[0]);
// double lngPassengerLocation =
// double.parse(passengerLocation.toString().split(',')[1]);
// double latPassengerDestination =
// double.parse(passengerDestination.toString().split(',')[0]);
// double lngPassengerDestination =
// double.parse(passengerDestination.toString().split(',')[1]);
// latLngPassengerLocation =
// LatLng(latPassengerLocation, lngPassengerLocation);
// latLngPassengerDestination =
// LatLng(latPassengerDestination, lngPassengerDestination);
String lat = Get.find<LocationController>().myLocation.latitude.toString();
String lng = Get.find<LocationController>().myLocation.longitude.toString();
String origin = '$lat,$lng';

View File

@@ -60,6 +60,7 @@ class OrderRequestController extends GetxController {
countRefuse = results[0]['count'].toString();
update();
if (int.parse(countRefuse) > 3) {
box.write(BoxName.statusDriverLocation, 'on');
locationController.stopLocationUpdates();
Get.defaultDialog(
// backgroundColor: CupertinoColors.destructiveRed,
@@ -73,6 +74,8 @@ class OrderRequestController extends GetxController {
confirm: MyElevatedButton(
title: 'Ok , See you Tomorrow'.tr,
onPressed: () => Get.back()));
} else {
box.write(BoxName.statusDriverLocation, 'off');
}
} catch (e) {
print('Error executing custom query: $e');
@@ -142,7 +145,7 @@ class OrderRequestController extends GetxController {
});
await CRUD().post(link: AppLink.updateRides, payload: {
'id': orderID,
'rideTimeStart': DateTime.now().toString(),
// 'rideTimeStart': DateTime.now().toString(),
'status': 'Refused',
'driver_id': box.read(BoxName.driverID),
});
@@ -154,7 +157,7 @@ class OrderRequestController extends GetxController {
'driver_id': box.read(BoxName.driverID).toString(),
}, TableName.driverOrdersRefuse);
getRefusedOrderByCaptain();
box.write(BoxName.statusDriverLocation, 'off');
update();
Get.back();
// Get.offAll(HomeCaptain());

View File

@@ -1,365 +0,0 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:google_polyline_algorithm/google_polyline_algorithm.dart';
import '../../../constant/api_key.dart';
import '../../../constant/box_name.dart';
import '../../../constant/colors.dart';
import '../../../constant/links.dart';
import '../../../main.dart';
import '../../functions/crud.dart';
import '../../functions/location_controller.dart';
import 'home_captain_controller.dart';
class SpeedMapController extends GetxController {
bool isLoading = true;
final formKey1 = GlobalKey<FormState>();
final sosEmergincyNumberCotroller = TextEditingController();
List data = [];
List dataDestination = [];
LatLngBounds? boundsData;
double mpg = 0;
BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker;
BitmapDescriptor passengerIcon = BitmapDescriptor.defaultMarker;
BitmapDescriptor startIcon = BitmapDescriptor.defaultMarker;
BitmapDescriptor endIcon = BitmapDescriptor.defaultMarker;
final List<LatLng> polylineCoordinates = [];
final List<LatLng> polylineCoordinatesDestination = [];
List<Polyline> polyLines = [];
List<Polyline> polyLinesDestination = [];
Set<Marker> markers = {};
late String passengerLocation;
late String passengerDestination;
late String step0;
late String step1;
late String step2;
late String step3;
late String step4;
late String passengerWalletBurc;
late String timeOfOrder;
late String duration;
late String totalCost;
late String distance;
late String passengerName;
late String passengerEmail;
late String totalPassenger;
late String passengerPhone;
late String rideId;
late String isHaveSteps;
late String paymentAmount;
late String paymentMethod;
late String passengerId;
late String driverId;
late String tokenPassenger;
late String durationToPassenger;
late String walletChecked;
late String direction;
late String carType;
late String kazan;
late String startNameLocation;
late String endNameLocation;
late String durationOfRideValue;
late String status;
String stringRemainingTimeToPassenger = '';
String stringRemainingTimeWaitingPassenger = '';
late Duration durationToAdd;
int hours = 0;
int minutes = 0;
int timeWaitingPassenger = 5; //5 miniute
bool isPassengerInfoWindow = false;
bool isBtnRideBegin = false;
bool isArrivedSend = true;
bool isdriverWaitTimeEnd = false;
bool isRideFinished = false;
bool isRideStarted = false;
bool isPriceWindow = false;
double passengerInfoWindowHeight = Get.height * .38;
double driverEndPage = 100;
double progress = 0;
double progressToPassenger = 0;
double progressInPassengerLocationFromDriver = 0;
bool isRideBegin = false;
int progressTimerToShowPassengerInfoWindowFromDriver = 25;
int remainingTimeToShowPassengerInfoWindowFromDriver = 25;
int remainingTimeToPassenger = 60;
int remainingTimeInPassengerLocatioWait = 60;
bool isDriverNearPassengerStart = false;
GoogleMapController? mapController;
late LatLng myLocation;
int remainingTimeTimerRideBegin = 60;
String stringRemainingTimeRideBegin = '';
String stringRemainingTimeRideBegin1 = '';
double progressTimerRideBegin = 0;
late Timer timer;
String? mapAPIKEY;
final zones = <Zone>[];
String canelString = 'yet';
late LatLng latLngPassengerLocation;
late LatLng latLngPassengerDestination;
void clearPolyline() {
polyLines = [];
polyLinesDestination = [];
polylineCoordinates.clear();
polylineCoordinatesDestination.clear();
update();
}
argumentLoading() async {
passengerLocation = box.read(BoxName.rideArguments)['passengerLocation'];
print(passengerLocation);
passengerDestination =
box.read(BoxName.rideArguments)['passengerDestination'];
print(passengerDestination);
duration = box.read(BoxName.rideArguments)['Duration'];
totalCost = box.read(BoxName.rideArguments)['totalCost'];
passengerId = box.read(BoxName.rideArguments)['passengerId'];
driverId = box.read(BoxName.rideArguments)['driverId'];
distance = box.read(BoxName.rideArguments)['Distance'];
passengerName = box.read(BoxName.rideArguments)['name'];
passengerEmail = box.read(BoxName.rideArguments)['email'];
totalPassenger = box.read(BoxName.rideArguments)['totalPassenger'];
passengerPhone = box.read(BoxName.rideArguments)['phone'];
walletChecked = box.read(BoxName.rideArguments)['WalletChecked'];
tokenPassenger = box.read(BoxName.rideArguments)['tokenPassenger'];
direction = box.read(BoxName.rideArguments)['direction'];
durationToPassenger =
box.read(BoxName.rideArguments)['DurationToPassenger'].toString();
print(durationToPassenger);
rideId = box.read(BoxName.rideArguments)['rideId'];
durationOfRideValue =
box.read(BoxName.rideArguments)['durationOfRideValue'];
paymentAmount = box.read(BoxName.rideArguments)['paymentAmount'];
paymentMethod = box.read(BoxName.rideArguments)['paymentMethod'];
isHaveSteps = box.read(BoxName.rideArguments)['isHaveSteps'];
step0 = box.read(BoxName.rideArguments)['step0'];
step1 = box.read(BoxName.rideArguments)['step1'];
step2 = box.read(BoxName.rideArguments)['step2'];
step3 = box.read(BoxName.rideArguments)['step3'];
step4 = box.read(BoxName.rideArguments)['step4'];
passengerWalletBurc =
box.read(BoxName.rideArguments)['passengerWalletBurc'];
timeOfOrder = box.read(BoxName.rideArguments)['timeOfOrder'];
carType = box.read(BoxName.rideArguments)['carType'];
kazan = box.read(BoxName.rideArguments)['kazan'];
startNameLocation = box.read(BoxName.rideArguments)['startNameLocation'];
endNameLocation = box.read(BoxName.rideArguments)['endNameLocation'];
// var coords = passengerLocation.toString().split(',');
// var coordDestination = passengerDestination.toString().split(',');
// Parse to double
latlng(passengerLocation, passengerDestination);
String lat = Get.find<LocationController>().myLocation.latitude.toString();
String lng = Get.find<LocationController>().myLocation.longitude.toString();
String origin = '$lat,$lng';
print('latLngpassengerLocation $latLngPassengerLocation');
print('latLngPassengerDestination $latLngPassengerDestination');
// Set the origin and destination coordinates for the Google Maps directions request.
Future.delayed(const Duration(seconds: 1));
getMap(origin, passengerLocation);
isHaveSteps == 'haveSteps'
? (
await getMapDestination(step0, step1),
await getMapDestination(step1, step2),
step3 == '' ? await getMapDestination(step2, step3) : () {},
step4 == '' ? await getMapDestination(step3, step4) : () {},
)
: await getMapDestination(passengerLocation, passengerDestination);
update();
}
latlng(String passengerLocation, passengerDestination) {
double latPassengerLocation =
double.parse(passengerLocation.toString().split(',')[0]);
print('latPassengerLocation $latPassengerLocation');
double lngPassengerLocation =
double.parse(passengerLocation.toString().split(',')[1]);
double latPassengerDestination =
double.parse(passengerDestination.toString().split(',')[0]);
double lngPassengerDestination =
double.parse(passengerDestination.toString().split(',')[1]);
latLngPassengerLocation =
LatLng(latPassengerLocation, lngPassengerLocation);
latLngPassengerDestination =
LatLng(latPassengerDestination, lngPassengerDestination);
}
double distanceBetweenDriverAndPassengerWhenConfirm = 0;
getMap(String origin, destination) async {
isLoading = false;
update();
var url =
('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang)}&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}');
var response = await CRUD().getGoogleApi(link: url, payload: {});
data = response['routes'][0]['legs'];
print(data);
distanceBetweenDriverAndPassengerWhenConfirm =
(data[0]['distance']['value']) / 1000;
final points =
decodePolyline(response["routes"][0]["overview_polyline"]["points"]);
for (int i = 0; i < points.length; i++) {
double lat = points[i][0].toDouble();
double lng = points[i][1].toDouble();
polylineCoordinates.add(LatLng(lat, lng));
}
if (polyLines.isNotEmpty) {
clearPolyline();
var polyline = Polyline(
polylineId: PolylineId(response["routes"][0]["summary"]),
points: polylineCoordinates,
width: 10,
color: AppColor.blueColor,
);
polyLines.add(polyline);
// rideConfirm = false;
update();
} else {
var polyline = Polyline(
polylineId: PolylineId(response["routes"][0]["summary"]),
points: polylineCoordinates,
width: 10,
color: AppColor.blueColor,
);
// final dataBounds = response["routes"][0]["bounds"];
// updateCameraFromBoundsAfterGetMap(dataBounds);
// Fit the camera to the bounds
polyLines.add(polyline);
// rideConfirm = false;
// Define the northeast and southwest coordinates
final bounds = response["routes"][0]["bounds"];
LatLng northeast =
LatLng(bounds['northeast']['lat'], bounds['northeast']['lng']);
LatLng southwest =
LatLng(bounds['southwest']['lat'], bounds['southwest']['lng']);
// Create the LatLngBounds object
LatLngBounds boundsData =
LatLngBounds(northeast: northeast, southwest: southwest);
// Fit the camera to the bounds
var cameraUpdate = CameraUpdate.newLatLngBounds(boundsData, 140);
mapController!.animateCamera(cameraUpdate);
update();
}
}
getMapDestination(String origin, destination) async {
var url =
('${AppLink.googleMapsLink}directions/json?&language=${box.read(BoxName.lang)}&avoid=tolls|ferries&destination=$destination&origin=$origin&key=${AK.mapAPIKEY}');
var response = await CRUD().getGoogleApi(link: url, payload: {});
dataDestination = response['routes'][0]['legs'];
// print(data);
final points =
decodePolyline(response["routes"][0]["overview_polyline"]["points"]);
for (int i = 0; i < points.length; i++) {
double lat = points[i][0].toDouble();
double lng = points[i][1].toDouble();
polylineCoordinatesDestination.add(LatLng(lat, lng));
}
if (polyLinesDestination.isNotEmpty) {
// clearPolyline();
var polyline = Polyline(
polylineId: PolylineId(response["routes"][0]["summary"]),
points: polylineCoordinatesDestination,
width: 10,
color: AppColor.redColor,
);
polyLinesDestination.add(polyline);
// rideConfirm = false;
update();
} else {
var polyline = Polyline(
polylineId: PolylineId(response["routes"][0]["summary"]),
points: polylineCoordinatesDestination,
width: 10,
color: AppColor.redColor,
);
// final dataBounds = response["routes"][0]["bounds"];
// updateCameraFromBoundsAfterGetMap(dataBounds);
// polyLinesDestination.add(polyline);
// rideConfirm = false;
// Define the northeast and southwest coordinates
update();
}
}
void startTimerToShowPassengerInfoWindowFromDriver() async {
isPassengerInfoWindow = true;
for (int i = 0; i <= int.parse(durationToPassenger); i++) {
await Future.delayed(const Duration(seconds: 1));
progressToPassenger = i / int.parse(durationToPassenger);
remainingTimeToPassenger = int.parse(durationToPassenger) - i;
if (remainingTimeToPassenger == 0) {
isBtnRideBegin = true;
print(isBtnRideBegin);
update();
}
print(isBtnRideBegin);
print(remainingTimeToPassenger);
int minutes = (remainingTimeToPassenger / 60).floor();
int seconds = remainingTimeToPassenger % 60;
stringRemainingTimeToPassenger =
'$minutes:${seconds.toString().padLeft(2, '0')}';
update();
}
// update();
// startTimerToShowDriverToPassengerDuration();
}
void onMapCreated(GoogleMapController controller) async {
myLocation = Get.find<LocationController>().location as LatLng;
myLocation = myLocation;
mapController = controller;
controller.getVisibleRegion();
controller.animateCamera(
CameraUpdate.newLatLng(Get.find<LocationController>().myLocation),
);
update();
// Set up a timer or interval to trigger the marker update every 3 seconds.
timer = Timer.periodic(const Duration(seconds: 1), (_) {
// updateMarker();
});
}
@override
void onInit() async {
mapAPIKEY = await storage.read(key: BoxName.mapAPIKEY);
// Get the passenger location from the arguments.
await argumentLoading();
// addCustomCarIcon();
// addCustomPassengerIcon();
// addCustomStartIcon();
// addCustomEndIcon();
// updateMarker();
// updateLocation();
startTimerToShowPassengerInfoWindowFromDriver();
durationToAdd = Duration(seconds: int.parse(duration));
hours = durationToAdd.inHours;
minutes = (durationToAdd.inMinutes % 60).round();
calculateConsumptionFuel();
// cancelCheckRidefromPassenger();
// checkIsDriverNearPassenger();
super.onInit();
}
calculateConsumptionFuel() {
mpg = Get.find<HomeCaptainController>().fuelPrice /
12; //todo in register car add mpg in box
update();
}
}

View File

@@ -1,5 +1,7 @@
import 'dart:convert';
import 'package:SEFER/constant/colors.dart';
import 'package:SEFER/controller/firebase/firbase_messge.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';
@@ -9,6 +11,7 @@ import 'package:SEFER/main.dart';
class CaptainWalletController extends GetxController {
bool isLoading = false;
final formKeyTransfer = GlobalKey<FormState>();
Map walletDate = {};
Map walletDateVisa = {};
Map walletDriverPointsDate = {};
@@ -17,7 +20,8 @@ class CaptainWalletController extends GetxController {
String totalAmountVisa = '0';
String totalPoints = '0';
final amountFromBudgetController = TextEditingController();
final issurWallet = TextEditingController();
final newDriverPhoneController = TextEditingController();
final phoneWallet = TextEditingController();
payFromBudget() async {
if (formKey.currentState!.validate()) {
@@ -37,6 +41,46 @@ class CaptainWalletController extends GetxController {
}
}
List amountToNewDriverMap = [];
bool isNewTransfer = false;
Future detectNewDriverFromMyBudget() async {
if (formKeyTransfer.currentState!.validate()) {
if (int.parse(amountFromBudgetController.text) <
double.parse(totalAmountVisa) &&
int.parse(amountFromBudgetController.text) > 10) {
//get new driver details
isNewTransfer = true;
update();
var res = await CRUD().get(
link: AppLink.getDriverDetails,
payload: {'driver_phone': '+2${newDriverPhoneController.text}'});
isNewTransfer = false;
update();
if (res != 'failure') {
var d = jsonDecode(res);
amountToNewDriverMap = d['data'];
// update();
} else {
Get.snackbar(
"This driver is not registered".tr,
'',
duration: const Duration(seconds: 3),
backgroundColor: AppColor.redColor,
snackPosition: SnackPosition.BOTTOM,
);
}
} else {
Get.snackbar(
'Your Budget less than needed'.tr,
'',
duration: const Duration(seconds: 3),
backgroundColor: AppColor.redColor,
snackPosition: SnackPosition.BOTTOM,
);
}
}
}
Future getCaptainWalletFromRide() async {
isLoading = true;
update();
@@ -79,8 +123,20 @@ class CaptainWalletController extends GetxController {
update();
}
String paymentToken = '';
Future<String> generateToken(String amount) async {
var res = await CRUD().post(link: AppLink.addPaymentToken, payload: {
'driverID': box.read(BoxName.driverID).toString(),
'amount': amount.toString(),
});
var d = jsonDecode(res);
print('paymentToken ${d['message']}');
return d['message'];
}
late String paymentID;
Future addDriverPayment(String paymentMethod, amount) async {
Future<String> addDriverPayment(String paymentMethod, amount) async {
// paymentToken = await generateToken(amount);
var res = await CRUD().post(link: AppLink.addDriverPaymentPoints, payload: {
'driverID': box.read(BoxName.driverID).toString(),
'amount': amount.toString(),
@@ -89,17 +145,53 @@ class CaptainWalletController extends GetxController {
var d = jsonDecode(res);
paymentID = d['message'].toString();
print('paymentID $paymentID');
return paymentID;
}
Future addDriverWallet(String paymentMethod, point) async {
paymentToken = await generateToken(point);
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
'driverID': box.read(BoxName.driverID).toString(),
'paymentID': paymentID.toString(),
'amount': point,
'token': paymentToken,
'paymentMethod': paymentMethod.toString(),
});
}
Future addtransferDriversWallet(String paymentMethod) async {
paymentID =
await addDriverPayment(paymentMethod, amountFromBudgetController.text);
paymentToken = await generateToken(amountFromBudgetController.text);
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
'driverID': box.read(BoxName.driverID).toString(),
'paymentID': paymentID.toString(),
'amount': (int.parse(amountFromBudgetController.text) * -1).toString(),
'token': paymentToken,
'paymentMethod': paymentMethod.toString(),
});
paymentID =
await addDriverPayment(paymentMethod, amountFromBudgetController.text);
paymentToken = await generateToken(amountFromBudgetController.text);
var res1 =
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
'driverID': amountToNewDriverMap[0]['id'].toString(),
'paymentID': paymentID.toString(),
'amount': (int.parse(amountFromBudgetController.text) - 5).toString(),
'token': paymentToken,
'paymentMethod': paymentMethod.toString(),
});
if (res1 != 'failure') {
FirebaseMessagesController().sendNotificationToDriverMAP(
'Transfer',
'${'You have transfer to your wallet from'.tr}'
'${box.read(BoxName.nameDriver)}',
amountToNewDriverMap[0]['token'].toString(),
[],
);
}
}
//check if account bank is created or not
Future checkAccountCaptainBank() async {
isLoading = false;

View File

@@ -12,6 +12,7 @@ import 'captain_wallet_controller.dart';
class PaymobPayout extends GetxController {
bool isLoading = false;
String dropdownValue = 'etisalat';
Future<String> getToken() async {
var headers = {
@@ -53,6 +54,7 @@ class PaymobPayout extends GetxController {
"issuer": issuer, //"vodafone",
"msisdn": msisdn, // "01023456789"
});
print(body);
var res = await http.post(
Uri.parse(
'https://stagingpayouts.paymobsolutions.com/api/secure/disburse/'),
@@ -65,7 +67,7 @@ class PaymobPayout extends GetxController {
if (dec['disbursement_status'] == 'successful') {
await CRUD().post(link: AppLink.addDriverpayment, payload: {
'rideId': DateTime.now().toIso8601String(),
'amount': ((-1) * double.parse(dec['amount'])).toStringAsFixed(0),
'amount': ((-1) * (double.parse(dec['amount'])) + 5).toStringAsFixed(0),
'payment_method': 'payout',
'passengerID': 'myself',
'driverID': box.read(BoxName.driverID).toString(),
@@ -75,7 +77,7 @@ class PaymobPayout extends GetxController {
backgroundColor: AppColor.greenColor);
Get.find<CaptainWalletController>().getCaptainWalletFromRide();
} else if (dec['disbursement_status'] == 'failed') {
Get.snackbar('Transaction successful'.tr, 'Transaction failed'.tr,
Get.snackbar('Transaction failed'.tr, 'Transaction failed'.tr,
backgroundColor: AppColor.redColor);
}
}
@@ -89,7 +91,8 @@ class PaymobPayout extends GetxController {
var body = {
"issuer": "bank_card",
"amount": amount, //9.0,
"full_name": box.read(BoxName.nameDriver).toString(),
"full_name":
'${box.read(BoxName.nameDriver)} ${box.read(BoxName.lastNameDriver)}',
"bank_card_number": bankCardNumber, //"1111-2222-3333-4444",
"bank_code": bankCode, //"CIB",
"bank_transaction_type": "cash_transfer"

View File

@@ -4,6 +4,13 @@ class MyTranslation extends Translations {
@override
Map<String, Map<String, String>> get keys => {
"ar": {
"You have transferred to your wallet from": "لقد حولت إلى محفظتك من",
'Transfer': "تحويل",
"amount": "المبلغ",
"This driver is not registered": "هذا السائق غير مسجل",
'insert amount': "أدخل المبلغ",
"phone number of driver": "رقم هاتف السائق",
"Transfer budget": "نقل الميزانية",
"Special Order": "طلب خاص",
"Speed Order": "طلب سريع",
"No data yet!": "لا توجد بيانات حتى الآن!",
@@ -18,7 +25,7 @@ class MyTranslation extends Translations {
"Enter your wallet number": "أدخل رقم محفظتك",
"The Amount is less than": "المبلغ أقل من",
"Cash Out": "صرف",
"Transaction successful": "تمت العملية بنجاح",
"Do you want to collect your earnings?":
"هل تريد استلام أموالك؟", // Corrected grammar
"Total wallet is ": "إجمالي المحفظة هو ",

View File

@@ -1,92 +0,0 @@
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/home/captin/speed_map_controller.dart';
import 'package:SEFER/views/home/Captin/mapDriverWidgets/speed_google_map.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/controller/home/captin/map_driver_controller.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import '../../../controller/functions/location_controller.dart';
import '../../Rate/rate_passenger.dart';
import 'mapDriverWidgets/driver_end_ride_bar.dart';
import 'mapDriverWidgets/google_driver_map_page.dart';
import 'mapDriverWidgets/google_map_app.dart';
import 'mapDriverWidgets/passenger_info_window.dart';
import 'mapDriverWidgets/sos_connect.dart';
class DriverSpeedLocationMapPage extends StatelessWidget {
DriverSpeedLocationMapPage({super.key});
final LocationController locationController = Get.put(LocationController());
// final MapDriverController mapDriverController =
// Get.put(MapDriverController());
@override
Widget build(BuildContext context) {
Get.put(SpeedMapController())
.startTimerToShowPassengerInfoWindowFromDriver();
Get.find<SpeedMapController>().argumentLoading();
Get.put(MapDriverController());
return MyScafolld(
title: 'Map Passenger'.tr,
body: [
SpeedGoogleDriverMap(locationController: locationController),
const PassengerInfoWindow(),
driverEndRideBar(),
const SosConnect(),
speedCircle(),
const GoogleMapApp(),
const PricesWindow(),
],
isleading: false);
}
}
class PricesWindow extends StatelessWidget {
const PricesWindow({
super.key,
});
@override
Widget build(BuildContext context) {
return GetBuilder<MapDriverController>(builder: (mapDriverController) {
return mapDriverController.isPriceWindow
? Positioned(
bottom: Get.height * 1.2,
// top: Get.height * 3,
left: Get.height * 1,
right: Get.height * 1,
child: Container(
height: Get.height * 3,
decoration: AppStyle.boxDecoration1,
child: Column(
children: [
Container(
decoration: AppStyle.boxDecoration1,
child: Padding(
padding: const EdgeInsets.all(3),
child: Text(
'Total Price is '.tr,
style: AppStyle.headTitle2,
textAlign: TextAlign.center,
),
)),
const SizedBox(
height: 20,
),
MyElevatedButton(
title: 'ok'.tr,
onPressed: () =>
Get.to(() => RatePassenger(), arguments: {
'rideId': mapDriverController.rideId,
'passengerId': mapDriverController.passengerId,
'driverId': mapDriverController.driverId
}))
],
),
),
)
: const SizedBox();
});
}
}

View File

@@ -1,7 +1,6 @@
import 'package:SEFER/constant/box_name.dart';
import 'package:SEFER/main.dart';
import 'package:SEFER/views/home/Captin/driver_map_page.dart';
import 'package:SEFER/views/home/Captin/driver_map_speed.dart';
import 'package:flutter/material.dart';
import 'package:flutter_font_icons/flutter_font_icons.dart';
import 'package:get/get.dart';
@@ -157,27 +156,24 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
),
),
),
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: IconButton(
onPressed: () {
// Get.to(() => PassengerLocationMapPage(),
// arguments: box.read(BoxName.rideArguments));
Get.to(() => DriverSpeedLocationMapPage());
// print(box.read(BoxName.rideArguments)['Duration']);
},
icon: const Icon(
FontAwesome5.grin_tears,
size: 29,
color: AppColor.blueColor,
),
),
),
// 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: IconButton(
// onPressed: () {
// },
// icon: const Icon(
// FontAwesome5.grin_tears,
// size: 29,
// color: AppColor.blueColor,
// ),
// ),
// ),
],
)),
);

View File

@@ -1,97 +0,0 @@
import 'package:SEFER/controller/home/captin/speed_map_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import '../../../../constant/colors.dart';
import '../../../../controller/functions/location_controller.dart';
class SpeedGoogleDriverMap extends StatelessWidget {
const SpeedGoogleDriverMap({
super.key,
required this.locationController,
});
final LocationController locationController;
@override
Widget build(BuildContext context) {
Get.put(SpeedMapController());
return Padding(
padding: const EdgeInsets.all(8.0),
child: GetBuilder<SpeedMapController>(
builder: (controller) => GoogleMap(
onMapCreated: controller.onMapCreated,
initialCameraPosition: CameraPosition(
// bearing: 45,
target: locationController.myLocation,
zoom: 16,
tilt: 40,
),
onCameraMoveStarted: () {},
onCameraMove: (position) {
locationController.myLocation = position.target;
controller.mapController!
.animateCamera(CameraUpdate.newCameraPosition(position));
},
minMaxZoomPreference: const MinMaxZoomPreference(6, 18),
myLocationEnabled: true,
compassEnabled: true,
mapType: MapType.normal,
trafficEnabled: true,
buildingsEnabled: true,
mapToolbarEnabled: true,
zoomControlsEnabled: true,
fortyFiveDegreeImageryEnabled: true,
zoomGesturesEnabled: true,
polylines: {
Polyline(
zIndex: 2,
consumeTapEvents: true,
geodesic: true,
endCap: Cap.buttCap,
startCap: Cap.buttCap,
visible: true,
polylineId: const PolylineId('route1'),
points: controller.polylineCoordinates,
color: AppColor.yellowColor,
width: 4,
),
Polyline(
zIndex: 2,
consumeTapEvents: true,
geodesic: true,
endCap: Cap.buttCap,
startCap: Cap.buttCap,
visible: true,
polylineId: const PolylineId('route'),
points: controller.polylineCoordinatesDestination,
color: AppColor.primaryColor,
width: 4,
),
},
markers: {
Marker(
markerId: MarkerId('MyLocation'.tr),
position: locationController.myLocation,
draggable: true,
icon: controller.carIcon,
rotation: locationController.heading),
Marker(
markerId: MarkerId('start'.tr),
position: controller.latLngPassengerLocation,
draggable: true,
icon: controller.startIcon,
),
Marker(
markerId: MarkerId('end'.tr),
position: controller.latLngPassengerDestination,
draggable: true,
icon: controller.endIcon,
),
},
),
),
);
}
}

View File

@@ -2,7 +2,6 @@ import 'dart:convert';
import 'package:SEFER/controller/functions/tts.dart';
import 'package:SEFER/controller/home/captin/home_captain_controller.dart';
import 'package:SEFER/views/home/Captin/driver_map_speed.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:SEFER/constant/box_name.dart';

View File

@@ -29,118 +29,123 @@ class CardSeferWalletDriver extends StatelessWidget {
DateTime? lastRequestTime =
box.read(BoxName.lastTimeCaptainWalletCashOut);
if (lastRequestTime == null ||
now.difference(lastRequestTime).inHours >= 24) {
// Update the last request time to now
lastRequestTime = now;
await box.write(
BoxName.lastTimeCaptainWalletCashOut, lastRequestTime);
box.write(BoxName.cvvCode, 1111);
if (double.parse(
Get.find<CaptainWalletController>().totalAmountVisa) >
100) {
Get.defaultDialog(
barrierDismissible: false,
title: 'Do you want to collect your earnings?'.tr,
titleStyle: AppStyle.title,
content: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Total wallet is '.tr,
style: AppStyle.title,
),
const SizedBox(
width: 5,
),
Text(
Get.find<CaptainWalletController>()
.totalAmountVisa,
style: AppStyle.number,
),
],
),
const SizedBox(
height: 5,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Wallet Type'.tr,
style: AppStyle.title,
),
const SizedBox(
width: 5,
),
MyDropDown(),
],
),
Form(
key: captainWalletController.formKey,
child: MyTextForm(
controller: captainWalletController.issurWallet,
label: "Enter your wallet number".tr,
hint: "Enter your wallet number".tr,
type: TextInputType.phone,
// if (lastRequestTime == null ||
// now.difference(lastRequestTime).inHours >= 24) {
// // Update the last request time to now
// lastRequestTime = now;
// await box.write(
// BoxName.lastTimeCaptainWalletCashOut, lastRequestTime);
// box.write(BoxName.cvvCode, 1111);
if (double.parse(
Get.find<CaptainWalletController>().totalAmountVisa) >
100) {
Get.defaultDialog(
barrierDismissible: false,
title: 'Do you want to collect your earnings?'.tr,
titleStyle: AppStyle.title,
content: Column(
children: [
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Total wallet is '.tr,
style: AppStyle.title,
),
)
],
),
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () async {
if (captainWalletController.formKey.currentState!
.validate()) {
if (double.parse(Get.find<CaptainWalletController>()
.totalAmountVisa) >
100) {
Get.back();
String amountAfter5LE = (double.parse(
Get.find<CaptainWalletController>()
.totalAmountVisa) -
5)
.toStringAsFixed(0);
await Get.put(PaymobPayout())
.payToWalletDriverAll(
amountAfter5LE,
captainWalletController.issurWallet.toString(),
captainWalletController.issurWallet.toString(),
);
} else {
Get.snackbar(
'${'The Amount is less than'.tr}${box.read(BoxName.countryCode) == 'Egypt' ? '100' : '20'}',
'',
backgroundColor: AppColor.yellowColor);
}
const SizedBox(
width: 5,
),
Text(
Get.find<CaptainWalletController>()
.totalAmountVisa,
style: AppStyle.number,
),
],
),
const SizedBox(
height: 5,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Wallet Type'.tr,
style: AppStyle.title,
),
const SizedBox(
width: 5,
),
MyDropDown1(),
],
),
Form(
key: captainWalletController.formKey,
child: MyTextForm(
controller: captainWalletController.phoneWallet,
label: "Enter your wallet number".tr,
hint: "Enter your wallet number".tr,
type: TextInputType.phone,
),
)
],
),
confirm: MyElevatedButton(
title: 'Ok'.tr,
onPressed: () async {
if (captainWalletController.formKey.currentState!
.validate()) {
if (double.parse(Get.find<CaptainWalletController>()
.totalAmountVisa) >
100) {
Get.back();
String amountAfter5LE = (double.parse(
Get.find<CaptainWalletController>()
.totalAmountVisa) -
5)
.toStringAsFixed(0);
print(Get.find<PaymobPayout>()
.dropdownValue
.toString());
print(captainWalletController.phoneWallet.text
.toString());
await Get.put(PaymobPayout()).payToWalletDriverAll(
amountAfter5LE,
Get.find<PaymobPayout>().dropdownValue.toString(),
captainWalletController.phoneWallet.text
.toString(),
);
} else {
Get.snackbar(
'${'The Amount is less than'.tr}${box.read(BoxName.countryCode) == 'Egypt' ? '100' : '20'}',
'',
backgroundColor: AppColor.yellowColor);
}
},
kolor: AppColor.greenColor,
),
cancel: MyElevatedButton(
title: 'cancel'.tr,
onPressed: () {
Get.back();
},
kolor: AppColor.redColor,
));
} else {
{
Get.snackbar(
'${'The Amount is less than'.tr}${box.read(BoxName.countryCode) == 'Egypt' ? '100' : '20'}',
'',
backgroundColor: AppColor.yellowColor);
}
}
}
},
kolor: AppColor.greenColor,
),
cancel: MyElevatedButton(
title: 'cancel'.tr,
onPressed: () {
Get.back();
},
kolor: AppColor.redColor,
));
} else {
// Optionally show a message or handle the throttling case
final hoursLeft = 24 - now.difference(lastRequestTime).inHours;
Get.snackbar(
'${'Please wait'.tr} $hoursLeft ${"hours before trying again.".tr}',
'');
{
Get.snackbar(
'${'The Amount is less than'.tr}${box.read(BoxName.countryCode) == 'Egypt' ? '100' : '20'}',
'',
backgroundColor: AppColor.yellowColor);
}
}
// } else {
// // Optionally show a message or handle the throttling case
// final hoursLeft = 24 - now.difference(lastRequestTime).inHours;
// Get.snackbar(
// '${'Please wait'.tr} $hoursLeft ${"hours before trying again.".tr}',
// '');
// }
},
child: Container(
width: Get.width * .85,

View File

@@ -0,0 +1,128 @@
import 'package:SEFER/constant/links.dart';
import 'package:SEFER/constant/style.dart';
import 'package:SEFER/controller/functions/crud.dart';
import 'package:SEFER/views/widgets/elevated_btn.dart';
import 'package:SEFER/views/widgets/my_scafold.dart';
import 'package:SEFER/views/widgets/my_textField.dart';
import 'package:SEFER/views/widgets/mycircular.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../constant/colors.dart';
import '../../../controller/home/payment/captain_wallet_controller.dart';
class TransferBudgetPage extends StatelessWidget {
const TransferBudgetPage({super.key});
@override
Widget build(BuildContext context) {
Get.put(CaptainWalletController());
return MyScafolld(
title: "Transfer budget".tr,
body: [
GetBuilder<CaptainWalletController>(
builder: (captainWalletController) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: AppStyle.boxDecoration1,
height: Get.height * .7,
width: double.infinity,
child: Form(
key: captainWalletController.formKeyTransfer,
child: Column(
children: [
const SizedBox(
height: 20,
),
MyTextForm(
controller: captainWalletController
.newDriverPhoneController,
label: 'phone number of driver'.tr,
hint: 'phone number of driver',
type: TextInputType.phone),
MyTextForm(
controller: captainWalletController
.amountFromBudgetController,
label: 'insert amount'.tr,
hint:
'${'You have in account'.tr} ${captainWalletController.totalAmountVisa}',
type: TextInputType.number),
captainWalletController.isNewTransfer
? const MyCircularProgressIndicator()
: captainWalletController
.amountToNewDriverMap.isEmpty
? MyElevatedButton(
title: 'Next'.tr,
onPressed: () async {
await captainWalletController
.detectNewDriverFromMyBudget();
})
: const SizedBox(),
captainWalletController.amountToNewDriverMap.isNotEmpty
? Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
width: double.maxFinite,
decoration: AppStyle.boxDecoration1,
child: Text(
'Name :'.tr +
captainWalletController
.amountToNewDriverMap[0]['name']
.toString(),
textAlign: TextAlign.center,
style: AppStyle.title,
),
),
const SizedBox(
height: 5,
),
Container(
width: double.maxFinite,
decoration: AppStyle.boxDecoration1,
child: Text(
"${"NationalID".tr} ${captainWalletController.amountToNewDriverMap[0]['national_number']}",
style: AppStyle.title,
textAlign: TextAlign.center,
),
),
const SizedBox(
height: 5,
),
Container(
width: double.maxFinite,
decoration: AppStyle.boxDecoration1,
child: Text(
"${"amount".tr} ${captainWalletController.amountFromBudgetController.text} ${'LE'.tr}",
style: AppStyle.title,
textAlign: TextAlign.center,
),
),
const SizedBox(
height: 15,
),
captainWalletController
.amountToNewDriverMap.isNotEmpty
? MyElevatedButton(
title: 'Transfer'.tr,
onPressed: () async {
await captainWalletController
.addtransferDriversWallet(
'Transfer');
})
: const SizedBox()
],
),
)
: const SizedBox()
],
)),
),
);
}),
],
isleading: true);
}
}

View File

@@ -20,6 +20,7 @@ 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 {
@@ -254,6 +255,11 @@ class WalletCaptain extends StatelessWidget {
}));
},
),
MyElevatedButton(
title: 'Transfer budget'.tr,
onPressed: () {
Get.to(() => const TransferBudgetPage());
})
],
),
),
@@ -370,6 +376,7 @@ class WalletCaptain extends StatelessWidget {
: const SizedBox(
height: 30,
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 10),
child: Row(
@@ -425,37 +432,32 @@ class WalletCaptain extends StatelessWidget {
}
}
class MyDropDown extends StatefulWidget {
@override
_MyDropDownState createState() => _MyDropDownState();
}
class _MyDropDownState extends State<MyDropDown> {
String dropdownValue = 'Itsalate';
class MyDropDown1 extends StatelessWidget {
@override
Widget build(BuildContext context) {
return DropdownButton<String>(
value: 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) {
setState(() {
dropdownValue = newValue!;
});
},
items: <String>['Itsalate', 'We', 'Orange', 'Vodafone']
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
);
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(),
);
});
}
}