Files
GroundedHelper/frontend/lib/Grounded/about/internal/application/ProgressTargets.dart
alvocool add94f621c Add Progress over time and a targets and reminders setup
Progress gives a Day/Week/Month view of routines held against a weekly
target, compared with the same point of the previous period, with active
time and the daily streak. Targets & reminders sets routines and minutes
per week and schedules a heads-up before each routine. The runner's summary
now shows today's held count and streak. Finished runs are mirrored to a
device run log that feeds both.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KhQh614DMeYoQEH9SoMRUw
2026-11-08 20:17:58 +03:00

47 lines
1.4 KiB
Dart

/// What a good week looks like, set by the user on the Targets screen.
/// Progress measures against these; reminders fire before scheduled routines.
class ProgressTargets {
/// Routines held (every step done) per week.
int routinesPerWeek;
/// Minutes spent inside routines per week, held or not.
int minutesPerWeek;
bool reminders;
/// How long before a routine's start the reminder fires.
int reminderLead;
/// False until the user has saved the Targets screen once, so Progress can
/// ask for a target instead of silently using the defaults.
bool set;
ProgressTargets({
this.routinesPerWeek = 5,
this.minutesPerWeek = 150,
this.reminders = false,
this.reminderLead = 10,
this.set = false,
});
factory ProgressTargets.fromJson(Map<String, dynamic> json) {
return ProgressTargets(
routinesPerWeek: json['routinesPerWeek'] ?? 5,
minutesPerWeek: json['minutesPerWeek'] ?? 150,
reminders: json['reminders'] ?? false,
reminderLead: json['reminderLead'] ?? 10,
set: json['set'] ?? false,
);
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = <String, dynamic>{};
data['routinesPerWeek'] = routinesPerWeek;
data['minutesPerWeek'] = minutesPerWeek;
data['reminders'] = reminders;
data['reminderLead'] = reminderLead;
data['set'] = set;
return data;
}
}