Как я могу добиться многооконности в Compose Desktop
Я пытаюсь создать многооконное настольное приложение с композицией.
У них будут совершенно разные экраны. Один будет основным экраном, а другой будет вспомогательным экраном. Я пробовал так.
Дополнительный экран предназначался для отображения некоторым потоком состояний внутри общего презентатора, который будет вызываться как true на главном экране, но чтобы сделать код кратким, я вырезал эту часть.
fun main() = application {
val windowState = rememberWindowState()
val subWindowState = rememberWindowState()
var isVisible by remember { mutableStateOf(true) }
var isSubScreenVisible by remember { mutableStateOf(false) }
val onVisibilityChanged : (Boolean) -> Unit = {
isVisible = it
}
setTray(this) {
isVisible = it
}
//Sub screen
Window(onCloseRequest = {
isSubScreenVisible = false
},
title = "SubScreen",
state = subWindowState,
undecorated = true,
resizable = false,
visible = isSubScreenVisible,
transparent = true) {
} {
AppTheme(darkTheme = false) {
//my sub screen composable..
}
}
//Main Screen
Window(
onCloseRequest = {
onVisibilityChanged(false)
},
icon = painterResource("logo.png"),
title = "Main Screen",
state = windowState,
undecorated = true,
resizable = false,
visible = isVisible,
transparent = true
){
AppTheme(darkTheme = false) {
val rootState by mPresenter.mRootState.collectAsState()
when(rootState){
is RootState.Splash -> {
showMessage("[RootNav] Splash")
Splash(this, mPresenter)
}
is RootState.NotLoggedIn -> {
showMessage("[RootNav] Login")
Login(mPresenter, this, windowState, onVisibilityChanged)
}
is RootState.LoggedIn -> {
showMessage("[RootNav] Main")
MainFrame(this, windowState, onVisibilityChanged)
}
}
}
}
}
Этот код приводит к этому исключению.
Exception in thread "main" java.awt.IllegalComponentStateException: The frame is displayable.
Эта ошибка возникает в окне главного экрана, и ничего не отображается.
Что это вообще означает? Разрешено ли несколько окон, поскольку есть что-то вроде SingleWindowApplication?
Что я могу сделать ?