steelahhh
02/12/2021, 11:04 AMjava.lang.IllegalArgumentException: Anchor refers to a group that was removed
when interacting with a TextField inside of the dialog. Specifically when TextField is focused
Stack trace and the sample in the thread 🧵steelahhh
02/12/2021, 11:04 AMColumn(
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
var isDialogShowing by remember { mutableStateOf(false) }
Button(onClick = { isDialogShowing = true }) {
Text("Show Dialog")
}
if (isDialogShowing) {
Dialog(onDismissRequest = { isDialogShowing = false }) {
var text by remember { mutableStateOf("") }
Card(Modifier.padding(16.dp)) {
Column(
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
OutlinedTextField(value = text, onValueChange = { text = it })
Button(onClick = { isDialogShowing = false }) {
Text(text = "Done")
}
}
}
}
}
}
steelahhh
02/12/2021, 11:04 AMjava.lang.IllegalArgumentException: Anchor refers to a group that was removed
at androidx.compose.runtime.SlotTable.anchorIndex(SlotTable.kt:199)
at androidx.compose.runtime.Anchor.toIndexFor(SlotTable.kt:466)
at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.getCompositionLocalScope$runtime_release(Composer.kt:3124)
at androidx.compose.runtime.ComposerImpl.startRoot(Composer.kt:1140)
at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:2697)
at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:306)
at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:533)
at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:95)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$4.invoke(Recomposer.kt:423)
at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$4.invoke(Recomposer.kt:397)
at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.kt:34)
at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.kt:112)
at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.kt:43)
at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.kt:72)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1008)
at android.view.Choreographer.doCallbacks(Choreographer.java:809)
at android.view.Choreographer.doFrame(Choreographer.java:740)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
at android.os.Handler.handleCallback(Handler.java:938)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:246)
at android.app.ActivityThread.main(ActivityThread.java:8419)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:596)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
Se7eN
02/15/2021, 3:03 PMJulianK
02/16/2021, 12:14 PMArkadii Ivanov
02/17/2021, 3:23 PMArkadii Ivanov
02/17/2021, 3:24 PMCard
steelahhh
02/17/2021, 4:02 PMColumn(
modifier = Modifier.fillMaxSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
var isDialogShowing by remember { mutableStateOf(false) }
var isInputEnabled by remember { mutableStateOf(true) }
val keyboardController: Ref<SoftwareKeyboardController?> by remember { mutableStateOf(Ref()) }
fun clearTextFieldFocus() {
keyboardController.value?.hideSoftwareKeyboard()
isInputEnabled = false
}
Button(onClick = { isDialogShowing = true }) {
Text("Show Dialog")
}
if (isDialogShowing) {
Dialog(
properties = DialogProperties(
dismissOnBackPress = false,
),
onDismissRequest = {
clearTextFieldFocus()
isDialogShowing = false
},
) {
Card(Modifier.padding(16.dp)) {
var text by remember { mutableStateOf("") }
LaunchedEffect(Unit) {
isInputEnabled = true
}
Column(
verticalArrangement = Arrangement.spacedBy(16.dp),
) {
OutlinedTextField(
value = text,
onValueChange = { text = it },
enabled = isInputEnabled,
onTextInputStarted = {
keyboardController.value = it
},
keyboardOptions = KeyboardOptions(imeAction = ImeAction.Done),
keyboardActions = KeyboardActions(
onDone = { clearTextFieldFocus() }
),
)
Button(
onClick = {
clearTextFieldFocus()
isDialogShowing = false
}
) {
Text(text = "Done")
}
}
}
}
}
}
steelahhh
02/17/2021, 4:02 PM