Минимизированный пример кода
@Composable
fun ScreenView(
data: ScreenViewData,
) {
val focusManager = LocalFocusManager.current
val focusRequester = remember {
FocusRequester()
}
LaunchedEffect(
key1 = Unit,
) {
focusRequester.requestFocus()
}
Scaffold() { innerPadding ->
Column {
OutlinedTextField(
modifier = Modifier.focusRequester(focusRequester),
)
}
}
}
Код работает без проблем.
Но при тестировании пользовательского интерфейса я получаю следующую ошибку.
java.lang.IllegalStateException:
FocusRequester не инициализирован. Вот несколько возможных исправлений:
- Запомните FocusRequester: val focusRequester = помните { FocusRequester() }
- Вы забыли добавить Modifier.focusRequester() ?
- Вы пытаетесь запросить фокус во время композиции? Запросы на фокусировку должны быть сделаны
в ответ на какое-либо событие. Например, Modifier.clickable { focusRequester.requestFocus() }
@ExperimentalAnimationApi
class ScreenViewTest {
@get:Rule
val composeTestRule = createComposeRule()
@ExperimentalMaterialApi
@Test
fun ScreenViewElementsAreDisplayed() {
composeTestRule.setContent {
MyAppTheme {
ScreenView(
data = ScreenViewData(),
)
}
}
// Test fails before reaching assert statements
}
}
Подробнее здесь: https://stackoverflow.com/questions/699 ... ck-compose