Skip to content
Snippets Groups Projects
new_tracks.dart 2.09 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_tracks_cubit.dart';
    import 'package:scrobbles/cubit/settings_cubit.dart';
    import 'package:scrobbles/models/new_tracks.dart';
    import 'package:scrobbles/network/scrobbles.dart';
    import 'package:scrobbles/ui/widgets/card_content.dart';
    import 'package:scrobbles/ui/widgets/error.dart';
    
    class CardNewTracks extends StatelessWidget {
      const CardNewTracks({super.key});
    
      @override
      Widget build(BuildContext context) {
        SettingsCubit settings = BlocProvider.of<SettingsCubit>(context);
    
        final int count = settings.getNewTracksCount();
    
        return BlocBuilder<DataNewTracksCubit, DataNewTracksState>(
    
          builder: (BuildContext context, DataNewTracksState data) {
    
            return CardContent(
              color: Theme.of(context).colorScheme.surface,
              title: 'new_tracks_title'.tr(),
              loader: update(count),
              content: Column(
                mainAxisAlignment: MainAxisAlignment.start,
                crossAxisAlignment: CrossAxisAlignment.start,
    
                children: data.newTracks?.data
    
                        .map((newTrack) => Text('${newTrack.track?.artist.name ?? ''} - ${newTrack.track?.name ?? ''}'))
    
                        .toList() ??
                    [],
              ),
            );
          },
        );
      }
    
      Widget update(int count) {
    
        const Widget loading = Text('⏳');
        const Widget done = Text('');
    
    
        late Future<NewTracksData> future = ScrobblesApi.fetchNewTracks(count);
    
        return BlocBuilder<DataNewTracksCubit, DataNewTracksState>(
    
          builder: (BuildContext context, DataNewTracksState data) {
    
            return FutureBuilder<NewTracksData>(
              future: future,
              builder: (context, snapshot) {
                if (snapshot.hasError) {
                  return ShowErrorWidget(message: '${snapshot.error}');
                }
    
                BlocProvider.of<DataNewTracksCubit>(context).update(snapshot.data);
    
                return !snapshot.hasData ? loading : done;
              },
            );
          },
        );
      }
    }