import 'package:flutter/material.dart'; import 'package:fl_chart/fl_chart.dart'; import '../../../config/app_colors.dart'; import '../../../models/discoveries.dart'; import '../../../utils/color_extensions.dart'; import '../../../ui/widgets/charts/custom_bar_chart.dart'; class ChartDiscoveries extends CustomBarChart { final DiscoveriesData chartData; ChartDiscoveries({super.key, required this.chartData}); final double chartHeight = 120.0; final double verticalTicksInterval = 10; @override Widget build(BuildContext context) { return Container( height: this.chartHeight, child: LayoutBuilder(builder: (context, constraints) { return getBarChart( barWidth: this.getBarWidth(constraints.maxWidth, this.chartData.data.keys.length), backgroundColor: Theme.of(context).colorScheme.onSurface, ); }), ); } double getMaxCountsValue() { double maxValue = 0; this.chartData.data.keys.forEach((key) { DiscoveriesDataValue? value = this.chartData.data[key]; if (value != null) { double newArtistsCount = value.newArtistsCount.toDouble(); double newTracksCount = value.newTracksCount.toDouble(); if (newArtistsCount > maxValue) { maxValue = newArtistsCount; } if (newTracksCount > maxValue) { maxValue = newTracksCount; } } }); return maxValue; } List<BarChartGroupData> getDataCounts(double barWidth) { List<BarChartGroupData> data = []; final newArtistsBarColor = AppColors.contentColorGreen.darken(20); final newTracksBarColor = AppColors.contentColorBlue.darken(20); this.chartData.data.keys.forEach((key) { DiscoveriesDataValue? value = this.chartData.data[key]; if (value != null) { final int date = DateTime.parse(key).millisecondsSinceEpoch; data.add(this.getBarItem( x: date, values: [ value.newArtistsCount.toDouble(), value.newTracksCount.toDouble(), ], barColors: [ newArtistsBarColor, newTracksBarColor, ], barWidth: barWidth / 2.5, )); } }); return data; } }