Skip to content
Snippets Groups Projects
activity_cubit.dart 1.61 KiB
Newer Older
import 'package:flutter/material.dart';
import 'package:flutter_custom_toolbox/flutter_toolbox.dart';

import 'package:scrobbles/models/activity/activity.dart';
import 'package:scrobbles/models/settings/settings_activity.dart';
import 'package:scrobbles/models/settings/settings_global.dart';

part 'activity_state.dart';

class ActivityCubit extends HydratedCubit<ActivityState> {
  ActivityCubit()
      : super(ActivityState(
          currentActivity: Activity.createNull(),
        ));

  void updateState(Activity activity) {
    emit(ActivityState(
      currentActivity: activity,
    ));
  }

  void refresh() {
    final Activity activity = Activity(
      // Settings
      activitySettings: state.currentActivity.activitySettings,
      globalSettings: state.currentActivity.globalSettings,
      // State
      isRunning: state.currentActivity.isRunning,
    );

    updateState(activity);
  }

  void startNewActivity({
    required ActivitySettings activitySettings,
    required GlobalSettings globalSettings,
  }) {
    final Activity newActivity = Activity.createNew(
      // Settings
      activitySettings: activitySettings,
      globalSettings: globalSettings,
    );

    newActivity.dump();

    updateState(newActivity);
    refresh();
  }

  @override
  ActivityState? fromJson(Map<String, dynamic> json) {
    final Activity currentActivity = json['currentActivity'] as Activity;

    return ActivityState(
      currentActivity: currentActivity,
    );
  }

  @override
  Map<String, dynamic>? toJson(ActivityState state) {
    return <String, dynamic>{
      'currentActivity': state.currentActivity.toJson(),
    };
  }
}