51 lines
1.2 KiB
Dart
51 lines
1.2 KiB
Dart
import 'package:intaleq_maps/intaleq_maps.dart';
|
|
|
|
enum UnitRole {
|
|
commander,
|
|
infantry,
|
|
vehicle,
|
|
medic
|
|
}
|
|
|
|
class FriendlyUnit {
|
|
final String deviceId;
|
|
final String callsign;
|
|
final LatLng position;
|
|
final double heading;
|
|
final UnitRole role;
|
|
final DateTime lastSeen;
|
|
|
|
FriendlyUnit({
|
|
required this.deviceId,
|
|
required this.callsign,
|
|
required this.position,
|
|
required this.heading,
|
|
required this.role,
|
|
required this.lastSeen,
|
|
});
|
|
|
|
Map<String, dynamic> toJson() => {
|
|
'deviceId': deviceId,
|
|
'callsign': callsign,
|
|
'lat': position.latitude,
|
|
'lng': position.longitude,
|
|
'heading': heading,
|
|
'role': role.name,
|
|
'timestamp': lastSeen.millisecondsSinceEpoch,
|
|
};
|
|
|
|
factory FriendlyUnit.fromJson(Map<String, dynamic> json) {
|
|
return FriendlyUnit(
|
|
deviceId: json['deviceId'],
|
|
callsign: json['callsign'],
|
|
position: LatLng(json['lat'], json['lng']),
|
|
heading: (json['heading'] as num).toDouble(),
|
|
role: UnitRole.values.firstWhere(
|
|
(e) => e.name == json['role'],
|
|
orElse: () => UnitRole.infantry,
|
|
),
|
|
lastSeen: DateTime.fromMillisecondsSinceEpoch(json['timestamp']),
|
|
);
|
|
}
|
|
}
|