import 'package:flutter_custom_toolbox/flutter_toolbox.dart'; import 'package:stopmotion/models/data/picture.dart'; import 'package:stopmotion/models/settings/settings_activity.dart'; import 'package:stopmotion/models/settings/settings_global.dart'; class Activity { Activity({ // Settings required this.activitySettings, required this.globalSettings, // State this.isRunning = false, this.isStarted = false, this.isFinished = false, this.animationInProgress = false, // Base data this.pictures = const [], // Activity data this.position = 1, }); // Settings final ActivitySettings activitySettings; final GlobalSettings globalSettings; // State bool isRunning; bool isStarted; bool isFinished; bool animationInProgress; // Base data List<Picture> pictures; // Activity data int position; factory Activity.createNull() { return Activity( // Settings activitySettings: ActivitySettings.createDefault(), globalSettings: GlobalSettings.createDefault(), // Base data pictures: [], ); } factory Activity.createNew({ ActivitySettings? activitySettings, GlobalSettings? globalSettings, }) { final ActivitySettings newActivitySettings = activitySettings ?? ActivitySettings.createDefault(); final GlobalSettings newGlobalSettings = globalSettings ?? GlobalSettings.createDefault(); return Activity( // Settings activitySettings: newActivitySettings, globalSettings: newGlobalSettings, // State isRunning: true, // Base data pictures: [], ); } bool get canBeResumed => isStarted && !isFinished; void dump() { printlog(''); printlog('## Current activity dump:'); printlog(''); printlog('$Activity:'); printlog(' Settings'); activitySettings.dump(); globalSettings.dump(); printlog(' State'); printlog(' isRunning: $isRunning'); printlog(' isStarted: $isStarted'); printlog(' isFinished: $isFinished'); printlog(' animationInProgress: $animationInProgress'); printlog(' Base data'); printlog(' pictures: $pictures'); printlog(' Activity data'); printlog(' position: $position'); printlog(''); } @override String toString() { return '$Activity(${toJson()})'; } Map<String, dynamic>? toJson() { return <String, dynamic>{ // Settings 'activitySettings': activitySettings.toJson(), 'globalSettings': globalSettings.toJson(), // State 'isRunning': isRunning, 'isStarted': isStarted, 'isFinished': isFinished, 'animationInProgress': animationInProgress, // Base data 'pictures': pictures, // Activity data 'position': position, }; } }