FluentDocument.fromJson constructor

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

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) {
  if (json.containsKey('nodes') && json.containsKey('settings')) {
    // New format: wrapped with settings
    final root = Root.fromJson(json['nodes'] as Map<String, dynamic>);
    final doc = FluentDocument(content: root);
    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;
    // Restore comments if present
    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;
  }
  // Legacy format: Root JSON directly
  final root = Root.fromJson(json);
  return FluentDocument(content: root);
}