import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:scrobbles/cubit/data_new_artists_cubit.dart'; import 'package:scrobbles/cubit/settings_cubit.dart'; import 'package:scrobbles/models/new_artists.dart'; import 'package:scrobbles/network/scrobbles.dart'; import 'package:scrobbles/ui/widgets/card_content.dart'; import 'package:scrobbles/ui/widgets/error.dart'; class CardNewArtists extends StatelessWidget { const CardNewArtists({super.key}); @override Widget build(BuildContext context) { SettingsCubit settings = BlocProvider.of<SettingsCubit>(context); final int count = settings.getNewArtistsCount(); return BlocBuilder<DataNewArtistsCubit, DataNewArtistsState>( builder: (BuildContext context, DataNewArtistsState state) { return CardContent( color: Theme.of(context).colorScheme.surface, title: 'new_artists_title'.tr(), loader: update(count), content: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: state.newArtists?.data .map((newArtist) => Text(newArtist.artist?.name ?? '')) .toList() ?? [], ), ); }, ); } Widget update(int count) { final Widget loading = const Text('⏳'); final Widget done = const Text(''); late Future<NewArtistsData> future = ScrobblesApi.fetchNewArtists(count); return BlocBuilder<DataNewArtistsCubit, DataNewArtistsState>( builder: (BuildContext context, DataNewArtistsState state) { return FutureBuilder<NewArtistsData>( future: future, builder: (context, snapshot) { if (snapshot.hasError) { return ShowErrorWidget(message: '${snapshot.error}'); } BlocProvider.of<DataNewArtistsCubit>(context).update(snapshot.data); return !snapshot.hasData ? loading : done; }, ); }, ); } }