Skip to content

Commit fd12819

Browse files
committed
fix(feature:client): use composite key in LazyColumn to prevent key crash
1 parent 11b3b28 commit fd12819

3 files changed

Lines changed: 8 additions & 3 deletions

File tree

feature/client/src/androidMain/kotlin/com/mifos/feature/client/clientCharges/ClientChargesScreen.android.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,15 @@ actual fun ClientChargeContent(
5858
icon = MifosIcons.Payments,
5959
)
6060
} else {
61+
// Use a composite key of id and index to guarantee uniqueness,
62+
// preventing LazyColumn crashes when duplicate ids are present in paged data.
6163
LazyColumn {
6264
items(
6365
chargesPagingList.itemCount,
64-
key = { index -> chargesPagingList[index]?.id ?: index },
66+
key = { index ->
67+
val id = chargesPagingList[index]?.id
68+
if (id != null) "id_${id}_index_$index" else "index_$index"
69+
},
6570
) { index ->
6671
chargesPagingList[index]?.let { ChargesItems(it) }
6772
}

feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientCharges/ClientChargesScreen.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ internal fun ClientChargesScreen(
8383
state = clientChargeUiState,
8484
onBackPressed = onBackPressed,
8585
onRetry = { clientChargesViewModel.loadCharges(clientId) },
86-
onRefresh = { clientChargesViewModel.refreshCenterList(clientId) },
86+
onRefresh = { clientChargesViewModel.refreshChargesList(clientId) },
8787
refreshState = refreshState,
8888
onChargeCreated = {
8989
// resetUiState() is needed here to clear the success state immediately after successful

feature/client/src/commonMain/kotlin/com/mifos/feature/client/clientCharges/ClientChargesViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class ClientChargesViewModel(
3535
loadCharges(clientId = clientId.value)
3636
}
3737

38-
fun refreshCenterList(clientId: Int) {
38+
fun refreshChargesList(clientId: Int) {
3939
_isRefreshing.value = true
4040
loadCharges(clientId = clientId)
4141
_isRefreshing.value = false

0 commit comments

Comments
 (0)