60 lines
1.5 KiB
Dart
60 lines
1.5 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:geolocator/geolocator.dart';
|
|
|
|
// ignore_for_file: public_member_api_docs, sort_constructors_first
|
|
class UserLocation {
|
|
final double latitude;
|
|
final double longitude;
|
|
final DateTime timestamp;
|
|
UserLocation(
|
|
{required this.latitude,
|
|
required this.longitude,
|
|
required this.timestamp});
|
|
|
|
static UserLocation empty() {
|
|
return UserLocation(
|
|
latitude: 0.0, longitude: 0.0, timestamp: DateTime.now());
|
|
}
|
|
|
|
factory UserLocation.fromPosition(Position position) {
|
|
return UserLocation(
|
|
latitude: position.latitude,
|
|
longitude: position.longitude,
|
|
timestamp: position.timestamp);
|
|
}
|
|
|
|
UserLocation copyWith({
|
|
double? latitude,
|
|
double? longitude,
|
|
DateTime? timestamp,
|
|
}) {
|
|
return UserLocation(
|
|
latitude: latitude ?? this.latitude,
|
|
longitude: longitude ?? this.longitude,
|
|
timestamp: timestamp ?? this.timestamp,
|
|
);
|
|
}
|
|
|
|
Map<String, dynamic> toMap() {
|
|
return <String, dynamic>{
|
|
'latitude': latitude,
|
|
'longitude': longitude,
|
|
'timestamp': timestamp.millisecondsSinceEpoch,
|
|
};
|
|
}
|
|
|
|
factory UserLocation.fromMap(Map<String, dynamic> map) {
|
|
return UserLocation(
|
|
latitude: map['latitude'] as double,
|
|
longitude: map['longitude'] as double,
|
|
timestamp: DateTime.fromMillisecondsSinceEpoch(map['timestamp'] as int),
|
|
);
|
|
}
|
|
|
|
String toJson() => json.encode(toMap());
|
|
|
|
factory UserLocation.fromJson(String source) =>
|
|
UserLocation.fromMap(json.decode(source) as Map<String, dynamic>);
|
|
}
|