#android #android-jetpack-compose
#Android #android-jetpack-compose
Вопрос:
@Composable
fun Root() {
Scaffold(
floatingActionButton = {
FloatingActionButton(onClick = {}) {
Icon(Icons.Filled.Favorite)
}
}
) {
Child()
}
}
@Composable
fun Child() {
var textField1 by remember { mutableStateOf("") }
TextField(value = textField1, onValueChange = {textField1 = it})
val validateAndMakeNetworkRequest = {
}
}
Как я могу позвонить validateAndMakeNetworkRequest
с плавающей кнопки действия без подъема состояния?
Приведенный выше пример кода, Child
composable может быть очень глубоким
Ответ №1:
На самом деле, вы этого не делаете. В Jetpack Compose мы на самом деле не вызываем функции, есть плагин gradle, который творит какую-то магию, чтобы упростить наш код, но на самом деле происходит то, что мы говорим среде выполнения «эй, это функция, которую я хочу вызвать», и среда выполнения вызывает ее столько раз, сколько нужно.считает нужным составить экран.
Легко заметить, что если вы Log.d("some", "thing")
используете внутри составной функции, приложение может регистрировать ее много раз, даже если мы ничего не делаем.
Я знаю, что вам грустно «без подъема состояния», но это не так, как работает декларативно. Вам нужно логическое значение, хранящееся в состоянии, и «если», используя его, независимо от того, вызывать composable или нет.
В случае сетевого запроса вы можете разделить его в обычной функции и вызвать его внутри себя FloatingActionButton
onClick
.