copyWith method

  1. @override
TextModel copyWith({
  1. int? width,
  2. int? height,
  3. int? yOffset,
  4. int? xOffset,
  5. bool? mouseWheelEnabled,
  6. int? mouseWheelDelta,
  7. int? horizontalStep,
  8. ViewportKeyMap? keyMap,
  9. List<String>? lines,
  10. int? gutter,
  11. bool? softWrap,
  12. bool? fillHeight,
  13. bool? showLineNumbers,
  14. GutterFunc? leftGutterFunc,
  15. Style? style,
  16. Style? highlightStyle,
  17. Style? selectedHighlightStyle,
  18. Style styleLineFunc(
    1. int lineIndex
    )?,
  19. List<HighlightInfo>? highlights,
  20. int? currentHighlightIndex,
  21. Object? selectionStart = undefined,
  22. Object? selectionEnd = undefined,
  23. DateTime? lastClickTime,
  24. (int, int)? lastClickPos,
  25. List<String>? wrappedLines,
  26. List<String>? originalLines,
  27. List<StyleRange>? styleRanges,
})
override

Creates a copy with the given fields replaced.

Implementation

@override
TextModel copyWith({
  int? width,
  int? height,
  int? yOffset,
  int? xOffset,
  bool? mouseWheelEnabled,
  int? mouseWheelDelta,
  int? horizontalStep,
  ViewportKeyMap? keyMap,
  List<String>? lines,
  int? gutter,
  bool? softWrap,
  bool? fillHeight,
  bool? showLineNumbers,
  GutterFunc? leftGutterFunc,
  Style? style,
  Style? highlightStyle,
  Style? selectedHighlightStyle,
  Style Function(int lineIndex)? styleLineFunc,
  List<HighlightInfo>? highlights,
  int? currentHighlightIndex,
  Object? selectionStart = undefined,
  Object? selectionEnd = undefined,
  DateTime? lastClickTime,
  (int, int)? lastClickPos,
  List<String>? wrappedLines,
  List<String>? originalLines,
  List<ranges.StyleRange>? styleRanges,
}) {
  final newWidth = width ?? this.width;
  final newGutter = gutter ?? this.gutter;
  final newSoftWrap = softWrap ?? this.softWrap;
  final newOriginalLines = lines ?? originalLines ?? internalOriginalLines;
  final newStyleRanges = styleRanges ?? this.styleRanges;

  // Apply style ranges to original lines
  var styledLines = lines ?? internalLines;
  if (lines != null || styleRanges != null) {
    styledLines = newOriginalLines;
    if (newStyleRanges.isNotEmpty) {
      final content = newOriginalLines.join('\n');
      final styled = ranges.styleRanges(content, newStyleRanges);
      styledLines = styled.split('\n');
    }
  }

  List<String>? newWrappedLines = wrappedLines ?? internalWrappedLines;
  if (newSoftWrap &&
      (lines != null ||
          width != null ||
          gutter != null ||
          softWrap != null ||
          styleRanges != null)) {
    final contentWidth = math.max(0, newWidth - newGutter);
    final content = styledLines.join('\n');
    final wrapped = uv_wrap.wrapAnsiPreserving(content, contentWidth);
    newWrappedLines = wrapped.split('\n');
  }

  final newSelectionStart = selectionStart == undefined
      ? this.selectionStart
      : selectionStart as (int, int)?;
  final newSelectionEnd = selectionEnd == undefined
      ? this.selectionEnd
      : selectionEnd as (int, int)?;

  return TextModel.withOptions(
    width: newWidth,
    height: height ?? this.height,
    gutter: newGutter,
    yOffset: yOffset ?? this.yOffset,
    xOffset: xOffset ?? this.xOffset,
    mouseWheelEnabled: mouseWheelEnabled ?? this.mouseWheelEnabled,
    mouseWheelDelta: mouseWheelDelta ?? this.mouseWheelDelta,
    horizontalStep: horizontalStep ?? this.horizontalStep,
    softWrap: newSoftWrap,
    fillHeight: fillHeight ?? this.fillHeight,
    showLineNumbers: showLineNumbers ?? this.showLineNumbers,
    leftGutterFunc: leftGutterFunc ?? this.leftGutterFunc,
    style: style ?? this.style,
    highlightStyle: highlightStyle ?? this.highlightStyle,
    selectedHighlightStyle:
        selectedHighlightStyle ?? this.selectedHighlightStyle,
    styleLineFunc: styleLineFunc ?? this.styleLineFunc,
    highlights: highlights ?? this.highlights,
    currentHighlightIndex:
        currentHighlightIndex ?? this.currentHighlightIndex,
    selectionStart: newSelectionStart,
    selectionEnd: newSelectionEnd,
    lastClickTime: lastClickTime ?? this.lastClickTime,
    lastClickPos: lastClickPos ?? this.lastClickPos,
    keyMap: keyMap ?? this.keyMap,
    lines: styledLines,
    wrappedLines: newWrappedLines,
    originalLines: newOriginalLines,
    styleRanges: newStyleRanges,
  );
}