FluentDocument.fromJson constructor

FluentDocument.fromJson(
  1. Map<String, dynamic> json, {
  2. FluentPluginRegistry? registry,
})

Creates a FluentDocument from a JSON map (result of jsonDecode). Supports both the new format (with "nodes" and "settings") and the legacy format (Root JSON directly).

Implementation

factory FluentDocument.fromJson(
  Map<String, dynamic> json, {
  FluentPluginRegistry? registry,
}) {
  FNodeJsonConverter.activeRegistry = registry;
  try {
    if (json.containsKey('nodes') && json.containsKey('settings')) {
      final root = Root.fromJson(json['nodes'] as Map<String, dynamic>);
      final doc = FluentDocument(content: root, registry: registry);
      final settings = json['settings'] as Map<String, dynamic>;
      doc.pendingLineHeight =
          (settings['lineHeight'] as num?)?.toDouble() ??
          doc.pendingLineHeight;
      doc.pendingSpacingBefore =
          (settings['spacingBefore'] as num?)?.toDouble() ??
          doc.pendingSpacingBefore;
      doc.pendingSpacingAfter =
          (settings['spacingAfter'] as num?)?.toDouble() ??
          doc.pendingSpacingAfter;
      doc.pendingFontFamily =
          settings['fontFamily'] as String? ?? doc.pendingFontFamily;
      doc.pendingFontSize =
          (settings['fontSize'] as num?)?.toDouble() ?? doc.pendingFontSize;
      doc.pendingTextAlign =
          settings['textAlign'] as String? ?? doc.pendingTextAlign;
      doc.pendingIndent =
          (settings['indent'] as num?)?.toInt() ?? doc.pendingIndent;
      doc.pendingColor = settings['color'] as String?;
      doc.pendingHighlightColor = settings['highlightColor'] as String?;
      if (settings['styles'] is List) {
        doc.pendingStyles = (settings['styles'] as List)
            .map((e) => e as String)
            .toList();
      }
      doc.documentLanguage =
          settings['documentLanguage'] as String? ?? doc.documentLanguage;
      final comments = json['comments'];
      if (comments is List && doc.commentProvider != null) {
        doc.commentProvider!.importComments(
          comments.map((e) => e as Map<String, dynamic>).toList(),
        );
      }
      return doc;
    }
    final root = Root.fromJson(json);
    return FluentDocument(content: root, registry: registry);
  } finally {
    FNodeJsonConverter.activeRegistry = null;
  }
}