import 'fixed_time_alarm.dart'; import 'location_alarm.dart'; import 'relative_time_alarm.dart'; abstract class Alarm { String get id; AlarmType get alarmType; Map toJson(); factory Alarm.fromJson(Map json) { if (json.containsKey('alarmType')) { switch (AlarmType.fromJson(json['alarmType'])) { case AlarmType.timeFixed: return FixedTimeAlarm.fromJson(json); case AlarmType.timeRelative: return RelativeTimeAlarm.fromJson(json); case AlarmType.location: return LocationAlarm.fromJson(json); } } throw ArgumentError('Unknown alarm type'); } @override bool operator ==(Object other) { if (other is! Alarm) return false; return hashCode == other.hashCode; } @override int get hashCode => id.hashCode; } enum AlarmType { timeFixed, timeRelative, location; String toJson() => name; static AlarmType fromJson(String json) => values.byName(json); }