UidlDocument.fromJson constructor

UidlDocument.fromJson(
  1. Map<String, dynamic> json
)

Implementation

factory UidlDocument.fromJson(Map<String, dynamic> json) {
  final rootJson = json['root'];
  if (rootJson is! Map<String, dynamic>) {
    throw FormatException('UidlDocument missing or invalid "root" node');
  }

  final rawComponents = json['components'];
  final Map<String, UidlNode> parsedComponents = {};
  if (rawComponents is Map<String, dynamic>) {
    for (final entry in rawComponents.entries) {
      if (entry.value is Map<String, dynamic>) {
        parsedComponents[entry.key] = UidlNode.fromJson(entry.value as Map<String, dynamic>);
      }
    }
  }

  return UidlDocument(
    version: json['version'] as String? ?? '1.0',
    id: json['id'] as String? ?? 'untitled',
    name: json['name'] as String? ?? 'Untitled Document',
    root: UidlNode.fromJson(rootJson),
    initialState: json['initialState'] is Map<String, dynamic>
        ? Map<String, dynamic>.from(json['initialState'] as Map)
        : const {},
    dataSources: json['dataSources'] is Map<String, dynamic>
        ? Map<String, dynamic>.from(json['dataSources'] as Map)
        : const {},
    components: parsedComponents,
    theme: json['theme'] is Map<String, dynamic>
        ? Map<String, dynamic>.from(json['theme'] as Map)
        : null,
    metadata: json['metadata'] is Map<String, dynamic>
        ? Map<String, dynamic>.from(json['metadata'] as Map)
        : null,
  );
}