Skip to content
Snippets Groups Projects
new_artists.dart 2.07 KiB
Newer Older
  • Learn to ignore specific revisions
  • 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 data) {
    
            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: data.newArtists?.data
    
                        .map((newArtist) => Text(newArtist.artist?.name ?? ''))
                        .toList() ??
                    [],
              ),
            );
          },
        );
      }
    
      Widget update(int count) {
    
        const Widget loading = Text('⏳');
        const Widget done = Text('');
    
    
        late Future<NewArtistsData> future = ScrobblesApi.fetchNewArtists(count);
    
        return BlocBuilder<DataNewArtistsCubit, DataNewArtistsState>(
    
          builder: (BuildContext context, DataNewArtistsState data) {
    
            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;
              },
            );
          },
        );
      }
    }