Files
tripz/lib/views/admin/rides/rides.dart
Hamza-Ayed 1b9b0dc9e8 12/28/1
2023-12-28 00:13:14 +03:00

238 lines
12 KiB
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';
class Rides extends StatelessWidget {
Rides({super.key});
RideAdminController rideAdminController = Get.put(RideAdminController());
@override
Widget build(BuildContext context) {
return MyScafolld(title: 'Rides'.tr, isleading: true, body: [
GetBuilder<RideAdminController>(
builder: (rideAdminController) => rideAdminController.isLoading
? 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: 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<ChartDataS, String>>[
LineSeries<ChartDataS, String>(
dataSource: rideAdminController.chartDatasync,
xValueMapper: (ChartDataS data, _) => '${data.day}',
yValueMapper: (ChartDataS data, _) =>
data.ridesCount,
dataLabelSettings:
const DataLabelSettings(isVisible: true),
),
],
),
),
const SizedBox(
height: 20,
),
Card(
elevation: 4,
color: AppColor.deepPurpleAccent,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
'Total Trips on this Month is ${rideAdminController.jsonResponse['message'][0]['current_month_rides_count']}',
style: AppStyle.title,
),
),
),
const SizedBox(
height: 20,
),
Card(
elevation: 4,
color: AppColor.yellowColor,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Text(
'Driver Average Duration: ${rideAdminController.ridesDetails[0]['driver_avg_duration']}',
style: AppStyle.subtitle,
),
Text(
'Number of Drivers: ${rideAdminController.ridesDetails[0]['num_Driver']}',
style: AppStyle.subtitle,
),
Text(
'Total Rides: ${rideAdminController.ridesDetails[0]['total_rides']}',
style: AppStyle.subtitle,
),
Text(
'Ongoing Rides: ${rideAdminController.ridesDetails[0]['ongoing_rides']}',
style: AppStyle.subtitle,
),
Text(
'Completed Rides: ${rideAdminController.ridesDetails[0]['completed_rides']}',
style: AppStyle.subtitle,
),
Text(
'Cancelled Rides: ${rideAdminController.ridesDetails[0]['cancelled_rides']}',
style: AppStyle.subtitle,
),
Text(
'Longest Duration: ${rideAdminController.ridesDetails[0]['longest_duration']}',
style: AppStyle.subtitle,
),
Text(
'Total Distance: ${rideAdminController.ridesDetails[0]['total_distance']} km',
style: AppStyle.subtitle,
),
Text(
'Average Distance: ${rideAdminController.ridesDetails[0]['average_distance']} km',
style: AppStyle.subtitle,
),
Text(
'Longest Distance: ${rideAdminController.ridesDetails[0]['longest_distance']} km',
style: AppStyle.subtitle,
),
Text(
'Total Driver Earnings: \$${rideAdminController.ridesDetails[0]['total_driver_earnings']}',
style: AppStyle.subtitle,
),
Text(
'Total Company Earnings: \$${rideAdminController.ridesDetails[0]['total_company_earnings']}',
style: AppStyle.subtitle,
),
Text(
'Company Percentage: ${rideAdminController.ridesDetails[0]['companyPercent']} %',
style: AppStyle.subtitle,
),
],
),
),
)
],
))
]);
}
}