copyWith method
ViewportModel
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 styleLineFunc(
- int lineIndex
- List<
HighlightInfo> ? highlights, - int? currentHighlightIndex,
- Object? selectionStart = undefined,
- Object? selectionEnd = undefined,
- DateTime? lastClickTime,
- (int, int)? lastClickPos,
Creates a copy with the given fields replaced.
Implementation
ViewportModel 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,
}) {
final newWidth = width ?? this.width;
final newGutter = gutter ?? this.gutter;
final newSoftWrap = softWrap ?? this.softWrap;
final newFillHeight = fillHeight ?? this.fillHeight;
final newShowLineNumbers = showLineNumbers ?? this.showLineNumbers;
final newOriginalLines = lines ?? _originalLines;
final newHighlights = highlights ?? _highlights;
final newSelectionStart = selectionStart == undefined
? this.selectionStart
: selectionStart as (int, int)?;
final newSelectionEnd = selectionEnd == undefined
? this.selectionEnd
: selectionEnd as (int, int)?;
// Apply highlights to original lines
var styledLines = newOriginalLines;
// Note: In v2-exp, highlights are applied during rendering (visibleLines),
// but we'll keep the current approach for now if it works, or migrate to
// on-the-fly styling if needed for performance.
// Actually, let's follow upstream and apply them in visibleLines.
final newModel = ViewportModel(
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,
keyMap: keyMap ?? this.keyMap,
lines: styledLines,
originalLines: newOriginalLines,
softWrap: newSoftWrap,
fillHeight: newFillHeight,
showLineNumbers: newShowLineNumbers,
leftGutterFunc: leftGutterFunc ?? this.leftGutterFunc,
style: style ?? this.style,
highlightStyle: highlightStyle ?? this.highlightStyle,
selectedHighlightStyle:
selectedHighlightStyle ?? this.selectedHighlightStyle,
styleLineFunc: styleLineFunc ?? this.styleLineFunc,
highlights: newHighlights,
currentHighlightIndex:
currentHighlightIndex ?? this.currentHighlightIndex,
selectionStart: newSelectionStart,
selectionEnd: newSelectionEnd,
lastClickTime: lastClickTime ?? this.lastClickTime,
lastClickPos: lastClickPos ?? this.lastClickPos,
);
newModel._longestLineWidth = _findLongestLineWidth(styledLines);
return newModel;
}