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

@@ -119,7 +119,7 @@ fun PluginsScreen(
placeholder = "Search plugins...",
)
}
items(filteredPlugins) { plugin ->
items(filteredPlugins, key = { it.name }) { plugin ->
Card(modifier = Modifier.fillMaxWidth()) {
Column(modifier = Modifier.padding(16.dp)) {
Row(