Files
rental_income_tracker/lib/models/app_settings.dart
T

70 lines
2.1 KiB
Dart

class AppSettings {
static const double kDefaultRentUsd = 2350;
AppSettings({
required this.rentUsd,
required this.occupied,
this.notOccupiedFromYearMonth,
this.notOccupiedMonths = const <String>[],
this.localFallbackHour = 9,
this.localQuietHourStart = 23,
});
final double rentUsd;
final bool occupied;
final String? notOccupiedFromYearMonth;
final List<String> notOccupiedMonths;
final int localFallbackHour;
final int localQuietHourStart;
factory AppSettings.defaults() {
return AppSettings(rentUsd: kDefaultRentUsd, occupied: true);
}
AppSettings copyWith({
double? rentUsd,
bool? occupied,
String? notOccupiedFromYearMonth,
List<String>? notOccupiedMonths,
bool clearNotOccupiedFromYearMonth = false,
int? localFallbackHour,
int? localQuietHourStart,
}) {
return AppSettings(
rentUsd: rentUsd ?? this.rentUsd,
occupied: occupied ?? this.occupied,
notOccupiedFromYearMonth: clearNotOccupiedFromYearMonth
? null
: (notOccupiedFromYearMonth ?? this.notOccupiedFromYearMonth),
notOccupiedMonths: notOccupiedMonths ?? this.notOccupiedMonths,
localFallbackHour: localFallbackHour ?? this.localFallbackHour,
localQuietHourStart: localQuietHourStart ?? this.localQuietHourStart,
);
}
Map<String, dynamic> toJson() {
return {
'rentUsd': rentUsd,
'occupied': occupied,
'notOccupiedFromYearMonth': notOccupiedFromYearMonth,
'notOccupiedMonths': notOccupiedMonths,
'localFallbackHour': localFallbackHour,
'localQuietHourStart': localQuietHourStart,
};
}
factory AppSettings.fromJson(Map<String, dynamic> json) {
return AppSettings(
rentUsd: (json['rentUsd'] ?? 0).toDouble(),
occupied: json['occupied'] ?? true,
notOccupiedFromYearMonth: json['notOccupiedFromYearMonth'] as String?,
notOccupiedMonths:
(json['notOccupiedMonths'] as List<dynamic>? ?? const <dynamic>[])
.whereType<String>()
.toList(),
localFallbackHour: json['localFallbackHour'] ?? 9,
localQuietHourStart: json['localQuietHourStart'] ?? 23,
);
}
}