view method
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;
}