Skip to content
Snippets Groups Projects
data_statistics_recent_cubit.dart 2.17 KiB
Newer Older
Benoît Harrault's avatar
Benoît Harrault committed
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';
import 'package:scrobbles/cubit/settings_global_cubit.dart';
import 'package:scrobbles/models/data/statistics_recent.dart';
import 'package:scrobbles/network/scrobbles.dart';
Benoît Harrault's avatar
Benoît Harrault committed

part 'data_statistics_recent_state.dart';

class DataStatisticsRecentCubit extends HydratedCubit<DataStatisticsRecentState> {
  DataStatisticsRecentCubit()
      : super(const DataStatisticsRecentState(
          statisticsRecent: null,
          status: '',
        ));
  void setLoading() {
    emit(DataStatisticsRecentState(
      statisticsRecent: state.statisticsRecent,
      status: 'loading',
    ));
  void setValue(StatisticsRecentData? statisticsRecent) {
    emit(DataStatisticsRecentState(
      statisticsRecent: statisticsRecent,
      status: '',
    ));
  }

  void setFailed() {
    emit(DataStatisticsRecentState(
      statisticsRecent: state.statisticsRecent,
      status: 'failed',
    ));
  }

  void setLoaded() {
    emit(DataStatisticsRecentState(
      statisticsRecent: state.statisticsRecent,
      status: '',
    ));
  void update(StatisticsRecentData? statisticsRecent) {
    if ((statisticsRecent != null) &&
        (state.statisticsRecent.toString() != statisticsRecent.toString())) {
      setValue(statisticsRecent);
    } else {
      setLoaded();
  void refresh(BuildContext context) async {
    setLoading();

    GlobalSettingsCubit settings = BlocProvider.of<GlobalSettingsCubit>(context);
    final int daysCount = settings.getStatisticsRecentDaysCount();

    final StatisticsRecentData? data = await ScrobblesApi.fetchRecentStatistics(daysCount);
    if (data != null) {
      update(data);
    } else {
      setFailed();
    }
Benoît Harrault's avatar
Benoît Harrault committed
  }

  @override
  DataStatisticsRecentState? fromJson(Map<String, dynamic> json) {
    return DataStatisticsRecentState(
      statisticsRecent: StatisticsRecentData.fromJson(json['statisticsRecent']),
      status: '',
Benoît Harrault's avatar
Benoît Harrault committed
    );
  }

  @override
  Map<String, Object?>? toJson(DataStatisticsRecentState state) {
    return <String, Object?>{
      'statisticsRecent': state.statisticsRecent?.toJson(),
      'status': state.status,