Can a dialog be altered to make its components reusable without having to type duplicate lines of code for multiple items. My list has more than one item. When I click the first list item (Starters), I want Starters as the dialog title and the Screen.Starters.route navigation route to be used, whereas when I click the other list item (Desserts), I want Desserts as the dialog title Screen.Starters.route navigation route to be used.
enum class Items(@StringRes val textResId: Int) {
Starters(R.string.starters),
Desserts(R.string.desserts)
}
@Composable
fun MainScreen(navController: NavController, dialogTitle: String) {
val openDialog = remember { mutableStateOf(false) }
val dialogTitle: String
if (openDialog.value) {
AlertDialog(
onDismissRequest = {
openDialog.value = false
},
title = {Text(dialogTitle)},
text = {Text("Ready to order?")},
confirmButton = {
Button(onClick = {navController.navigate(route = Screen.Starters.route), openDialog.value = false}) {Text("Order food")}
},
dismissButton = {
OutlinedButton(onClick = {openDialog.value = false}) {Text("Cancel")}
}
)
}
val myListener: (Items) -> Unit = { item ->
when (item) {
Items.Starters -> { openDialog.value = true }
Items.Desserts -> { openDialog.value = true }
}
}
Scaffold(
topBar = {...},
content = { it ->
LazyColumn(modifier = Modifier.padding(it),
lazyItems = arrayOf(Items.ItemStaters, Items.ItemDesserts),
onClickItem = myListener) {
Text(text = stringResource(id = it.textResId))
}
},
containerColor = ...val
)
Update
val myListener: (Items) -> Unit = { item ->
when (item) {
Items.Starters -> {
MyDialog(
onDismissRequest = { /*TODO*/ },
title = { /*TODO*/ },
text = { /*TODO*/ },
dismissButton = { /*TODO*/ },
onConfirm = { /*TODO*/ }
)
}
}
}