GroupAnnotation.fromJsonMap constructor

GroupAnnotation.fromJsonMap(
  1. Map<String, dynamic> json
)

Implementation

factory GroupAnnotation.fromJsonMap(Map<String, dynamic> json) {
  // Parse padding from JSON (stored as LTRB array or object)
  EdgeInsets padding = defaultPadding;
  final paddingJson = json['padding'];
  if (paddingJson != null) {
    if (paddingJson is List) {
      padding = EdgeInsets.fromLTRB(
        (paddingJson[0] as num).toDouble(),
        (paddingJson[1] as num).toDouble(),
        (paddingJson[2] as num).toDouble(),
        (paddingJson[3] as num).toDouble(),
      );
    } else if (paddingJson is Map) {
      padding = EdgeInsets.fromLTRB(
        (paddingJson['left'] as num?)?.toDouble() ?? 0,
        (paddingJson['top'] as num?)?.toDouble() ?? 0,
        (paddingJson['right'] as num?)?.toDouble() ?? 0,
        (paddingJson['bottom'] as num?)?.toDouble() ?? 0,
      );
    }
  }

  final annotation = GroupAnnotation(
    id: json['id'] as String,
    position: Offset(
      (json['x'] as num).toDouble(),
      (json['y'] as num).toDouble(),
    ),
    size: Size(
      (json['width'] as num?)?.toDouble() ?? 200.0,
      (json['height'] as num?)?.toDouble() ?? 150.0,
    ),
    title: json['title'] as String? ?? '',
    color: Color(json['color'] as int? ?? Colors.blue.toARGB32()),
    behavior: GroupBehavior.values.byName(
      json['behavior'] as String? ?? 'bounds',
    ),
    nodeIds:
        (json['nodeIds'] as List<dynamic>?)
            ?.map((e) => e as String)
            .toSet() ??
        {},
    padding: padding,
    zIndex: json['zIndex'] as int? ?? -1,
    isVisible: json['isVisible'] as bool? ?? true,
    isInteractive: json['isInteractive'] as bool? ?? true,
    metadata: json['metadata'] as Map<String, dynamic>? ?? {},
  );
  return annotation;
}