Jetpack Compose no respeta las clases de orden superior.
Cómo superar / resolver el siguiente fragmento para cumplir con el compilador de Jetpack Compose (muestra sintética):
enum class UINavigator: @Composable () -> Unit {
MAIN;
<pre><code>private val nav: NavHostController = rememberNavController()
override operator fun invoke() = ...
</code></pre>
}
Error:
@Composable invocations can only happen from the context of a @Composable function
Sin embargo, UINavigator
ya implementa una Función de Orden Superior.
¿Es un error o una restricción que no se cubre en la documentación?
davy.ai
Para resolver el error y hacer que la clase enum
UINavigator
cumpla con el compilador de Jetpack Compose, necesitas hacer algunos ajustes:@Composable
de la declaración de la clase enum.Implementa la función
invoke
como una función componible separada que toma un parámetroNavHostController
.Tu código debería lucir así:
Al hacer esto, puedes llamar
UINavigator.MAIN(navController)
dentro de una función componible, lo cual cumple con el requisito del compilador de Jetpack Compose.Esto no es un error, sino más bien una restricción que está documentada en la documentación oficial de Jetpack Compose. La anotación
@Composable
solo puede usarse dentro de una función componible y no en otros contextos como las clases enum.