Skip to content
Snippets Groups Projects
discoveries.dart 2.37 KiB
Newer Older
import 'dart:convert';

import 'package:easy_localization/easy_localization.dart';
import 'package:flutter/material.dart';
Benoît Harrault's avatar
Benoît Harrault committed
import 'package:flutter_bloc/flutter_bloc.dart';
Benoît Harrault's avatar
Benoît Harrault committed
import 'package:scrobbles/config/settings.dart';
Benoît Harrault's avatar
Benoît Harrault committed
import 'package:scrobbles/cubit/data_discoveries_cubit.dart';
import 'package:scrobbles/models/discoveries.dart';
import 'package:scrobbles/ui/widgets/card_content.dart';
import 'package:scrobbles/ui/widgets/charts/discoveries_artists.dart';
import 'package:scrobbles/ui/widgets/charts/discoveries_tracks.dart';

class CardDiscoveries extends StatelessWidget {
  const CardDiscoveries({super.key});

  @override
  Widget build(BuildContext context) {
Benoît Harrault's avatar
Benoît Harrault committed
    final int daysCount = Settings.discoveriesDaysCount;
Benoît Harrault's avatar
Benoît Harrault committed
    return BlocProvider<DataDiscoveriesCubit>(
      create: (BuildContext context) => DataDiscoveriesCubit(),
      child: BlocBuilder<DataDiscoveriesCubit, DataDiscoveriesState>(
        builder: (BuildContext context, DataDiscoveriesState state) {
          final TextTheme textTheme = Theme.of(context).primaryTextTheme;
Benoît Harrault's avatar
Benoît Harrault committed
          return CardContent(
            color: Theme.of(context).colorScheme.surface,
            title: 'discoveries_title'.tr(
              namedArgs: {
                'daysCount': daysCount.toString(),
              },
            ),
            content: Column(
              mainAxisSize: MainAxisSize.min,
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                Text(
                  'discoveries_artists_title',
                  style: textTheme.titleMedium!.apply(fontWeightDelta: 2),
                ).tr(),
                const SizedBox(height: 8),
                ChartDiscoveriesArtists(
                  chartData:
                      DiscoveriesData.fromJson(jsonDecode(state.discoveries.toString())),
                  isLoading: false,
                ),
                const SizedBox(height: 8),
                Text(
                  'discoveries_tracks_title',
                  style: textTheme.titleMedium!.apply(fontWeightDelta: 2),
                ).tr(),
                const SizedBox(height: 8),
                ChartDiscoveriesTracks(
                  chartData:
                      DiscoveriesData.fromJson(jsonDecode(state.discoveries.toString())),
                  isLoading: false,
                ),
              ],
            ),
          );
        },
      ),