line_chart_card.dart 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import 'package:fitness_dashboard_ui/const/constant.dart';
  2. import 'package:fitness_dashboard_ui/data/line_chart_data.dart';
  3. import 'package:fitness_dashboard_ui/widgets/custom_card_widget.dart';
  4. import 'package:fl_chart/fl_chart.dart';
  5. import 'package:flutter/material.dart';
  6. class LineChartCard extends StatelessWidget {
  7. const LineChartCard({super.key});
  8. @override
  9. Widget build(BuildContext context) {
  10. final data = LineData();
  11. return CustomCard(
  12. child: Column(
  13. crossAxisAlignment: CrossAxisAlignment.start,
  14. children: [
  15. Text(
  16. "Steps Overview",
  17. style: TextStyle(fontSize: 14, fontWeight: FontWeight.w500),
  18. ),
  19. const SizedBox(height: 20),
  20. AspectRatio(
  21. aspectRatio: 16 / 6,
  22. child: LineChart(
  23. LineChartData(
  24. lineTouchData: LineTouchData(
  25. handleBuiltInTouches: true,
  26. ),
  27. gridData: FlGridData(show: false),
  28. titlesData: FlTitlesData(
  29. rightTitles: AxisTitles(
  30. sideTitles: SideTitles(showTitles: false),
  31. ),
  32. topTitles: AxisTitles(
  33. sideTitles: SideTitles(showTitles: false),
  34. ),
  35. bottomTitles: AxisTitles(
  36. sideTitles: SideTitles(
  37. showTitles: true,
  38. getTitlesWidget: (double value, TitleMeta meta) {
  39. return data.bottomTitle[value.toInt()] != null
  40. ? SideTitleWidget(
  41. axisSide: meta.axisSide,
  42. child: Text(
  43. data.bottomTitle[value.toInt()].toString(),
  44. style: TextStyle(
  45. fontSize: 12, color: Colors.grey[400])),
  46. )
  47. : const SizedBox();
  48. },
  49. ),
  50. ),
  51. leftTitles: AxisTitles(
  52. sideTitles: SideTitles(
  53. getTitlesWidget: (double value, TitleMeta meta) {
  54. return data.leftTitle[value.toInt()] != null
  55. ? Text(data.leftTitle[value.toInt()].toString(),
  56. style: TextStyle(
  57. fontSize: 12, color: Colors.grey[400]))
  58. : const SizedBox();
  59. },
  60. showTitles: true,
  61. interval: 1,
  62. reservedSize: 40,
  63. ),
  64. ),
  65. ),
  66. borderData: FlBorderData(show: false),
  67. lineBarsData: [
  68. LineChartBarData(
  69. color: selectionColor,
  70. barWidth: 2.5,
  71. belowBarData: BarAreaData(
  72. gradient: LinearGradient(
  73. begin: Alignment.topCenter,
  74. end: Alignment.bottomCenter,
  75. colors: [
  76. selectionColor.withOpacity(0.5),
  77. Colors.transparent
  78. ],
  79. ),
  80. show: true,
  81. ),
  82. dotData: FlDotData(show: false),
  83. spots: data.spots,
  84. )
  85. ],
  86. minX: 0,
  87. maxX: 120,
  88. maxY: 105,
  89. minY: -5,
  90. ),
  91. ),
  92. ),
  93. ],
  94. ),
  95. );
  96. }
  97. }