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 toMap() { return { 'latitude': latitude, 'longitude': longitude, 'timestamp': timestamp.millisecondsSinceEpoch, }; } factory UserLocation.fromMap(Map 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); }