view method

  1. @override
Object view()
override

Renders the current model state for display.

This method is called after every update to refresh the screen. It should return either a String or a View object.

Guidelines

  • Keep view functions pure - no side effects
  • View should only depend on model state
  • Use string interpolation or StringBuffer for complex views
  • Consider terminal width/height for responsive layouts

Example

@override
String view() {
  final buffer = StringBuffer();

  // Header
  buffer.writeln('╔════════════════════════════╗');
  buffer.writeln('║      My Application        ║');
  buffer.writeln('╚════════════════════════════╝');
  buffer.writeln();

  // Content
  if (loading) {
    buffer.writeln('Loading...');
  } else {
    for (final item in items) {
      final prefix = item == selectedItem ? '▸ ' : '  ';
      buffer.writeln('$prefix$item');
    }
  }

  buffer.writeln();

  // Footer
  buffer.writeln('↑/↓: Navigate  Enter: Select  q: Quit');

  return buffer.toString();
}

Implementation

@override
Object view() {
  final base = super.view();
  if (title == null || title!.isEmpty) return base;

  if (base is View) {
    return View(
      content: base.content,
      onMouse: base.onMouse,
      cursor: base.cursor,
      backgroundColor: base.backgroundColor,
      foregroundColor: base.foregroundColor,
      windowTitle: title,
      progressBar: base.progressBar,
      altScreen: base.altScreen,
      reportFocus: base.reportFocus,
      bracketedPaste: base.bracketedPaste,
      mouseMode: base.mouseMode,
      keyboardEnhancements: base.keyboardEnhancements,
    );
  }

  if (base is String) {
    return View(content: base, windowTitle: title);
  }

  return base;
}