Location.fromMap constructor
Implementation
factory Location.fromMap(JsonMap map) {
final coordsMap = map['coords'];
final activityMap = map['activity'];
final batteryMap = map['battery'];
final geofenceMap = map['geofence'];
// Use non-strict mode for backward compatibility with existing data
// but still get range validation
Coords coords;
try {
coords = Coords.fromMap(
coordsMap is Map ? Map<String, dynamic>.from(coordsMap) : const {},
strict: false, // Don't throw on missing data for backward compat
);
} on InvalidCoordsException {
// If range validation fails, use default invalid coords
coords = const Coords(
latitude: 0.0,
longitude: 0.0,
accuracy: -1, // Mark as invalid with negative accuracy
);
}
return Location(
uuid: map['uuid'] as String? ?? '',
timestamp: map['timestamp'] != null
? DateTime.tryParse(map['timestamp'] as String) ?? DateTime.now()
: DateTime.now(),
age: (map['age'] as num?)?.toInt(),
event: map['event'] as String?,
isMoving: map['is_moving'] as bool?,
isHeartbeat: map['is_heartbeat'] as bool?,
isMock: map['mock'] as bool? ?? false,
coords: coords,
activity: activityMap is Map
? Activity.fromMap(Map<String, dynamic>.from(activityMap))
: null,
battery: batteryMap is Map
? Battery.fromMap(Map<String, dynamic>.from(batteryMap))
: null,
geofence: geofenceMap is Map
? Geofence.fromMap(Map<String, dynamic>.from(geofenceMap))
: null,
odometer: (map['odometer'] as num?)?.toDouble(),
extras: map['extras'] is Map
? Map<String, dynamic>.from(map['extras'] as Map)
: null,
);
}