6/15/1
@@ -55,8 +55,8 @@ android {
|
|||||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||||
minSdkVersion 23
|
minSdkVersion 23
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode 30
|
versionCode 32
|
||||||
versionName '1.5.30'
|
versionName '1.5.32'
|
||||||
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
|
// manifestPlaceholders = [mapsApiKey: 'android/app/src/main/AndroidManifest.xml']
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 41 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 7.5 KiB |
|
Before Width: | Height: | Size: 7.2 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 226 KiB After Width: | Height: | Size: 916 KiB |
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 179 KiB |
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 3.9 KiB |
|
Before Width: | Height: | Size: 4.5 KiB After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 128 KiB After Width: | Height: | Size: 144 KiB |
|
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 4.7 KiB |
|
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 5.0 KiB |
|
Before Width: | Height: | Size: 6.1 KiB After Width: | Height: | Size: 5.5 KiB |
|
Before Width: | Height: | Size: 7.1 KiB After Width: | Height: | Size: 6.4 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.1 KiB |
|
Before Width: | Height: | Size: 486 B After Width: | Height: | Size: 424 B |
|
Before Width: | Height: | Size: 8.7 KiB After Width: | Height: | Size: 8.1 KiB |
|
Before Width: | Height: | Size: 9.0 KiB After Width: | Height: | Size: 8.4 KiB |
|
Before Width: | Height: | Size: 9.7 KiB After Width: | Height: | Size: 9.2 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 10 KiB |
|
Before Width: | Height: | Size: 592 B After Width: | Height: | Size: 550 B |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
|
Before Width: | Height: | Size: 956 B After Width: | Height: | Size: 850 B |
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 939 B |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 46 KiB |
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.3 KiB After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 2.5 KiB After Width: | Height: | Size: 2.2 KiB |
|
Before Width: | Height: | Size: 2.6 KiB After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 3.1 KiB After Width: | Height: | Size: 2.7 KiB |
|
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 4.0 KiB After Width: | Height: | Size: 3.5 KiB |
@@ -21,7 +21,7 @@
|
|||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>32</string>
|
<string>33</string>
|
||||||
<key>CFBundleSignature</key>
|
<key>CFBundleSignature</key>
|
||||||
<string>????</string>
|
<string>????</string>
|
||||||
<key>CFBundleURLTypes</key>
|
<key>CFBundleURLTypes</key>
|
||||||
@@ -36,7 +36,7 @@
|
|||||||
</dict>
|
</dict>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>4.0.32</string>
|
<string>4.0.33</string>
|
||||||
<key>FirebaseAppDelegateProxyEnabled</key>
|
<key>FirebaseAppDelegateProxyEnabled</key>
|
||||||
<string>NO</string>
|
<string>NO</string>
|
||||||
<key>GMSApiKey</key>
|
<key>GMSApiKey</key>
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
|
|||||||
|
|
||||||
class AppColor {
|
class AppColor {
|
||||||
static const Color primaryColor = Color(0xFF1DA1F2);
|
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 secondaryColor = Colors.white;
|
||||||
static const Color accentColor = Colors.grey;
|
static const Color accentColor = Colors.grey;
|
||||||
static const Color greyColor = Colors.grey;
|
static const Color greyColor = Colors.grey;
|
||||||
|
|||||||
@@ -29,6 +29,7 @@ class AppLink {
|
|||||||
|
|
||||||
static String getWalletByDriver = "$walletDriver/getWalletByDriver.php";
|
static String getWalletByDriver = "$walletDriver/getWalletByDriver.php";
|
||||||
static String driverStatistic = "$walletDriver/driverStatistic.php";
|
static String driverStatistic = "$walletDriver/driverStatistic.php";
|
||||||
|
static String getDriverDetails = "$walletDriver/getDriverDetails.php";
|
||||||
static String getDriverWeekPaymentMove =
|
static String getDriverWeekPaymentMove =
|
||||||
"$walletDriver/getDriverWeekPaymentMove.php";
|
"$walletDriver/getDriverWeekPaymentMove.php";
|
||||||
static String getDriversWallet = "$walletDriver/get.php";
|
static String getDriversWallet = "$walletDriver/get.php";
|
||||||
@@ -71,6 +72,8 @@ class AppLink {
|
|||||||
////-----------------DriverPayment------------------
|
////-----------------DriverPayment------------------
|
||||||
static String addDriverpayment = "$ride/payment/add.php";
|
static String addDriverpayment = "$ride/payment/add.php";
|
||||||
static String addDriverPaymentPoints = "$ride/driverPayment/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 getDriverPaymentPoints = "$ride/driverWallet/get.php";
|
||||||
static String getDriverpaymentToday = "$ride/payment/get.php";
|
static String getDriverpaymentToday = "$ride/payment/get.php";
|
||||||
static String getCountRide = "$ride/payment/getCountRide.php";
|
static String getCountRide = "$ride/payment/getCountRide.php";
|
||||||
|
|||||||
@@ -878,23 +878,9 @@ class MapDriverController extends GetxController {
|
|||||||
startNameLocation = Get.arguments['startNameLocation'];
|
startNameLocation = Get.arguments['startNameLocation'];
|
||||||
endNameLocation = Get.arguments['endNameLocation'];
|
endNameLocation = Get.arguments['endNameLocation'];
|
||||||
|
|
||||||
// var coords = passengerLocation.toString().split(',');
|
|
||||||
// var coordDestination = passengerDestination.toString().split(',');
|
|
||||||
|
|
||||||
// Parse to double
|
// Parse to double
|
||||||
latlng(passengerLocation, passengerDestination);
|
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 lat = Get.find<LocationController>().myLocation.latitude.toString();
|
||||||
String lng = Get.find<LocationController>().myLocation.longitude.toString();
|
String lng = Get.find<LocationController>().myLocation.longitude.toString();
|
||||||
String origin = '$lat,$lng';
|
String origin = '$lat,$lng';
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ class OrderRequestController extends GetxController {
|
|||||||
countRefuse = results[0]['count'].toString();
|
countRefuse = results[0]['count'].toString();
|
||||||
update();
|
update();
|
||||||
if (int.parse(countRefuse) > 3) {
|
if (int.parse(countRefuse) > 3) {
|
||||||
|
box.write(BoxName.statusDriverLocation, 'on');
|
||||||
locationController.stopLocationUpdates();
|
locationController.stopLocationUpdates();
|
||||||
Get.defaultDialog(
|
Get.defaultDialog(
|
||||||
// backgroundColor: CupertinoColors.destructiveRed,
|
// backgroundColor: CupertinoColors.destructiveRed,
|
||||||
@@ -73,6 +74,8 @@ class OrderRequestController extends GetxController {
|
|||||||
confirm: MyElevatedButton(
|
confirm: MyElevatedButton(
|
||||||
title: 'Ok , See you Tomorrow'.tr,
|
title: 'Ok , See you Tomorrow'.tr,
|
||||||
onPressed: () => Get.back()));
|
onPressed: () => Get.back()));
|
||||||
|
} else {
|
||||||
|
box.write(BoxName.statusDriverLocation, 'off');
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
print('Error executing custom query: $e');
|
print('Error executing custom query: $e');
|
||||||
@@ -142,7 +145,7 @@ class OrderRequestController extends GetxController {
|
|||||||
});
|
});
|
||||||
await CRUD().post(link: AppLink.updateRides, payload: {
|
await CRUD().post(link: AppLink.updateRides, payload: {
|
||||||
'id': orderID,
|
'id': orderID,
|
||||||
'rideTimeStart': DateTime.now().toString(),
|
// 'rideTimeStart': DateTime.now().toString(),
|
||||||
'status': 'Refused',
|
'status': 'Refused',
|
||||||
'driver_id': box.read(BoxName.driverID),
|
'driver_id': box.read(BoxName.driverID),
|
||||||
});
|
});
|
||||||
@@ -154,7 +157,7 @@ class OrderRequestController extends GetxController {
|
|||||||
'driver_id': box.read(BoxName.driverID).toString(),
|
'driver_id': box.read(BoxName.driverID).toString(),
|
||||||
}, TableName.driverOrdersRefuse);
|
}, TableName.driverOrdersRefuse);
|
||||||
getRefusedOrderByCaptain();
|
getRefusedOrderByCaptain();
|
||||||
box.write(BoxName.statusDriverLocation, 'off');
|
|
||||||
update();
|
update();
|
||||||
Get.back();
|
Get.back();
|
||||||
// Get.offAll(HomeCaptain());
|
// Get.offAll(HomeCaptain());
|
||||||
|
|||||||
@@ -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();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,5 +1,7 @@
|
|||||||
import 'dart:convert';
|
import 'dart:convert';
|
||||||
|
|
||||||
|
import 'package:SEFER/constant/colors.dart';
|
||||||
|
import 'package:SEFER/controller/firebase/firbase_messge.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:SEFER/constant/box_name.dart';
|
import 'package:SEFER/constant/box_name.dart';
|
||||||
@@ -9,6 +11,7 @@ import 'package:SEFER/main.dart';
|
|||||||
|
|
||||||
class CaptainWalletController extends GetxController {
|
class CaptainWalletController extends GetxController {
|
||||||
bool isLoading = false;
|
bool isLoading = false;
|
||||||
|
final formKeyTransfer = GlobalKey<FormState>();
|
||||||
Map walletDate = {};
|
Map walletDate = {};
|
||||||
Map walletDateVisa = {};
|
Map walletDateVisa = {};
|
||||||
Map walletDriverPointsDate = {};
|
Map walletDriverPointsDate = {};
|
||||||
@@ -17,7 +20,8 @@ class CaptainWalletController extends GetxController {
|
|||||||
String totalAmountVisa = '0';
|
String totalAmountVisa = '0';
|
||||||
String totalPoints = '0';
|
String totalPoints = '0';
|
||||||
final amountFromBudgetController = TextEditingController();
|
final amountFromBudgetController = TextEditingController();
|
||||||
final issurWallet = TextEditingController();
|
final newDriverPhoneController = TextEditingController();
|
||||||
|
final phoneWallet = TextEditingController();
|
||||||
|
|
||||||
payFromBudget() async {
|
payFromBudget() async {
|
||||||
if (formKey.currentState!.validate()) {
|
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 {
|
Future getCaptainWalletFromRide() async {
|
||||||
isLoading = true;
|
isLoading = true;
|
||||||
update();
|
update();
|
||||||
@@ -79,8 +123,20 @@ class CaptainWalletController extends GetxController {
|
|||||||
update();
|
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;
|
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: {
|
var res = await CRUD().post(link: AppLink.addDriverPaymentPoints, payload: {
|
||||||
'driverID': box.read(BoxName.driverID).toString(),
|
'driverID': box.read(BoxName.driverID).toString(),
|
||||||
'amount': amount.toString(),
|
'amount': amount.toString(),
|
||||||
@@ -89,17 +145,53 @@ class CaptainWalletController extends GetxController {
|
|||||||
var d = jsonDecode(res);
|
var d = jsonDecode(res);
|
||||||
paymentID = d['message'].toString();
|
paymentID = d['message'].toString();
|
||||||
print('paymentID $paymentID');
|
print('paymentID $paymentID');
|
||||||
|
return paymentID;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future addDriverWallet(String paymentMethod, point) async {
|
Future addDriverWallet(String paymentMethod, point) async {
|
||||||
|
paymentToken = await generateToken(point);
|
||||||
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
|
await CRUD().post(link: AppLink.addDriversWalletPoints, payload: {
|
||||||
'driverID': box.read(BoxName.driverID).toString(),
|
'driverID': box.read(BoxName.driverID).toString(),
|
||||||
'paymentID': paymentID.toString(),
|
'paymentID': paymentID.toString(),
|
||||||
'amount': point,
|
'amount': point,
|
||||||
|
'token': paymentToken,
|
||||||
'paymentMethod': paymentMethod.toString(),
|
'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
|
//check if account bank is created or not
|
||||||
Future checkAccountCaptainBank() async {
|
Future checkAccountCaptainBank() async {
|
||||||
isLoading = false;
|
isLoading = false;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import 'captain_wallet_controller.dart';
|
|||||||
|
|
||||||
class PaymobPayout extends GetxController {
|
class PaymobPayout extends GetxController {
|
||||||
bool isLoading = false;
|
bool isLoading = false;
|
||||||
|
String dropdownValue = 'etisalat';
|
||||||
|
|
||||||
Future<String> getToken() async {
|
Future<String> getToken() async {
|
||||||
var headers = {
|
var headers = {
|
||||||
@@ -53,6 +54,7 @@ class PaymobPayout extends GetxController {
|
|||||||
"issuer": issuer, //"vodafone",
|
"issuer": issuer, //"vodafone",
|
||||||
"msisdn": msisdn, // "01023456789"
|
"msisdn": msisdn, // "01023456789"
|
||||||
});
|
});
|
||||||
|
print(body);
|
||||||
var res = await http.post(
|
var res = await http.post(
|
||||||
Uri.parse(
|
Uri.parse(
|
||||||
'https://stagingpayouts.paymobsolutions.com/api/secure/disburse/'),
|
'https://stagingpayouts.paymobsolutions.com/api/secure/disburse/'),
|
||||||
@@ -65,7 +67,7 @@ class PaymobPayout extends GetxController {
|
|||||||
if (dec['disbursement_status'] == 'successful') {
|
if (dec['disbursement_status'] == 'successful') {
|
||||||
await CRUD().post(link: AppLink.addDriverpayment, payload: {
|
await CRUD().post(link: AppLink.addDriverpayment, payload: {
|
||||||
'rideId': DateTime.now().toIso8601String(),
|
'rideId': DateTime.now().toIso8601String(),
|
||||||
'amount': ((-1) * double.parse(dec['amount'])).toStringAsFixed(0),
|
'amount': ((-1) * (double.parse(dec['amount'])) + 5).toStringAsFixed(0),
|
||||||
'payment_method': 'payout',
|
'payment_method': 'payout',
|
||||||
'passengerID': 'myself',
|
'passengerID': 'myself',
|
||||||
'driverID': box.read(BoxName.driverID).toString(),
|
'driverID': box.read(BoxName.driverID).toString(),
|
||||||
@@ -75,7 +77,7 @@ class PaymobPayout extends GetxController {
|
|||||||
backgroundColor: AppColor.greenColor);
|
backgroundColor: AppColor.greenColor);
|
||||||
Get.find<CaptainWalletController>().getCaptainWalletFromRide();
|
Get.find<CaptainWalletController>().getCaptainWalletFromRide();
|
||||||
} else if (dec['disbursement_status'] == 'failed') {
|
} 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);
|
backgroundColor: AppColor.redColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -89,7 +91,8 @@ class PaymobPayout extends GetxController {
|
|||||||
var body = {
|
var body = {
|
||||||
"issuer": "bank_card",
|
"issuer": "bank_card",
|
||||||
"amount": amount, //9.0,
|
"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_card_number": bankCardNumber, //"1111-2222-3333-4444",
|
||||||
"bank_code": bankCode, //"CIB",
|
"bank_code": bankCode, //"CIB",
|
||||||
"bank_transaction_type": "cash_transfer"
|
"bank_transaction_type": "cash_transfer"
|
||||||
|
|||||||
@@ -4,6 +4,13 @@ class MyTranslation extends Translations {
|
|||||||
@override
|
@override
|
||||||
Map<String, Map<String, String>> get keys => {
|
Map<String, Map<String, String>> get keys => {
|
||||||
"ar": {
|
"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": "طلب خاص",
|
"Special Order": "طلب خاص",
|
||||||
"Speed Order": "طلب سريع",
|
"Speed Order": "طلب سريع",
|
||||||
"No data yet!": "لا توجد بيانات حتى الآن!",
|
"No data yet!": "لا توجد بيانات حتى الآن!",
|
||||||
@@ -18,7 +25,7 @@ class MyTranslation extends Translations {
|
|||||||
"Enter your wallet number": "أدخل رقم محفظتك",
|
"Enter your wallet number": "أدخل رقم محفظتك",
|
||||||
"The Amount is less than": "المبلغ أقل من",
|
"The Amount is less than": "المبلغ أقل من",
|
||||||
"Cash Out": "صرف",
|
"Cash Out": "صرف",
|
||||||
"Transaction successful": "تمت العملية بنجاح",
|
|
||||||
"Do you want to collect your earnings?":
|
"Do you want to collect your earnings?":
|
||||||
"هل تريد استلام أموالك؟", // Corrected grammar
|
"هل تريد استلام أموالك؟", // Corrected grammar
|
||||||
"Total wallet is ": "إجمالي المحفظة هو ",
|
"Total wallet is ": "إجمالي المحفظة هو ",
|
||||||
|
|||||||
@@ -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();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,7 +1,6 @@
|
|||||||
import 'package:SEFER/constant/box_name.dart';
|
import 'package:SEFER/constant/box_name.dart';
|
||||||
import 'package:SEFER/main.dart';
|
import 'package:SEFER/main.dart';
|
||||||
import 'package:SEFER/views/home/Captin/driver_map_page.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/material.dart';
|
||||||
import 'package:flutter_font_icons/flutter_font_icons.dart';
|
import 'package:flutter_font_icons/flutter_font_icons.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
@@ -157,27 +156,24 @@ GetBuilder<HomeCaptainController> leftMainMenuCaptainIcons() {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
AnimatedContainer(
|
// AnimatedContainer(
|
||||||
duration: const Duration(microseconds: 200),
|
// duration: const Duration(microseconds: 200),
|
||||||
width: controller.widthMapTypeAndTraffic,
|
// width: controller.widthMapTypeAndTraffic,
|
||||||
decoration: BoxDecoration(
|
// decoration: BoxDecoration(
|
||||||
color: AppColor.secondaryColor,
|
// color: AppColor.secondaryColor,
|
||||||
border: Border.all(color: AppColor.blueColor),
|
// border: Border.all(color: AppColor.blueColor),
|
||||||
borderRadius: BorderRadius.circular(15)),
|
// borderRadius: BorderRadius.circular(15)),
|
||||||
child: IconButton(
|
// child: IconButton(
|
||||||
onPressed: () {
|
// onPressed: () {
|
||||||
// Get.to(() => PassengerLocationMapPage(),
|
|
||||||
// arguments: box.read(BoxName.rideArguments));
|
// },
|
||||||
Get.to(() => DriverSpeedLocationMapPage());
|
// icon: const Icon(
|
||||||
// print(box.read(BoxName.rideArguments)['Duration']);
|
// FontAwesome5.grin_tears,
|
||||||
},
|
// size: 29,
|
||||||
icon: const Icon(
|
// color: AppColor.blueColor,
|
||||||
FontAwesome5.grin_tears,
|
// ),
|
||||||
size: 29,
|
// ),
|
||||||
color: AppColor.blueColor,
|
// ),
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
],
|
||||||
)),
|
)),
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -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,
|
|
||||||
),
|
|
||||||
},
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -2,7 +2,6 @@ import 'dart:convert';
|
|||||||
|
|
||||||
import 'package:SEFER/controller/functions/tts.dart';
|
import 'package:SEFER/controller/functions/tts.dart';
|
||||||
import 'package:SEFER/controller/home/captin/home_captain_controller.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:flutter/material.dart';
|
||||||
import 'package:get/get.dart';
|
import 'package:get/get.dart';
|
||||||
import 'package:SEFER/constant/box_name.dart';
|
import 'package:SEFER/constant/box_name.dart';
|
||||||
|
|||||||
@@ -29,13 +29,13 @@ class CardSeferWalletDriver extends StatelessWidget {
|
|||||||
DateTime? lastRequestTime =
|
DateTime? lastRequestTime =
|
||||||
box.read(BoxName.lastTimeCaptainWalletCashOut);
|
box.read(BoxName.lastTimeCaptainWalletCashOut);
|
||||||
|
|
||||||
if (lastRequestTime == null ||
|
// if (lastRequestTime == null ||
|
||||||
now.difference(lastRequestTime).inHours >= 24) {
|
// now.difference(lastRequestTime).inHours >= 24) {
|
||||||
// Update the last request time to now
|
// // Update the last request time to now
|
||||||
lastRequestTime = now;
|
// lastRequestTime = now;
|
||||||
await box.write(
|
// await box.write(
|
||||||
BoxName.lastTimeCaptainWalletCashOut, lastRequestTime);
|
// BoxName.lastTimeCaptainWalletCashOut, lastRequestTime);
|
||||||
box.write(BoxName.cvvCode, 1111);
|
// box.write(BoxName.cvvCode, 1111);
|
||||||
if (double.parse(
|
if (double.parse(
|
||||||
Get.find<CaptainWalletController>().totalAmountVisa) >
|
Get.find<CaptainWalletController>().totalAmountVisa) >
|
||||||
100) {
|
100) {
|
||||||
@@ -75,13 +75,13 @@ class CardSeferWalletDriver extends StatelessWidget {
|
|||||||
const SizedBox(
|
const SizedBox(
|
||||||
width: 5,
|
width: 5,
|
||||||
),
|
),
|
||||||
MyDropDown(),
|
MyDropDown1(),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
Form(
|
Form(
|
||||||
key: captainWalletController.formKey,
|
key: captainWalletController.formKey,
|
||||||
child: MyTextForm(
|
child: MyTextForm(
|
||||||
controller: captainWalletController.issurWallet,
|
controller: captainWalletController.phoneWallet,
|
||||||
label: "Enter your wallet number".tr,
|
label: "Enter your wallet number".tr,
|
||||||
hint: "Enter your wallet number".tr,
|
hint: "Enter your wallet number".tr,
|
||||||
type: TextInputType.phone,
|
type: TextInputType.phone,
|
||||||
@@ -103,11 +103,16 @@ class CardSeferWalletDriver extends StatelessWidget {
|
|||||||
.totalAmountVisa) -
|
.totalAmountVisa) -
|
||||||
5)
|
5)
|
||||||
.toStringAsFixed(0);
|
.toStringAsFixed(0);
|
||||||
await Get.put(PaymobPayout())
|
print(Get.find<PaymobPayout>()
|
||||||
.payToWalletDriverAll(
|
.dropdownValue
|
||||||
|
.toString());
|
||||||
|
print(captainWalletController.phoneWallet.text
|
||||||
|
.toString());
|
||||||
|
await Get.put(PaymobPayout()).payToWalletDriverAll(
|
||||||
amountAfter5LE,
|
amountAfter5LE,
|
||||||
captainWalletController.issurWallet.toString(),
|
Get.find<PaymobPayout>().dropdownValue.toString(),
|
||||||
captainWalletController.issurWallet.toString(),
|
captainWalletController.phoneWallet.text
|
||||||
|
.toString(),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
Get.snackbar(
|
Get.snackbar(
|
||||||
@@ -134,13 +139,13 @@ class CardSeferWalletDriver extends StatelessWidget {
|
|||||||
backgroundColor: AppColor.yellowColor);
|
backgroundColor: AppColor.yellowColor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
// } else {
|
||||||
// Optionally show a message or handle the throttling case
|
// // Optionally show a message or handle the throttling case
|
||||||
final hoursLeft = 24 - now.difference(lastRequestTime).inHours;
|
// final hoursLeft = 24 - now.difference(lastRequestTime).inHours;
|
||||||
Get.snackbar(
|
// Get.snackbar(
|
||||||
'${'Please wait'.tr} $hoursLeft ${"hours before trying again.".tr}',
|
// '${'Please wait'.tr} $hoursLeft ${"hours before trying again.".tr}',
|
||||||
'');
|
// '');
|
||||||
}
|
// }
|
||||||
},
|
},
|
||||||
child: Container(
|
child: Container(
|
||||||
width: Get.width * .85,
|
width: Get.width * .85,
|
||||||
|
|||||||
128
lib/views/home/my_wallet/transfer_budget_page.dart
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -20,6 +20,7 @@ import '../../../controller/payment/driver_payment_controller.dart';
|
|||||||
import '../../widgets/my_scafold.dart';
|
import '../../widgets/my_scafold.dart';
|
||||||
import 'card_wallet_widget.dart';
|
import 'card_wallet_widget.dart';
|
||||||
import 'points_captain.dart';
|
import 'points_captain.dart';
|
||||||
|
import 'transfer_budget_page.dart';
|
||||||
import 'weekly_payment_page.dart';
|
import 'weekly_payment_page.dart';
|
||||||
|
|
||||||
class WalletCaptain extends StatelessWidget {
|
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(
|
: const SizedBox(
|
||||||
height: 30,
|
height: 30,
|
||||||
),
|
),
|
||||||
|
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.symmetric(horizontal: 10),
|
padding: const EdgeInsets.symmetric(horizontal: 10),
|
||||||
child: Row(
|
child: Row(
|
||||||
@@ -425,18 +432,13 @@ class WalletCaptain extends StatelessWidget {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyDropDown extends StatefulWidget {
|
class MyDropDown1 extends StatelessWidget {
|
||||||
@override
|
|
||||||
_MyDropDownState createState() => _MyDropDownState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _MyDropDownState extends State<MyDropDown> {
|
|
||||||
String dropdownValue = 'Itsalate';
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
Get.put(PaymobPayout());
|
||||||
|
return GetBuilder<PaymobPayout>(builder: (controller) {
|
||||||
return DropdownButton<String>(
|
return DropdownButton<String>(
|
||||||
value: dropdownValue,
|
value: controller.dropdownValue,
|
||||||
icon: const Icon(Icons.arrow_drop_down),
|
icon: const Icon(Icons.arrow_drop_down),
|
||||||
elevation: 16,
|
elevation: 16,
|
||||||
style: const TextStyle(color: Colors.deepPurple),
|
style: const TextStyle(color: Colors.deepPurple),
|
||||||
@@ -445,11 +447,10 @@ class _MyDropDownState extends State<MyDropDown> {
|
|||||||
color: Colors.deepPurpleAccent,
|
color: Colors.deepPurpleAccent,
|
||||||
),
|
),
|
||||||
onChanged: (String? newValue) {
|
onChanged: (String? newValue) {
|
||||||
setState(() {
|
controller.dropdownValue = newValue!;
|
||||||
dropdownValue = newValue!;
|
controller.update();
|
||||||
});
|
|
||||||
},
|
},
|
||||||
items: <String>['Itsalate', 'We', 'Orange', 'Vodafone']
|
items: <String>['etisalat', 'aman', 'orange', 'vodafone']
|
||||||
.map<DropdownMenuItem<String>>((String value) {
|
.map<DropdownMenuItem<String>>((String value) {
|
||||||
return DropdownMenuItem<String>(
|
return DropdownMenuItem<String>(
|
||||||
value: value,
|
value: value,
|
||||||
@@ -457,5 +458,6 @@ class _MyDropDownState extends State<MyDropDown> {
|
|||||||
);
|
);
|
||||||
}).toList(),
|
}).toList(),
|
||||||
);
|
);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||