render method
Implementation
@override
void render(Rect area, Buffer buffer, RenderContext ctx) {
if (area.isEmpty) return;
_ensureDefaults();
final isFocused = ctx.isFocused(id);
final filtered = _filteredItems();
var remaining = area;
if (filterable) {
final filterRect = Rect(remaining.x, remaining.y, remaining.width, 1);
_renderFilter(filterRect, buffer, ctx, isFocused);
remaining = remaining.inset(top: 1);
if (remaining.isEmpty) return;
}
Rect errorRect = const Rect.zero();
if (state.validationError != null && remaining.height > 1) {
errorRect = Rect(remaining.x, remaining.bottom - 1, remaining.width, 1);
remaining = remaining.inset(bottom: 1);
}
final maxVisible = visibleCount.clamp(1, remaining.height);
if (filtered.isEmpty) {
_renderEmpty(remaining, buffer, ctx);
} else {
_renderList(remaining, buffer, ctx, filtered, maxVisible, isFocused);
}
if (state.validationError != null && !errorRect.isEmpty) {
buffer.writeText(
errorRect.x,
errorRect.y,
state.validationError!,
style: Style(fg: ctx.theme.colors.error),
maxWidth: errorRect.width,
);
}
}