/// One measurable part of a shared goal — "Run 100 km", "20 sessions" — that /// every member logs toward. class GroupObjective { String id; String title; /// km, sessions, pages, hours… String unit; double target; /// The group's total so far. double current; /// What the signed-in user has put in. double mine; GroupObjective({ this.id = "", this.title = "", this.unit = "", this.target = 0, this.current = 0, this.mine = 0, }); double get progress { if (target <= 0) { return 0; } return (current / target).clamp(0.0, 1.0); } bool get complete => target > 0 && current >= target; factory GroupObjective.fromJson(Map json) { return GroupObjective( id: json['id'] ?? "", title: json['title'] ?? "", unit: json['unit'] ?? "", target: (json['target'] ?? 0).toDouble(), current: (json['current'] ?? 0).toDouble(), mine: (json['mine'] ?? 0).toDouble(), ); } Map toJson() { final Map data = {}; data['id'] = id; data['title'] = title; data['unit'] = unit; data['target'] = target; data['current'] = current; data['mine'] = mine; return data; } }