78 lines
1.9 KiB
Dart
78 lines
1.9 KiB
Dart
import 'package:bson_objectid/bson_objectid.dart';
|
|
import 'package:flutter/material.dart';
|
|
import 'package:json_annotation/json_annotation.dart';
|
|
import 'package:pref_dessert/pref_dessert.dart';
|
|
import 'dart:convert';
|
|
|
|
part 'yourLocation.g.dart';
|
|
|
|
_objectIdFromJson(String json) {
|
|
return new ObjectId.fromHexString(json);
|
|
}
|
|
|
|
_objectIdToJson(ObjectId o) {
|
|
return o.toString();
|
|
}
|
|
|
|
@JsonSerializable(nullable: false)
|
|
class YourLocation extends Object with _$YourLocationSerializerMixin {
|
|
@JsonKey(toJson: _objectIdToJson, fromJson: _objectIdFromJson)
|
|
ObjectId id;
|
|
final double lat;
|
|
final double lon;
|
|
String description;
|
|
bool subscribed;
|
|
|
|
factory YourLocation.fromJson(Map<String, dynamic> json) =>
|
|
_$YourLocationFromJson(json);
|
|
|
|
static YourLocation noLocation = new YourLocation(lat: 0.0, lon: 0.0);
|
|
|
|
YourLocation(
|
|
{this.id,
|
|
@required this.lat,
|
|
@required this.lon,
|
|
this.description,
|
|
this.subscribed: false}) {
|
|
if (this.description == null)
|
|
this.description = 'Position: ${this.lat}, ${this.lon}';
|
|
if (this.id == null) this.id = new ObjectId();
|
|
}
|
|
|
|
@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;
|
|
|
|
@override
|
|
int get hashCode =>
|
|
id.hashCode ^
|
|
lat.hashCode ^
|
|
lon.hashCode ^
|
|
description.hashCode ^
|
|
subscribed.hashCode;
|
|
}
|
|
|
|
class YourLocationRepository extends PreferencesRepository<YourLocation> {
|
|
|
|
static final repo = new YourLocationRepository();
|
|
|
|
YourLocationRepository() : super();
|
|
|
|
@override
|
|
YourLocation deserialize(String s) {
|
|
|
|
return YourLocation.fromJson(json.decode(s));
|
|
}
|
|
|
|
@override
|
|
String serialize(YourLocation y) {
|
|
return json.encode(y.toJson());
|
|
}
|
|
}
|