import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:scrobbles/cubit/data_statistics_recent_cubit.dart'; import 'package:scrobbles/cubit/settings_cubit.dart'; import 'package:scrobbles/models/statistics_recent.dart'; import 'package:scrobbles/network/scrobbles.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/content/statistics_recent.dart'; import 'package:scrobbles/ui/widgets/error.dart'; class CardStatisticsRecent extends StatelessWidget { const CardStatisticsRecent({super.key}); @override Widget build(BuildContext context) { SettingsCubit settings = BlocProvider.of<SettingsCubit>(context); final int daysCount = settings.getStatisticsRecentDaysCount(); return BlocBuilder<DataStatisticsRecentCubit, DataStatisticsRecentState>( builder: (BuildContext context, DataStatisticsRecentState data) { final StatisticsRecentData statistics = data.statisticsRecent ?? StatisticsRecentData.fromJson({}); return CardContent( color: Theme.of(context).colorScheme.primary, title: 'recent_statistics'.tr( namedArgs: { 'daysCount': daysCount.toString(), }, ), loader: update(daysCount), content: ContentStatisticsRecent(statistics: statistics), ); }, ); } Widget update(int daysCount) { final Widget loading = const Text('⏳'); final Widget done = const Text(''); late Future<StatisticsRecentData> future = ScrobblesApi.fetchRecentStatistics(daysCount); return BlocBuilder<DataStatisticsRecentCubit, DataStatisticsRecentState>( builder: (BuildContext context, DataStatisticsRecentState data) { return FutureBuilder<StatisticsRecentData>( future: future, builder: (context, snapshot) { if (snapshot.hasError) { return ShowErrorWidget(message: '${snapshot.error}'); } BlocProvider.of<DataStatisticsRecentCubit>(context).update(snapshot.data); return !snapshot.hasData ? loading : done; }, ); }, ); } }