'Type mismatch in lambda function - Kotlin
I want the text to be taken from string resource, depends on item.route, which is specified before bellow code.
But whole "when" expression gives me the error: "Type mismatch: inferred type is () -> Int but Int was expected." I don't have idea how to resolve it.
Text(
text = stringResource(id = {
when (item.route) {
"menu_screen" -> R.string.menu
"orders_screen" -> R.string.orders
else -> R.string.orders
}
}),
textAlign = TextAlign.Center
)
Solution 1:[1]
When you put bare brackets { } around something, it is interpreted as a lambda function. By "bare" I mean not after a class/fun/when/if/else, etc. You need to remove the extra brackets you put in there.
Text(
text = stringResource(id =
when (item.route) {
"menu_screen" -> R.string.menu
"orders_screen" -> R.string.orders
else -> R.string.orders
}
),
textAlign = TextAlign.Center
)
Some other languages (such as Java) let you surround code with brackets to limit the scope of variables declared inside or to compute something that takes multiple expressions. To do this in Kotlin, you have to use a scope inline function such as run { }.
Solution 2:[2]
Just remove the extra curly brace ;)
Text(
text = stringResource(id =
when (item.route) {
"menu_screen" -> R.string.menu
"orders_screen" -> R.string.orders
else -> R.string.orders
}
),
textAlign = TextAlign.Center
)
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Tenfour04 |
| Solution 2 | nglauber |
