2024-10-09 01:21:10 +00:00
|
|
|
import 'package:agrilink_vocpro/core/constant/app_theme.dart';
|
2024-10-01 07:44:18 +00:00
|
|
|
import 'package:fl_chart/fl_chart.dart';
|
|
|
|
|
import 'package:flutter/material.dart';
|
2024-10-09 01:21:10 +00:00
|
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
2024-10-01 07:44:18 +00:00
|
|
|
|
|
|
|
|
class GarphicWidget extends StatelessWidget {
|
2024-10-09 01:21:10 +00:00
|
|
|
const GarphicWidget({super.key, required this.gradientColors});
|
|
|
|
|
|
|
|
|
|
final List<Color> gradientColors;
|
2024-10-01 07:44:18 +00:00
|
|
|
|
|
|
|
|
@override
|
|
|
|
|
Widget build(BuildContext context) {
|
2024-10-09 01:21:10 +00:00
|
|
|
return Padding(
|
|
|
|
|
padding: EdgeInsets.all(8.r),
|
|
|
|
|
child: LineChart(
|
|
|
|
|
mainData(),
|
2024-10-01 07:44:18 +00:00
|
|
|
),
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-09 01:21:10 +00:00
|
|
|
Widget bottomTitleWidgets(double value, TitleMeta meta) {
|
|
|
|
|
TextStyle style = AppTheme.labelSmall;
|
|
|
|
|
Widget text;
|
|
|
|
|
switch (value.toInt()) {
|
|
|
|
|
case 1:
|
|
|
|
|
text = Text('01.00', style: style);
|
|
|
|
|
break;
|
|
|
|
|
case 6:
|
|
|
|
|
text = Text('06.00', style: style);
|
|
|
|
|
break;
|
|
|
|
|
case 12:
|
|
|
|
|
text = Text('12.00', style: style);
|
|
|
|
|
break;
|
|
|
|
|
case 18:
|
|
|
|
|
text = Text('18.00', style: style);
|
|
|
|
|
break;
|
|
|
|
|
case 23:
|
|
|
|
|
text = Text('23.00', style: style);
|
|
|
|
|
break;
|
|
|
|
|
default:
|
|
|
|
|
text = Text('', style: style);
|
|
|
|
|
break;
|
|
|
|
|
}
|
2024-10-01 07:44:18 +00:00
|
|
|
|
2024-10-09 01:21:10 +00:00
|
|
|
return SideTitleWidget(
|
|
|
|
|
axisSide: meta.axisSide,
|
|
|
|
|
child: text,
|
|
|
|
|
);
|
2024-10-01 07:44:18 +00:00
|
|
|
}
|
|
|
|
|
|
2024-10-09 01:21:10 +00:00
|
|
|
LineChartData mainData() {
|
|
|
|
|
return LineChartData(
|
|
|
|
|
gridData: const FlGridData(
|
|
|
|
|
show: false,
|
2024-10-01 07:44:18 +00:00
|
|
|
),
|
2024-10-09 01:21:10 +00:00
|
|
|
titlesData: FlTitlesData(
|
|
|
|
|
show: true,
|
|
|
|
|
rightTitles: const AxisTitles(
|
|
|
|
|
sideTitles: SideTitles(showTitles: false),
|
|
|
|
|
),
|
|
|
|
|
topTitles: const AxisTitles(
|
|
|
|
|
sideTitles: SideTitles(showTitles: false),
|
|
|
|
|
),
|
|
|
|
|
bottomTitles: AxisTitles(
|
|
|
|
|
sideTitles: SideTitles(
|
|
|
|
|
showTitles: true,
|
|
|
|
|
reservedSize: 30,
|
|
|
|
|
interval: 1,
|
|
|
|
|
getTitlesWidget: bottomTitleWidgets,
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
leftTitles: const AxisTitles(
|
|
|
|
|
sideTitles: SideTitles(showTitles: false),
|
|
|
|
|
),
|
2024-10-01 07:44:18 +00:00
|
|
|
),
|
2024-10-09 01:21:10 +00:00
|
|
|
borderData: FlBorderData(
|
|
|
|
|
show: false,
|
|
|
|
|
border: Border.all(color: const Color(0xff37434d)),
|
2024-10-01 07:44:18 +00:00
|
|
|
),
|
2024-10-09 01:21:10 +00:00
|
|
|
minX: 0,
|
|
|
|
|
maxX: 24,
|
|
|
|
|
minY: 0,
|
|
|
|
|
maxY: 100,
|
|
|
|
|
lineBarsData: [
|
|
|
|
|
LineChartBarData(
|
|
|
|
|
spots: const [
|
|
|
|
|
FlSpot(0, 38),
|
|
|
|
|
FlSpot(1, 42),
|
|
|
|
|
FlSpot(2, 50),
|
|
|
|
|
FlSpot(3, 53),
|
|
|
|
|
FlSpot(4, 58),
|
|
|
|
|
FlSpot(5, 64),
|
|
|
|
|
FlSpot(7, 49),
|
|
|
|
|
],
|
|
|
|
|
isCurved: true,
|
|
|
|
|
gradient: LinearGradient(
|
|
|
|
|
colors: gradientColors,
|
|
|
|
|
),
|
|
|
|
|
barWidth: 5,
|
|
|
|
|
isStrokeCapRound: true,
|
|
|
|
|
dotData: const FlDotData(
|
|
|
|
|
show: false,
|
|
|
|
|
),
|
|
|
|
|
belowBarData: BarAreaData(
|
|
|
|
|
show: true,
|
|
|
|
|
gradient: LinearGradient(
|
|
|
|
|
colors: gradientColors
|
|
|
|
|
.map((color) => color.withOpacity(0.3))
|
|
|
|
|
.toList()),
|
|
|
|
|
),
|
|
|
|
|
),
|
2024-10-01 07:44:18 +00:00
|
|
|
],
|
|
|
|
|
);
|
2024-10-09 01:21:10 +00:00
|
|
|
}
|
|
|
|
|
}
|