import 'dart:convert'; import 'package:fl_chart/fl_chart.dart'; import 'package:get/get.dart'; import 'package:SEFER/constant/box_name.dart'; import 'package:SEFER/constant/links.dart'; import 'package:SEFER/controller/functions/crud.dart'; import 'package:SEFER/main.dart'; import 'package:SEFER/models/model/driver/rides_summary_model.dart'; class DurationController extends GetxController { final data = DurationData; // late AnimationController animationController; late List rideData; late List rideCountData; late List ridePriceDriverData; Map jsonData1 = {}; Map jsonData2 = {}; bool isLoading = false; String totalDurationToday = ''; var chartData; var chartRideCount; var chartRidePriceDriver; List monthlyList = []; @override void onInit() async { super.onInit(); await fetchData(); await fetchRideDriver(); await getStaticDriver(); } getStaticDriver() async { isLoading = true; update(); var res = await CRUD().get( link: AppLink.driverStatistic, payload: {'driverID': box.read(BoxName.driverID)}); if (res == 'failure') { monthlyList = []; print('monthlyList $monthlyList'); isLoading = false; update(); } else { monthlyList = jsonDecode(res)['message']; print(monthlyList); isLoading = false; update(); } } Future fetchData() async { isLoading = true; update(); // Notify the observers about the loading state change var res = await CRUD().get( link: AppLink.getTotalDriverDuration, payload: {'driver_id': box.read(BoxName.driverID)}, ); jsonData1 = jsonDecode(res); var jsonResponse = jsonDecode(res) as Map; isLoading = false; // print(jsonResponse); final List jsonData = jsonResponse['message']; rideData = jsonData.map((item) { return MonthlyDataModel.fromJson(item); }).toList(); final List spots = rideData .map((data) => FlSpot( data.day.toDouble(), data.totalDuration.toDouble(), )) .toList(); chartData = spots; update(); // Notify the observers about the data and loading state change } Future fetchRideDriver() async { isLoading = true; update(); // Notify the observers about the loading state change var res = await CRUD().get( link: AppLink.getRidesDriverByDay, payload: {'driver_id': box.read(BoxName.driverID)}, ); jsonData2 = jsonDecode(res); var jsonResponse = jsonDecode(res) as Map; isLoading = false; // print(jsonResponse); final List jsonData = jsonResponse['message']; rideCountData = jsonData.map((item) { return MonthlyRideModel.fromJson(item); }).toList(); ridePriceDriverData = jsonData.map((item) { return MonthlyPriceDriverModel.fromJson(item); }).toList(); final List spots = rideCountData .map((data) => FlSpot( data.day.toDouble(), data.countRide.toDouble(), )) .toList(); chartRideCount = spots; final List spotsDriverPrices = ridePriceDriverData .map((data) => FlSpot( data.day.toDouble(), data.pricePerDay.toDouble(), )) .toList(); chartRidePriceDriver = spotsDriverPrices; update(); // Notify the observers about the data and loading state change } List parseData(List json) { return json.map((entry) { final Map entryMap = entry; final day = DateTime.parse(entryMap['day']); final totalDuration = _parseDuration(entryMap['total_duration']); return DurationData(day, totalDuration); }).toList(); } Duration _parseDuration(String durationString) { final parts = durationString.split(':'); final hours = int.parse(parts[0]); final minutes = int.parse(parts[1]); final seconds = int.parse(parts[2]); return Duration(hours: hours, minutes: minutes, seconds: seconds); } } class DurationData { final DateTime day; final Duration totalDuration; DurationData(this.day, this.totalDuration); }