Location.fromMap constructor

Location.fromMap(
  1. JsonMap map
)

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,
  );
}