perf: Add stable keys to Lazy list items for performance (#323)

Added stable `key` parameters to `items(...)` and `itemsIndexed(...)` calls across 13 screens. This prevents Compose from treating all list mutations as full item replacements and eliminates unnecessary full list recompositions during state updates.

Modifications applied to:
- KeysScreen.kt, SharedComponents.kt, AchievementsScreen.kt, PluginsScreen.kt
- SessionsScreen.kt, CronJobsScreen.kt, McpServersScreen.kt, PairingScreen.kt
- ToolsetsScreen.kt, ChatScreen.kt, ModelScreen.kt, SkillsScreen.kt
- KanbanScreen.kt, ProfilesScreen.kt, WebhooksScreen.kt

Note: LogsScreen.kt was left without a key because logs are string lines that can be duplicated, and using `.hashCode()` would cause a "Key was already used" crash. Positional indexing is safer there.

Fixes #279
This commit is contained in:
M57 authored and GitHub committed 2026-06-23 12:17:45 +03:00
1 parent d9c7471350
commit 4d47db263f
15 files changed
+17 -17

No files matched your search

@@ -125,7 +125,7 @@ fun KeysScreen(
placeholder = "Search keys...",
)
}
items(filteredEnvVars.toList()) { (key, config) ->
items(filteredEnvVars.toList(), key = { it.first }) { (key, config) ->
var isEditing by remember { mutableStateOf(false) }
val revealedVal = state.revealedValues[key]
val isRevealed = revealedVal != null