Skip to content
Snippets Groups Projects
discoveries_artists.dart 2.1 KiB
Newer Older
import 'package:flutter/material.dart';
import 'package:fl_chart/fl_chart.dart';

import 'package:scrobbles/config/app_colors.dart';
import 'package:scrobbles/models/discoveries.dart';
import 'package:scrobbles/ui/widgets/abstracts/custom_bar_chart.dart';
import 'package:scrobbles/utils/color_extensions.dart';
class ChartDiscoveriesArtists extends CustomBarChart {
  final DiscoveriesData chartData;

  const ChartDiscoveriesArtists({super.key, required this.chartData});

  @override
  Widget build(BuildContext context) {
    if (this.chartData.data.keys.length == 0) {
      return SizedBox(
        height: this.chartHeight,
      );
    }

    return Container(
      height: this.chartHeight,
      child: LayoutBuilder(
        builder: (context, constraints) {
          final double maxWidth = constraints.maxWidth;
          final int barsCount = this.chartData.data.keys.length;
          return getBarChart(
            barWidth: this.getBarWidth(maxWidth, barsCount),
            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();

        if (newArtistsCount > maxValue) {
          maxValue = newArtistsCount;
        }
      }
    });

    return maxValue;
  }

  List<BarChartGroupData> getDataCounts(double barWidth) {
    List<BarChartGroupData> data = [];

    final newArtistsBarColor = AppColors.contentColorGreen.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(),
          ],
          barColors: [
            newArtistsBarColor,
          ],
          barWidth: barWidth,