smartfarming-mobile/agrilink_vocpro/lib/features/home/widgets/graphic_widget.dart

116 lines
2.8 KiB
Dart
Raw Normal View History

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';
import 'package:flutter_screenutil/flutter_screenutil.dart';
2024-10-01 07:44:18 +00:00
class GarphicWidget extends StatelessWidget {
const GarphicWidget({super.key, required this.gradientColors});
final List<Color> gradientColors;
2024-10-01 07:44:18 +00:00
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(8.r),
child: LineChart(
mainData(),
2024-10-01 07:44:18 +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
return SideTitleWidget(
axisSide: meta.axisSide,
child: text,
);
2024-10-01 07:44:18 +00:00
}
LineChartData mainData() {
return LineChartData(
gridData: const FlGridData(
show: false,
2024-10-01 07:44:18 +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
),
borderData: FlBorderData(
show: false,
border: Border.all(color: const Color(0xff37434d)),
2024-10-01 07:44:18 +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
],
);
}
}