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

@@ -715,7 +715,7 @@ private fun ChatInputBar(
LazyColumn(
modifier = Modifier.heightIn(max = 200.dp),
) {
items(filteredCommands) { cmd ->
items(filteredCommands, key = { it }) { cmd ->
val description =
when (cmd) {
"/help" -> stringResource(R.string.command_help_desc)