37 lines
866 B
Dart
37 lines
866 B
Dart
import 'fixed_time_alarm.dart';
|
|
import 'location_alarm.dart';
|
|
import 'relative_time_alarm.dart';
|
|
|
|
abstract class Alarm {
|
|
String get id;
|
|
AlarmType get alarmType;
|
|
Map<String, dynamic> toJson();
|
|
|
|
factory Alarm.fromJson(Map<String, dynamic> json) {
|
|
if (json.containsKey('alarmType')) {
|
|
switch (json['alarmType'] as String) {
|
|
case 'timeFixed':
|
|
return FixedTimeAlarm.fromJson(json);
|
|
case 'timeRelative':
|
|
return RelativeTimeAlarm.fromJson(json);
|
|
case '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 }
|