diff --git a/assets/images/brand.png b/assets/images/brand.png new file mode 100644 index 0000000..887d8a7 Binary files /dev/null and b/assets/images/brand.png differ diff --git a/assets/images/car.png b/assets/images/car.png index fbc44e5..4be5957 100644 Binary files a/assets/images/car.png and b/assets/images/car.png differ diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 2d24e07..b333758 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -8,7 +8,7 @@ Explanation of why your app needs access to the photo library. NSFaceIDUsageDescription - Use Face ID to securely authenticate payment accounts. + Use Face ID to securely authenticate payment accounts. NSMicrophoneUsageDescription This app requires access to your microphone to record audio, allowing you to add voice recordings to your photos and videos. @@ -37,11 +37,11 @@ CFBundlePackageType APPL CFBundleShortVersionString - 4 + 12 CFBundleSignature ???? CFBundleVersion - 1.04 + 1.32 LSRequiresIPhoneOS UILaunchStoryboardName diff --git a/lib/controller/admin/ride_admin_controller.dart b/lib/controller/admin/ride_admin_controller.dart index 2712108..5360623 100644 --- a/lib/controller/admin/ride_admin_controller.dart +++ b/lib/controller/admin/ride_admin_controller.dart @@ -1,5 +1,6 @@ import 'dart:convert'; +import 'package:fl_chart/fl_chart.dart'; import 'package:get/get.dart'; import 'package:ride/constant/links.dart'; import 'package:ride/controller/functions/crud.dart'; @@ -8,37 +9,46 @@ import '../../models/model/admin/monthly_ride.dart'; class RideAdminController extends GetxController { bool isLoading = false; - late List rideData; + late List rideData; late Map jsonResponse; List ridesDetails = []; - // var chartData; - late List chartDatasync; + var chartData; + // late List chartDatasync; Future getRidesAdminDash() async { isLoading = true; update(); var res = await CRUD().get(link: AppLink.getRidesPerMonth, payload: {}); jsonResponse = jsonDecode(res); - - chartDatasync = (jsonResponse['message'] as List) - .map((item) => ChartDataS( - item['year'], - item['month'], - item['day'], - item['rides_count'], - )) + rideData = (jsonResponse['message'] as List) + .map((item) => MonthlyDataModel.fromJson(item)) .toList(); + + chartData = rideData + .map((data) => FlSpot(data.day.toDouble(), data.ridesCount.toDouble())) + .toList(); + + // chartDatasync = (jsonResponse['message'] as List) + // .map((item) => ChartDataS( + // item['year'], + // item['month'], + // item['day'], + // item['rides_count'], + // )) + // .toList(); isLoading = false; update(); } Future getRidesDetails() async { + // isLoading = true; + // update(); var res = await CRUD().get(link: AppLink.getRidesDetails, payload: {}); var d = jsonDecode(res); ridesDetails = d['message']; - isLoading = false; - update(); + // isLoading = false; + // update(); } @override @@ -53,11 +63,11 @@ class RideAdminController extends GetxController { } } -class ChartDataS { - ChartDataS(this.year, this.month, this.day, this.ridesCount); +// class ChartDataS { +// ChartDataS(this.year, this.month, this.day, this.ridesCount); - final int year; - final int month; - final int day; - final int ridesCount; -} +// final int year; +// final int month; +// final int day; +// final int ridesCount; +// } diff --git a/lib/controller/admin/wallet_admin_controller.dart b/lib/controller/admin/wallet_admin_controller.dart new file mode 100644 index 0000000..1f8a534 --- /dev/null +++ b/lib/controller/admin/wallet_admin_controller.dart @@ -0,0 +1,20 @@ +import 'dart:convert'; + +import 'package:get/get.dart'; + +import '../../constant/links.dart'; +import '../functions/crud.dart'; + +class WalletAdminController extends GetxController { + bool isLoading = false; + + late Map jsonResponse; + List walletDetails = []; + + Future getWalletAdminDash() async { + isLoading = true; + update(); + var res = await CRUD().get(link: AppLink.getRidesPerMonth, payload: {}); + jsonResponse = jsonDecode(res); + } +} diff --git a/lib/controller/auth/login_controller.dart b/lib/controller/auth/login_controller.dart index ee6edb1..efab2e5 100644 --- a/lib/controller/auth/login_controller.dart +++ b/lib/controller/auth/login_controller.dart @@ -1,4 +1,5 @@ import 'dart:convert'; +import 'dart:io'; import 'dart:math'; import 'package:flutter/material.dart'; @@ -41,17 +42,32 @@ class LoginController extends GetxController { void adminDashboardOpen() async { if (formKeyAdmin.currentState!.validate()) { await DeviceInfoPlus.getDeviceInfo(); - print(DeviceInfoPlus.deviceData['serialNumber']); - var res = await CRUD().get(link: AppLink.getAdminUser, payload: { - 'device_number': DeviceInfoPlus.deviceData['serialNumber'].toString(), - }); - var d = jsonDecode(res); - // print(d); - // if (DeviceInfoPlus.deviceData['serialNumber'] == - // d['message']['device_number']) { - Get.back(); - Get.to(() => AdminHomePage()); - // } + if (Platform.isAndroid) { + print(DeviceInfoPlus.deviceData['serialNumber']); + var res = await CRUD().get(link: AppLink.getAdminUser, payload: { + 'device_number': DeviceInfoPlus.deviceData['serialNumber'].toString(), + }); + var d = jsonDecode(res); + // print(d); + // if (DeviceInfoPlus.deviceData['serialNumber'] == + // d['message']['device_number']) { + Get.back(); + Get.to(() => const AdminHomePage()); + // } + } + if (Platform.isIOS) { + print(DeviceInfoPlus.deviceData['identifierForVendor']); + // var res = await CRUD().get(link: AppLink.getAdminUser, payload: { + // 'device_number': DeviceInfoPlus.deviceData['identifierForVendor'].toString(), + // }); + // var d = jsonDecode(res); + // print(d); + // if (DeviceInfoPlus.deviceData['serialNumber'] == + // d['message']['device_number']) { + Get.back(); + Get.to(() => const AdminHomePage()); + // } + } } } diff --git a/lib/controller/home/captin/home_captain_controller.dart b/lib/controller/home/captin/home_captain_controller.dart index c6de1c4..7044f3a 100644 --- a/lib/controller/home/captin/home_captain_controller.dart +++ b/lib/controller/home/captin/home_captain_controller.dart @@ -180,7 +180,7 @@ class HomeCaptainController extends GetxController { @override void onInit() async { - addToken(); + await addToken(); onButtonSelected(); getPaymentToday(); getAllPayment(); @@ -191,11 +191,11 @@ class HomeCaptainController extends GetxController { } addToken() async { + box.write(BoxName.statusDriverLocation, 'off'); await CRUD().post(link: AppLink.addTokensDriver, payload: { 'token': box.read(BoxName.tokenDriver), 'captain_id': box.read(BoxName.driverID).toString() }).then((value) => print('Token Added')); - box.write(BoxName.statusDriverLocation, 'off'); } getPaymentToday() async { diff --git a/lib/controller/home/captin/widget/left_menu_map_captain.dart b/lib/controller/home/captin/widget/left_menu_map_captain.dart index af3df5e..8cd6f85 100644 --- a/lib/controller/home/captin/widget/left_menu_map_captain.dart +++ b/lib/controller/home/captin/widget/left_menu_map_captain.dart @@ -2,7 +2,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_font_icons/flutter_font_icons.dart'; import 'package:get/get.dart'; import 'package:ride/controller/home/captin/home_captain_controller.dart'; -import 'package:ride/controller/home/captin/map_driver_controller.dart'; import 'package:ride/controller/home/captin/widget/zones_controller.dart'; import '../../../../constant/colors.dart'; diff --git a/lib/controller/home/map_passenger_controller.dart b/lib/controller/home/map_passenger_controller.dart index 16a1939..adf4416 100644 --- a/lib/controller/home/map_passenger_controller.dart +++ b/lib/controller/home/map_passenger_controller.dart @@ -25,22 +25,26 @@ import '../payment/payment_controller.dart'; class MapPassengerController extends GetxController { bool isLoading = true; - TextEditingController placeController = TextEditingController(); + TextEditingController placeDestinationController = TextEditingController(); + TextEditingController placeStartController = TextEditingController(); TextEditingController sosPhonePassengerProfile = TextEditingController(); final sosFormKey = GlobalKey(); List data = []; List bounds = []; - List places = []; + List placesStart = []; + List placesDestination = []; LatLngBounds? boundsdata; List markers = []; List polyLines = []; late LatLng myLocation; late LatLng newMyLocation = const LatLng(32.115295, 36.064773); + late LatLng newStartPointLocation = const LatLng(32.115295, 36.064773); LatLng myDestination = const LatLng(32.115295, 36.064773); final List polylineCoordinates = []; List carsLocationByPassenger = []; List driverCarsLocationToPassengerAfterApplied = []; BitmapDescriptor markerIcon = BitmapDescriptor.defaultMarker; + BitmapDescriptor tripIcon = BitmapDescriptor.defaultMarker; BitmapDescriptor carIcon = BitmapDescriptor.defaultMarker; double height = 150; DateTime currentTime = DateTime.now(); @@ -50,6 +54,7 @@ class MapPassengerController extends GetxController { double widthMenu = 0; double heightPickerContainer = 90; double mainBottomMenuMap = Get.height * .2; + bool startLocationFromMap = false; bool heightMenuBool = false; bool isPickerShown = false; bool isBottomSheetShown = false; @@ -87,10 +92,14 @@ class MapPassengerController extends GetxController { double progressTimerRideBegin = 0; int remainingTimeTimerRideBegin = 60; String stringRemainingTimeRideBegin = ''; + String hintTextStartPoint = 'Search for your Start point'.tr; + String currentLocationString = 'Current Location'.tr; + String hintTextDestinationPoint = 'Search for your destination'.tr; late String rideId; bool noCarString = false; bool isCashSelectedBeforeConfirmRide = false; bool isPassengerChosen = false; + bool currentLocationToFormPlaces = false; late String driverToken; int carsOrder = 0; String? mapAPIKEY; @@ -105,6 +114,41 @@ class MapPassengerController extends GetxController { update(); } + void getCurrentLocationFormString() async { + currentLocationToFormPlaces = true; + await getLocation(); + currentLocationString = myLocation.toString(); + newStartPointLocation = myLocation; + update(); + } + + void convertHintTextStartNewPlaces(int index) { + if (placesStart.isEmpty) { + hintTextStartPoint = 'Search for your Start point'.tr; + update(); + } else { + hintTextStartPoint = placesStart[index]['name']; + double lat = placesStart[index]['geometry']['location']['lat']; + double lng = placesStart[index]['geometry']['location']['lng']; + newStartPointLocation = LatLng(lat, lng); + update(); + } + } + + void convertHintTextDestinationNewPlaces(int index) { + if (placesDestination.isEmpty) { + hintTextDestinationPoint = 'Search for your destination'.tr; + update(); + } else { + hintTextDestinationPoint = placesDestination[index]['name']; + double lat = placesDestination[index]['geometry']['location']['lat']; + double lng = placesDestination[index]['geometry']['location']['lng']; + newMyLocation = LatLng(lat, lng); + + update(); + } + } + // final mainBottomMenuMap = GlobalKey(); void changeBottomSheetShown() { isBottomSheetShown = !isBottomSheetShown; @@ -261,8 +305,15 @@ class MapPassengerController extends GetxController { timerToPassengerFromDriverAfterApplied?.cancel(); } - void clearPlaces() { - places = []; + void clearPlacesDestination() { + placesDestination = []; + hintTextDestinationPoint = 'Search for your destination'.tr; + update(); + } + + void clearPlacesStart() { + placesStart = []; + hintTextStartPoint = 'Search for your Start point'.tr; update(); } @@ -558,7 +609,7 @@ class MapPassengerController extends GetxController { } restCounter() { - clearPlaces(); + clearPlacesDestination(); clearPolyline(); data = []; rideConfirm = false; @@ -568,7 +619,7 @@ class MapPassengerController extends GetxController { } Future cancelRideAfterRejectFromAll() async { - clearPlaces(); + clearPlacesDestination(); clearPolyline(); data = []; await CRUD().post(link: AppLink.updateDriverOrder, payload: { @@ -591,7 +642,7 @@ class MapPassengerController extends GetxController { print("rideConfirm=$rideConfirm"); if (rideConfirm == false) { - clearPlaces(); + clearPlacesDestination(); clearPolyline(); data = []; changeCancelRidePageShow(); @@ -604,7 +655,7 @@ class MapPassengerController extends GetxController { timeToPassengerFromDriverAfterApplied = 0; update(); } else { - clearPlaces(); + clearPlacesDestination(); clearPolyline(); data = []; await CRUD().post(link: AppLink.updateDriverOrder, payload: { @@ -634,15 +685,24 @@ class MapPassengerController extends GetxController { void changeMainBottomMenuMap() { isMainBottomMenuMap = !isMainBottomMenuMap; mainBottomMenuMap = - isMainBottomMenuMap == true ? Get.height * .2 : Get.height * .66; + isMainBottomMenuMap == true ? Get.height * .2 : Get.height * .7; if (heightMenuBool == true) { getDrawerMenu(); } update(); } - changeHeight() { - if (places.isEmpty) { + changeHeightPlaces() { + if (placesDestination.isEmpty) { + height = 0; + update(); + } + height = 150; + update(); + } + + changeHeightStartPlaces() { + if (placesStart.isEmpty) { height = 0; update(); } @@ -659,12 +719,24 @@ class MapPassengerController extends GetxController { Future getPlaces() async { var url = // '${AppLink.googleMapsLink}place/nearbysearch/json?location=${mylocation.longitude}&radius=25000&language=ar&keyword=&key=${placeController.text}${AK.mapAPIKEY}'; - '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${placeController.text}&location=${myLocation.latitude},${myLocation.longitude}&radius=50000&language=en&key=${AK.mapAPIKEY.toString()}'; + '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${placeDestinationController.text}&location=${myLocation.latitude},${myLocation.longitude}&radius=50000&language=en&key=${AK.mapAPIKEY.toString()}'; var response = await CRUD().getGoogleApi(link: url, payload: {}); - places = response['results']; - print(places); + placesDestination = response['results']; + print(placesDestination); + update(); + } + + Future getPlacesStart() async { + var url = + // '${AppLink.googleMapsLink}place/nearbysearch/json?location=${mylocation.longitude}&radius=25000&language=ar&keyword=&key=${placeController.text}${AK.mapAPIKEY}'; + '${AppLink.googleMapsLink}place/nearbysearch/json?keyword=${placeStartController.text}&location=${myLocation.latitude},${myLocation.longitude}&radius=50000&language=en&key=${AK.mapAPIKEY.toString()}'; + + var response = await CRUD().getGoogleApi(link: url, payload: {}); + + placesStart = response['results']; + print(placesStart); update(); } @@ -693,9 +765,21 @@ class MapPassengerController extends GetxController { }); } + void addCustomTripIcon() { + ImageConfiguration config = ImageConfiguration( + size: Size(Get.width * .6, Get.height * .6), + ); + BitmapDescriptor.fromAssetImage(config, 'assets/images/picker.png') + .then((value) { + tripIcon = value; + update(); + }); + } + void addCustomCarIcon() { ImageConfiguration config = ImageConfiguration( size: Size(Get.width * .6, Get.height * .6), + // size: Size(20, 20), // scale: 1.0, ); BitmapDescriptor.fromAssetImage(config, 'assets/images/car.png') @@ -742,10 +826,10 @@ class MapPassengerController extends GetxController { : null)!; // Print location details - print('Accuracy: ${_locationData.accuracy}'); - print('Latitude: ${_locationData.latitude}'); - print('Longitude: ${_locationData.longitude}'); - print('Time: ${_locationData.time}'); + // print('Accuracy: ${_locationData.accuracy}'); + // print('Latitude: ${_locationData.latitude}'); + // print('Longitude: ${_locationData.longitude}'); + // print('Time: ${_locationData.time}'); isLoading = false; update(); } @@ -926,19 +1010,23 @@ class MapPassengerController extends GetxController { getMap(String origin, destination) async { var origin1 = fromString(origin); var destination1 = fromString(destination); - isLoading = false; + isLoading = true; + update(); myDestination = destination1; myLocation = origin1; - update(); + await getCarsLocationByPassenger(); // print(carsLocationByPassenger); - + isLoading = false; + update(); var url = ('${AppLink.googleMapsLink}directions/json?&language=en&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); + isLoading = false; + update(); durationToRide = data[0]['duration']['value']; final points = decodePolyline(response["routes"][0]["overview_polyline"]["points"]); @@ -1137,83 +1225,6 @@ class MapPassengerController extends GetxController { // buttomSheetMapPage(); changeBottomSheetShown(); } - - // Get.bottomSheet( - // Container( - // height: 130, - // decoration: const BoxDecoration( - // color: AppColor.secondaryColor, - // borderRadius: BorderRadius.only( - // topLeft: Radius.circular(15), topRight: Radius.circular(15))), - // child: data.isEmpty - // ? Center( - // child: Text( - // 'Where are you want to go..', - // style: AppStyle.title, - // )) - // : Center( - // child: Column( - // children: [ - // Row( - // mainAxisAlignment: MainAxisAlignment.spaceAround, - // children: [ - // Text( - // 'distance is ${data[0]['distance']['text']}', - // style: AppStyle.title, - // ), - // Text( - // 'duration is ${data[0]['duration']['text']}', - // style: AppStyle.title, - // ), - // ], - // ), - // Row( - // mainAxisAlignment: MainAxisAlignment.spaceAround, - // children: [ - // Text( - // 'Cost for .21/km ${cost.toStringAsFixed(2)} ', - // style: AppStyle.title, - // ), - // Text( - // 'costDuration ${averageDuration.toStringAsFixed(2)} is ${costDuration.toStringAsFixed(2)} ', - // style: AppStyle.title, - // ), - // ], - // ), - // Row( - // mainAxisAlignment: MainAxisAlignment.spaceAround, - // children: [ - // Text( - // 'Cost for passenger ${totalPassenger.toStringAsFixed(2)} ', - // style: AppStyle.title, - // ), - // Text( - // 'totaME ${totaME.toStringAsFixed(2)} ', - // style: AppStyle.title, - // ), - // ], - // ), - // Text( - // 'totalDriver ${totalDriver.toStringAsFixed(2)}', - // style: AppStyle.title, - // ), - // ], - // ), - // ), - // ), - // elevation: 6, - // enableDrag: true, - // isScrollControlled: true, - // isDismissible: true, - // useRootNavigator: true, - // backgroundColor: Colors.transparent, - // barrierColor: AppColor.accentColor.withOpacity(.4), - // persistent: true, - // shape: ShapeBorder.lerp( - // RoundedRectangleBorder(borderRadius: BorderRadius.circular(12)), - // RoundedRectangleBorder(borderRadius: BorderRadius.circular(6)), - // 0.5), - // ); } addToken() async { @@ -1234,6 +1245,7 @@ class MapPassengerController extends GetxController { getNearestDriverByPassengerLocation(); addCustomPicker(); addCustomCarIcon(); + addCustomTripIcon(); startMarkerReloading(); cardNumber = await SecureStorage().readData(BoxName.cardNumber); super.onInit(); diff --git a/lib/main.dart b/lib/main.dart index 4ac95ca..42afa88 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -53,11 +53,11 @@ void main() async { ]; // cameras = await availableCameras(); await Future.wait(initializationTasks); + SystemChrome.setPreferredOrientations([ + DeviceOrientation.portraitUp, + DeviceOrientation.portraitDown, + ]); } - SystemChrome.setPreferredOrientations([ - DeviceOrientation.portraitUp, - DeviceOrientation.portraitDown, - ]); runApp(const MyApp()); } diff --git a/lib/models/model/admin/monthly_ride.dart b/lib/models/model/admin/monthly_ride.dart index 61b345c..df4d600 100644 --- a/lib/models/model/admin/monthly_ride.dart +++ b/lib/models/model/admin/monthly_ride.dart @@ -1,17 +1,18 @@ -class RideData { +class MonthlyDataModel { final int year; final int month; final int day; final int ridesCount; - RideData({ + MonthlyDataModel({ required this.year, required this.month, required this.day, required this.ridesCount, }); - factory RideData.fromJson(Map json) => RideData( + factory MonthlyDataModel.fromJson(Map json) => + MonthlyDataModel( year: json['year'] as int, month: json['month'] as int, day: json['day'] as int, diff --git a/lib/views/admin/captain/captain.dart b/lib/views/admin/captain/captain.dart index 6653772..25b67d4 100644 --- a/lib/views/admin/captain/captain.dart +++ b/lib/views/admin/captain/captain.dart @@ -9,7 +9,6 @@ import '../../../controller/admin/captain_admin_controller.dart'; import '../../widgets/elevated_btn.dart'; import '../../widgets/my_textField.dart'; import '../../widgets/mycircular.dart'; -import '../passenger/form_passenger.dart'; import 'form_captain.dart'; class Captain extends StatelessWidget { diff --git a/lib/views/admin/rides/rides.dart b/lib/views/admin/rides/rides.dart index 0368152..985f033 100644 --- a/lib/views/admin/rides/rides.dart +++ b/lib/views/admin/rides/rides.dart @@ -1,10 +1,10 @@ +import 'package:fl_chart/fl_chart.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/constant/colors.dart'; import 'package:ride/constant/style.dart'; import 'package:ride/views/widgets/my_scafold.dart'; import 'package:ride/views/widgets/mycircular.dart'; -import 'package:syncfusion_flutter_charts/charts.dart'; import '../../../controller/admin/ride_admin_controller.dart'; @@ -19,136 +19,136 @@ class Rides extends StatelessWidget { ? const Center(child: MyCircularProgressIndicator()) : Column( children: [ + SizedBox( + height: Get.height * .4, + child: LineChart( + duration: const Duration(milliseconds: 150), + curve: Curves.ease, + LineChartData( + lineBarsData: [ + LineChartBarData( + spots: rideAdminController.chartData, + isCurved: true, + color: Colors.deepPurpleAccent, // Custom color + barWidth: 3, // Thinner line + dotData: const FlDotData( + show: true), // Show dots on each point + belowBarData: BarAreaData( + // Add gradient fill below the line + show: true, + color: AppColor.deepPurpleAccent, + ), + isStrokeJoinRound: true, + shadow: const BoxShadow( + color: AppColor.yellowColor, + blurRadius: 4, + offset: Offset(2, 2), + ), + ), + ], + showingTooltipIndicators: const [], + titlesData: FlTitlesData( + show: true, + topTitles: AxisTitles( + axisNameWidget: Text( + 'Days', + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, showTitles: true)), + bottomTitles: AxisTitles( + axisNameWidget: Text( + 'Total Trips on month'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, showTitles: true)), + leftTitles: AxisTitles( + axisNameWidget: Text( + 'Counts of Trips on month'.tr, + style: AppStyle.title, + ), + axisNameSize: 30, + sideTitles: const SideTitles( + reservedSize: 30, showTitles: true)), + ), + gridData: const FlGridData( + show: true, + ), + borderData: FlBorderData( + show: true, + border: const Border( + bottom: BorderSide(color: AppColor.accentColor), + left: BorderSide(color: AppColor.accentColor), + ), + ), + ), + ), + ), // SizedBox( // height: Get.height * .4, - // child: LineChart( - // duration: const Duration(milliseconds: 150), - // curve: Curves.ease, - // LineChartData( - // lineBarsData: [ - // LineChartBarData( - // spots: rideAdminController.chartData, - // isCurved: true, - // color: Colors.deepPurpleAccent, // Custom color - // barWidth: 3, // Thinner line - // dotData: const FlDotData( - // show: true), // Show dots on each point - // belowBarData: BarAreaData( - // // Add gradient fill below the line - // show: true, - // color: AppColor.deepPurpleAccent, + // child: PieChart( + // PieChartData( + // sectionsSpace: 4, // Adjust spacing between sections + // centerSpaceRadius: + // 40, // Adjust radius of center space + // sections: [ + // for (final rideData in rideAdminController.rideData) + // PieChartSectionData( + // value: rideData.ridesCount.toDouble(), + // title: '${rideData.day}', showTitle: true, + // titleStyle: + // AppStyle.subtitle, // Display day as title + // radius: 60, // Adjust radius of each section + // color: + // AppColor.deepPurpleAccent, // Custom color // ), - // isStrokeJoinRound: true, - // shadow: const BoxShadow( - // color: AppColor.yellowColor, - // blurRadius: 4, - // offset: Offset(2, 2), - // ), - // ), // ], - // showingTooltipIndicators: const [], - // titlesData: FlTitlesData( - // show: true, - // topTitles: AxisTitles( - // axisNameWidget: Text( - // 'Days', - // style: AppStyle.title, - // ), - // axisNameSize: 30, - // sideTitles: const SideTitles( - // reservedSize: 30, showTitles: true)), - // bottomTitles: AxisTitles( - // axisNameWidget: Text( - // 'Total Trips on month'.tr, - // style: AppStyle.title, - // ), - // axisNameSize: 30, - // sideTitles: const SideTitles( - // reservedSize: 30, showTitles: true)), - // leftTitles: AxisTitles( - // axisNameWidget: Text( - // 'Counts of Trips on month'.tr, - // style: AppStyle.title, - // ), - // axisNameSize: 30, - // sideTitles: const SideTitles( - // reservedSize: 30, showTitles: true)), - // ), - // gridData: const FlGridData( - // show: true, - // ), - // borderData: FlBorderData( - // show: true, - // border: const Border( - // bottom: BorderSide(color: AppColor.accentColor), - // left: BorderSide(color: AppColor.accentColor), - // ), - // ), // ), // ), // ), - // // SizedBox( - // // height: Get.height * .4, - // // child: PieChart( - // // PieChartData( - // // sectionsSpace: 4, // Adjust spacing between sections - // // centerSpaceRadius: - // // 40, // Adjust radius of center space - // // sections: [ - // // for (final rideData in rideAdminController.rideData) - // // PieChartSectionData( - // // value: rideData.ridesCount.toDouble(), - // // title: '${rideData.day}', showTitle: true, - // // titleStyle: - // // AppStyle.subtitle, // Display day as title - // // radius: 60, // Adjust radius of each section - // // color: - // // AppColor.deepPurpleAccent, // Custom color - // // ), - // // ], - // // ), - // // ), - // // ), - SizedBox( - // height: 400, - child: SfCartesianChart( - legend: const Legend( - isVisible: true, - position: LegendPosition.bottom, - overflowMode: LegendItemOverflowMode.wrap, - textStyle: TextStyle( - color: Colors.white, - fontSize: 12, - fontWeight: FontWeight.bold, - ), - ), - borderWidth: 2, - borderColor: AppColor.blueColor, - plotAreaBorderColor: AppColor.deepPurpleAccent, - enableAxisAnimation: true, - primaryXAxis: CategoryAxis( - borderColor: AppColor.accentColor, borderWidth: 2, - title: AxisTitle( - text: 'Total Trips on month'.tr, - textStyle: AppStyle.title, - ), - // labelRotation: 45, - majorGridLines: const MajorGridLines(width: 0), - ), - primaryYAxis: const NumericAxis(isVisible: false), - series: >[ - LineSeries( - dataSource: rideAdminController.chartDatasync, - xValueMapper: (ChartDataS data, _) => '${data.day}', - yValueMapper: (ChartDataS data, _) => - data.ridesCount, - dataLabelSettings: - const DataLabelSettings(isVisible: true), - ), - ], - ), - ), + // SizedBox( + // // height: 400, + // child: SfCartesianChart( + // legend: const Legend( + // isVisible: true, + // position: LegendPosition.bottom, + // overflowMode: LegendItemOverflowMode.wrap, + // textStyle: TextStyle( + // color: Colors.white, + // fontSize: 12, + // fontWeight: FontWeight.bold, + // ), + // ), + // borderWidth: 2, + // borderColor: AppColor.blueColor, + // plotAreaBorderColor: AppColor.deepPurpleAccent, + // enableAxisAnimation: true, + // primaryXAxis: CategoryAxis( + // borderColor: AppColor.accentColor, borderWidth: 2, + // title: AxisTitle( + // text: 'Total Trips on month'.tr, + // textStyle: AppStyle.title, + // ), + // // labelRotation: 45, + // majorGridLines: const MajorGridLines(width: 0), + // ), + // primaryYAxis: const NumericAxis(isVisible: false), + // series: >[ + // LineSeries( + // dataSource: rideAdminController.chartDatasync, + // xValueMapper: (ChartDataS data, _) => '${data.day}', + // yValueMapper: (ChartDataS data, _) => + // data.ridesCount, + // dataLabelSettings: + // const DataLabelSettings(isVisible: true), + // ), + // ], + // ), + // ), const SizedBox( height: 20, diff --git a/lib/views/admin/wallet/wallet.dart b/lib/views/admin/wallet/wallet.dart index a1f0f04..2c49506 100644 --- a/lib/views/admin/wallet/wallet.dart +++ b/lib/views/admin/wallet/wallet.dart @@ -2,9 +2,12 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:ride/views/widgets/my_scafold.dart'; -class Wallet extends StatelessWidget { - const Wallet({super.key}); +import '../../../controller/admin/wallet_admin_controller.dart'; +class Wallet extends StatelessWidget { + Wallet({super.key}); + WalletAdminController walletAdminController = + Get.put(WalletAdminController()); @override Widget build(BuildContext context) { return MyScafolld(title: 'Wallet'.tr, body: [], isleading: true); diff --git a/lib/views/home/map_widget.dart/form_search_places.dart b/lib/views/home/map_widget.dart/form_search_places.dart index fc685d9..3b00d9c 100644 --- a/lib/views/home/map_widget.dart/form_search_places.dart +++ b/lib/views/home/map_widget.dart/form_search_places.dart @@ -29,13 +29,13 @@ GetBuilder formSearchPlaces() { width: 2, )), suffixIcon: const Icon(Icons.search), - hintText: 'Search for your destination'.tr, + hintText: controller.hintTextDestinationPoint, hintStyle: AppStyle.title, hintMaxLines: 1, prefixIcon: IconButton( onPressed: () { - controller.placeController.clear(); - controller.clearPlaces(); + controller.placeDestinationController.clear(); + controller.clearPlacesDestination(); }, icon: Icon( Icons.clear, @@ -43,18 +43,19 @@ GetBuilder formSearchPlaces() { ), ), ), - controller: controller.placeController, + controller: controller.placeDestinationController, onChanged: (value) { - if (controller.placeController.text.length > 5) { + if (controller.placeDestinationController.text.length > + 5) { controller.getPlaces(); - controller.changeHeight(); + controller.changeHeightPlaces(); } }, // onEditingComplete: () => controller.changeHeight(), ), ), ), - controller.places.isEmpty + controller.placesDestination.isEmpty ? InkWell( onTap: () { controller.changeMainBottomMenuMap(); @@ -68,37 +69,25 @@ GetBuilder formSearchPlaces() { ) : const SizedBox(), Container( - height: controller.places.isNotEmpty ? controller.height : 0, + height: controller.placesDestination.isNotEmpty + ? controller.height + : 0, color: AppColor.secondaryColor, child: ListView.builder( - itemCount: controller.places.length, + itemCount: controller.placesDestination.length, itemBuilder: (BuildContext context, int index) { - var res = controller.places[index]; + var res = controller.placesDestination[index]; return InkWell( - onTap: () { - controller.changeHeight(); - Get.defaultDialog( - title: - '${'Are You sure to ride to'.tr} ${res['name']}', - middleText: '', - titleStyle: AppStyle.title, - confirm: MyElevatedButton( - title: 'Confirm'.tr, - onPressed: () async { - controller.clearPolyline(); - controller.data = []; - await controller.getMap( - '${controller.myLocation.latitude.toString()},${controller.myLocation.longitude.toString()}', - "${res['geometry']['location']['lat']},${res['geometry']['location']['lng']}"); - controller.places = []; - controller.placeController.clear(); + onTap: () async { + controller.changeHeightPlaces(); - controller.showBottomSheet1(); - Get.back(); - controller.showBottomSheet1(); - controller.changeMainBottomMenuMap(); - }), - ); + controller.changeHeightPlaces(); + + controller.myLocation = controller.newMyLocation; + controller.convertHintTextDestinationNewPlaces(index); + + controller.placesDestination = []; + controller.placeDestinationController.clear(); }, child: Padding( padding: const EdgeInsets.symmetric(horizontal: 10), diff --git a/lib/views/home/map_widget.dart/form_search_start.dart b/lib/views/home/map_widget.dart/form_search_start.dart new file mode 100644 index 0000000..1d2bf64 --- /dev/null +++ b/lib/views/home/map_widget.dart/form_search_start.dart @@ -0,0 +1,165 @@ +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:ride/constant/table_names.dart'; +import 'package:ride/views/widgets/my_textField.dart'; + +import '../../../constant/colors.dart'; +import '../../../constant/style.dart'; +import '../../../controller/functions/toast.dart'; +import '../../../controller/home/map_passenger_controller.dart'; +import '../../../main.dart'; + +GetBuilder formSearchPlacesStart() { + // DbSql sql = DbSql.instance; + return GetBuilder( + builder: (controller) => Column( + children: [ + Padding( + padding: const EdgeInsets.all(16), + child: Container( + decoration: + const BoxDecoration(color: AppColor.secondaryColor), + child: TextField( + decoration: InputDecoration( + border: const OutlineInputBorder( + borderRadius: BorderRadius.only(), + gapPadding: 4, + borderSide: BorderSide( + color: AppColor.redColor, + width: 2, + )), + suffixIcon: const Icon(Icons.search), + hintText: controller.hintTextStartPoint, + hintStyle: AppStyle.title, + hintMaxLines: 1, + prefixIcon: IconButton( + onPressed: () { + controller.placeStartController.clear(); + controller.clearPlacesStart(); + }, + icon: Icon( + Icons.clear, + color: Colors.red[300], + ), + ), + ), + controller: controller.placeStartController, + onChanged: (value) { + if (controller.placeStartController.text.length > 5) { + controller.getPlacesStart(); + controller.changeHeightStartPlaces(); + } + }, + // onEditingComplete: () => controller.changeHeight(), + ), + ), + ), + controller.placesDestination.isEmpty + ? InkWell( + onTap: () { + controller.startLocationFromMap = true; + controller.changeMainBottomMenuMap(); + controller.changePickerShown(); + }, + child: Text( + 'Choose from Map'.tr, + style: + AppStyle.title.copyWith(color: AppColor.blueColor), + ), + ) + : const SizedBox(), + Container( + height: + controller.placesStart.isNotEmpty ? controller.height : 0, + color: AppColor.secondaryColor, + child: ListView.builder( + itemCount: controller.placesStart.length, + itemBuilder: (BuildContext context, int index) { + var res = controller.placesStart[index]; + return InkWell( + onTap: () async { + controller.changeHeightPlaces(); + // if (controller.currentLocationToFormPlaces == true) { + // controller.newStartPointLocation = + // controller.myLocation; + // } else { + // controller.myLocation = + // controller.newStartPointLocation; + // } + + controller.convertHintTextStartNewPlaces(index); + controller.currentLocationString = res['name']; + controller.placesStart = []; + controller.placeStartController.clear(); + }, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 10), + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Column( + children: [ + Image.network( + res['icon'], + width: 20, + ), + IconButton( + onPressed: () async { + await sql.insertData({ + 'latitude': res['geometry'] + ['location']['lat'], + 'longitude': res['geometry'] + ['location']['lng'], + 'name': res['name'].toString(), + 'rate': res['rating'].toString(), + }, TableName.placesFavorite); + Toast.show( + context, + '${res['name']} ${'Saved Sucssefully'.tr}', + AppColor.primaryColor); + }, + icon: const Icon(Icons.favorite_border), + ), + ], + ), + Column( + children: [ + Text( + res['name'].toString(), + style: AppStyle.title, + ), + Text( + res['vicinity'].toString(), + style: AppStyle.subtitle, + ), + ], + ), + Column( + children: [ + Text( + 'rate', + style: AppStyle.subtitle, + ), + Text( + res['rating'].toString(), + style: AppStyle.subtitle, + ), + ], + ), + ], + ), + const Divider( + thickness: 1, + ) + ], + ), + ), + ); + }, + ), + ) + ], + )); +} diff --git a/lib/views/home/map_widget.dart/google_map_passenger_widget.dart b/lib/views/home/map_widget.dart/google_map_passenger_widget.dart index 8213601..e05f699 100644 --- a/lib/views/home/map_widget.dart/google_map_passenger_widget.dart +++ b/lib/views/home/map_widget.dart/google_map_passenger_widget.dart @@ -149,9 +149,24 @@ class GoogleMapPassengerWidget extends StatelessWidget { markerId: MarkerId(carLocation.toString())), Marker( markerId: MarkerId('MyLocation'.tr), - position: controller.myLocation, + position: controller.newStartPointLocation, draggable: true, - icon: controller.markerIcon, + icon: controller.tripIcon, + infoWindow: const InfoWindow( + title: 'Time', + // snippet: controller.durationFromDriverToPassenger + // .toString(), + ), + onDragEnd: (value) { + print(value); + }, + // infoWindow: InfoWindow(title: 'my location'.tr), + ), + Marker( + markerId: MarkerId('Destination'.tr), + position: controller.newMyLocation, + draggable: true, + icon: controller.tripIcon, infoWindow: const InfoWindow( title: 'Time', // snippet: controller.durationFromDriverToPassenger @@ -230,7 +245,11 @@ class GoogleMapPassengerWidget extends StatelessWidget { buildingsEnabled: true, mapToolbarEnabled: true, onCameraMove: (position) { + if (controller.startLocationFromMap == true) { + controller.newStartPointLocation = position.target; + } controller.newMyLocation = position.target; + // print('my' + controller.mylocation.toString()); // print('new' + controller.newMylocation.toString()); }, diff --git a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart index 53e4a27..8cc2fbc 100644 --- a/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart +++ b/lib/views/home/map_widget.dart/main_bottom_Menu_map.dart @@ -10,6 +10,7 @@ import 'package:ride/views/widgets/elevated_btn.dart'; import '../../../constant/colors.dart'; import '../../../constant/table_names.dart'; import '../../../controller/functions/toast.dart'; +import 'form_search_start.dart'; class MainBottomMenuMap extends StatelessWidget { const MainBottomMenuMap({super.key}); @@ -37,185 +38,245 @@ class MainBottomMenuMap extends StatelessWidget { topLeft: Radius.circular(15), topRight: Radius.circular(15), )), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.all(15), - child: InkWell( - onTap: () => controller.changeMainBottomMenuMap(), - child: Container( - width: Get.width * .8, - height: Get.height * .1, - decoration: const BoxDecoration( - boxShadow: [ - BoxShadow( - color: AppColor.accentColor, - blurRadius: 5, - offset: Offset(2, 4)), - BoxShadow( - color: AppColor.accentColor, - blurRadius: 5, - offset: Offset(-2, -2)) - ], - color: AppColor.secondaryColor, - borderRadius: BorderRadius.all( - Radius.elliptical(15, 30), + child: SingleChildScrollView( + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(15), + child: InkWell( + onTap: () => controller.changeMainBottomMenuMap(), + child: Container( + width: Get.width * .8, + height: Get.height * .1, + decoration: const BoxDecoration( + boxShadow: [ + BoxShadow( + color: AppColor.accentColor, + blurRadius: 5, + offset: Offset(2, 4)), + BoxShadow( + color: AppColor.accentColor, + blurRadius: 5, + offset: Offset(-2, -2)) + ], + color: AppColor.secondaryColor, + borderRadius: BorderRadius.all( + Radius.elliptical(15, 30), + ), ), - ), - child: DefaultTextStyle( - style: AppStyle.title, - child: Center( - child: controller.isPickerShown - ? TextButton( - onPressed: () async { - controller.clearPolyline(); - controller.data = []; - await controller.getMap( - '${controller.myLocation.latitude},${controller.myLocation.longitude}', - '${controller.newMyLocation.latitude},${controller.newMyLocation.longitude}', - ); - controller.places = []; - controller.placeController.clear(); + child: DefaultTextStyle( + style: AppStyle.title, + child: Center( + child: controller.isPickerShown + ? TextButton( + onPressed: () async { + controller.clearPolyline(); + controller.data = []; + if (controller + .startLocationFromMap == + true) { + controller.newMyLocation = + controller + .newStartPointLocation; + controller.startLocationFromMap = + false; + controller.isPickerShown = false; + print(controller.myLocation); + print(controller + .newStartPointLocation); + } else { + controller.newMyLocation = + controller.newMyLocation; + controller.isPickerShown = false; + print(controller.myLocation); + print(controller.newMyLocation); + } - controller.showBottomSheet1(); - Get.back(); - controller.showBottomSheet1(); - // controller.changeMainBottomMenuMap(); - }, - child: Row( + // await controller.getMap( + // '${controller.myLocation.latitude},${controller.myLocation.longitude}', + // '${controller.newMyLocation.latitude},${controller.newMyLocation.longitude}', + // ); + controller.placesDestination = []; + controller + .placeDestinationController + .clear(); + + controller.showBottomSheet1(); + Get.back(); + controller.showBottomSheet1(); + controller + .changeMainBottomMenuMap(); + }, + child: Row( + children: [ + IconButton( + onPressed: () { + controller + .changeMainBottomMenuMap(); + }, + icon: controller + .isMainBottomMenuMap + ? const Icon( + Icons + .arrow_circle_up_rounded, + size: 35, + ) + : const Icon( + Icons + .arrow_circle_down_rounded, + size: 35, + ), + ), + Text( + "Click here point".tr, + style: AppStyle.title, + ), + ], + ), + ) + : Column( + mainAxisAlignment: + MainAxisAlignment.center, children: [ - IconButton( - onPressed: () { - controller - .changeMainBottomMenuMap(); - }, - icon: - controller.isMainBottomMenuMap - ? const Icon( - Icons - .arrow_circle_up_rounded, - size: 35, - ) - : const Icon( - Icons - .arrow_circle_down_rounded, - size: 35, + SizedBox( + height: 30, + child: Row( + children: [ + IconButton( + onPressed: () { + controller + .changeMainBottomMenuMap(); + }, + icon: controller + .isMainBottomMenuMap + ? const Icon( + Icons + .arrow_circle_up_rounded, + size: 35, + ) + : const Icon( + Icons + .arrow_circle_down_rounded, + size: 35, + ), + ), + Text( + '${'Where to'.tr} ${box.read(BoxName.name)}'), + ], + )), + Row( + mainAxisAlignment: + MainAxisAlignment.center, + children: [ + const SizedBox( + width: 10, + ), + controller.noCarString == false + ? Text( + 'Nearest Car for you about ' + .tr) + : Container( + decoration: + BoxDecoration( + borderRadius: + BorderRadius + .circular(12), + color: + AppColor.redColor, ), - ), - Text( - "Click here to go to this location" - .tr, - style: AppStyle.title, - ), + child: Padding( + padding: + const EdgeInsets + .all(6), + child: Text( + 'No Car in your site. Sorry!' + .tr, + style: AppStyle + .title + .copyWith( + color: AppColor + .secondaryColor), + ), + ), + ), + controller.noCarString == false + ? Container( + decoration: BoxDecoration( + border: Border.all( + color: AppColor + .redColor, + width: 3)), + child: Padding( + padding: + const EdgeInsets + .all(4), + child: Text((controller + .nearestCar != + null + ? controller + .durationByPassenger + .toString() + : 'N/A')), + ), + ) + : const SizedBox(), + ], + ) ], ), - ) - : Column( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - SizedBox( - height: 30, - child: Row( - children: [ - IconButton( - onPressed: () { - controller - .changeMainBottomMenuMap(); - }, - icon: controller - .isMainBottomMenuMap - ? const Icon( - Icons - .arrow_circle_up_rounded, - size: 35, - ) - : const Icon( - Icons - .arrow_circle_down_rounded, - size: 35, - ), - ), - Text( - '${'Where to'.tr} ${box.read(BoxName.name)}'), - ], - )), - Row( - mainAxisAlignment: - MainAxisAlignment.center, - children: [ - const SizedBox( - width: 10, - ), - controller.noCarString == false - ? Text( - 'Nearest Car for you about ' - .tr) - : Container( - decoration: BoxDecoration( - borderRadius: - BorderRadius - .circular(12), - color: - AppColor.redColor, - ), - child: Padding( - padding: - const EdgeInsets - .all(6), - child: Text( - 'No Car in your site. Sorry!' - .tr, - style: AppStyle.title - .copyWith( - color: AppColor - .secondaryColor), - ), - ), - ), - controller.noCarString == false - ? Container( - decoration: BoxDecoration( - border: Border.all( - color: AppColor - .redColor, - width: 3)), - child: Padding( - padding: - const EdgeInsets - .all(4), - child: Text((controller - .nearestCar != - null - ? controller - .durationByPassenger - .toString() - : 'N/A')), - ), - ) - : const SizedBox(), - ], - ) - ], - ), - ), - )), + ), + )), + ), ), - ), - controller.isMainBottomMenuMap - ? const FavioratePlacesDialogu() - : const SizedBox(), - controller.isMainBottomMenuMap - ? const SizedBox() - : Text( - 'From : Current Location'.tr, - style: AppStyle.subtitle, - ), - controller.isMainBottomMenuMap - ? const SizedBox() - : formSearchPlaces() - ], + controller.isMainBottomMenuMap + ? const FavioratePlacesDialogu() + : const SizedBox(), + controller.isMainBottomMenuMap + ? const SizedBox() + : InkWell( + onTap: () async { + controller.getCurrentLocationFormString(); + }, + child: Text( + 'From : ${controller.currentLocationString}'.tr, + style: AppStyle.subtitle, + ), + ), + controller.isMainBottomMenuMap + ? const SizedBox() + : Column( + children: [ + controller.currentLocationToFormPlaces + ? const SizedBox() + : formSearchPlacesStart(), + formSearchPlaces(), + const SizedBox( + height: 30, + ), + MyElevatedButton( + title: 'Go to Ride', + onPressed: () async { + controller.changeMainBottomMenuMap(); + + await controller.getMap( + '${controller.newStartPointLocation.latitude},${controller.newStartPointLocation.longitude}', + '${controller.newMyLocation.latitude},${controller.newMyLocation.longitude}', + ); + controller.currentLocationToFormPlaces = + false; + controller.placesDestination = []; + controller.clearPlacesStart(); + controller.clearPlacesDestination(); + + controller.showBottomSheet1(); + Get.back(); + controller.showBottomSheet1(); + }) + ], + ) + ], + ), ), ), )); @@ -270,13 +331,15 @@ class FavioratePlacesDialogu extends StatelessWidget { children: [ TextButton( onPressed: () async { + Get.back(); + await controller.getLocation(); await controller.getMap( '${controller.myLocation.latitude},${controller.myLocation.longitude}', '${favoritePlaces[index]['latitude']},${favoritePlaces[index]['longitude']}', ); // controller.changePickerShown(); controller.showBottomSheet1(); - Get.back(); + controller.showBottomSheet1(); }, child: Text( diff --git a/lib/views/home/map_widget.dart/picker_animation_container.dart b/lib/views/home/map_widget.dart/picker_animation_container.dart index 4449b55..1f6efc7 100644 --- a/lib/views/home/map_widget.dart/picker_animation_container.dart +++ b/lib/views/home/map_widget.dart/picker_animation_container.dart @@ -56,7 +56,7 @@ class PickerAnimtionContainerFormPlaces extends StatelessWidget { ? InkWell( onTapDown: (details) { controller.changePickerShown(); - controller.changeHeight(); + controller.changeHeightPlaces(); }, child: Container( height: 7, @@ -188,7 +188,7 @@ class PickerAnimtionContainerFormPlaces extends StatelessWidget { ], ), if (controller.isPickerShown && - controller.places.isEmpty) + controller.placesDestination.isEmpty) MyElevatedButton( title: 'Go to this Target'.tr, onPressed: () async { @@ -205,7 +205,7 @@ class PickerAnimtionContainerFormPlaces extends StatelessWidget { }, ), if (controller.isPickerShown && - controller.places.isEmpty) + controller.placesDestination.isEmpty) const SizedBox(), ], ), diff --git a/pubspec.lock b/pubspec.lock index 3ac8e53..2943887 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -361,6 +361,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.2" + equatable: + dependency: transitive + description: + name: equatable + sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + url: "https://pub.dev" + source: hosted + version: "2.0.5" fake_async: dependency: transitive description: @@ -473,6 +481,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.0" + fl_chart: + dependency: "direct main" + description: + name: fl_chart + sha256: fe6fec7d85975a99c73b9515a69a6e291364accfa0e4a5b3ce6de814d74b9a1c + url: "https://pub.dev" + source: hosted + version: "0.66.0" flutter: dependency: "direct main" description: flutter @@ -1565,22 +1581,6 @@ packages: url: "https://pub.dev" source: hosted version: "9.5.0+1" - syncfusion_flutter_charts: - dependency: "direct main" - description: - name: syncfusion_flutter_charts - sha256: "12ed32b889bd4a28cf44b9fa246510e8f2fc798023018a6a915cbd0bffec1517" - url: "https://pub.dev" - source: hosted - version: "24.1.43" - syncfusion_flutter_core: - dependency: transitive - description: - name: syncfusion_flutter_core - sha256: "1b40729aa10a727150a6cc56e532c770f4baded83846fca8700efd908d0f4d0a" - url: "https://pub.dev" - source: hosted - version: "24.1.43" synchronized: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 788fe2a..77f6f1a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -49,7 +49,7 @@ dependencies: envied: ^0.5.2 cached_network_image: ^3.3.0 calendar_builder: ^0.0.6 - syncfusion_flutter_charts: ^24.1.43 + fl_chart: ^0.66.0