import 'package:json_annotation/json_annotation.dart'; import 'package:meta/meta.dart'; import 'package:objectid/objectid.dart'; import '../object_id_utils.dart'; part 'your_location.g.dart'; @immutable @JsonSerializable() class YourLocation { const YourLocation( {required this.id, required this.lat, required this.lon, this.description = '', this.distance = 10, int? currentNumFires, this.subscribed = false}) : currentNumFires = currentNumFires ?? 0; factory YourLocation.fromJson(Map json) => _$YourLocationFromJson(json); @JsonKey(toJson: objectIdToJson, fromJson: objectIdFromJson) final ObjectId id; final double lat; final double lon; final String description; final bool subscribed; final int distance; final int currentNumFires; static YourLocation get noLocation { _noLocation ??= YourLocation(id: ObjectId(), lat: 0.0, lon: 0.0); return _noLocation!; } static YourLocation? _noLocation; static const int? withoutStats = null; Map toJson() => _$YourLocationToJson(this); YourLocation copyWith( {ObjectId? id, double? lat, double? lon, String? description, int? distance, int? currentNumFires, bool? subscribed}) { return YourLocation( id: id ?? this.id, lat: lat ?? this.lat, lon: lon ?? this.lon, description: description ?? this.description, distance: distance ?? this.distance, currentNumFires: currentNumFires ?? this.currentNumFires, subscribed: subscribed ?? this.subscribed); } @override bool operator ==(Object other) => identical(this, other) || other is YourLocation && runtimeType == other.runtimeType && id == other.id && lat == other.lat && lon == other.lon && description == other.description && subscribed == other.subscribed && currentNumFires == other.currentNumFires && distance == other.distance; @override int get hashCode => id.hashCode ^ lat.hashCode ^ lon.hashCode ^ description.hashCode ^ subscribed.hashCode ^ currentNumFires.hashCode ^ distance.hashCode; @override String toString() { return 'YourLocation {id: $id, lat: $lat, lon: $lon, description: $description, subscribed: $subscribed, distance: $distance, currentNumFires: $currentNumFires}'; } }