есть пункты меню по которым происходит нажатие то обработка нажатий а точней их логика где должна происходить?
ну типа вот есть
conButton(onClick = {/* Handle action icon click */ }) {
сюда добавлять еще viewModel?
Ну типа ровно так же, как кнопке назад в АПП барe передается действие назад
ну там я использую navController.popBackStack() а мне к примеру надо добавлять пост в избранное и это по хорошему какой то метод viewModel который содержит логику но viewModel на уровне навигации у меня же нет
Не совсем понял, что значит вм на уровне навигации
https://gist.github.com/mnewlive/176600b31ea5e7d7e7ace2549005cf18 тут самая большая проблема где обрабатывать логику кликов на LeftAlignedTopAppBar
По моему стоит передавать просто композабл через actions подобно тому, как это делает гугл. И потом что-то вроде AppBar(... actions = { IconButton(onClick = { viewModel.someAction() }) {...}}). То есть в самом АПП баре ничего не обрабатывать из логики, а просто выделить место и обработать дизайн.
так откуда AppBar знает про viewModel? нету же референса
val viewModel: SomeViewModel = viewModel() Scaffold(topBar = { AppBar(/*тута вью модель юзаем*/) }) {...}
Ну либо в качестве параметра передавать
ну так а на сколько ок вызывать AppBar в своем экране таким образом? каждый раз порисовывать ручками? ну то есть у меня в зависимости от topLevelNavigation прорисовывается тот или иной AppBar а сейчас получается что нужно его дополнительно добавлять в каждый экран как будто бы так себе
Можно сделать один комбинированный композабл, в котором АПП бары заменяются через when и его вызвать в скаффолде уже, передав нужные параметры
Добавить лямбду которая принимает id нажатого экшена, так апп бар будет реюзабельным
примера под боком нет? щас поищу тоже
TopAppBar( onItemSelected: (itemId: Int) -> Unit, ) { ... }
ну так а метод в скрине как я могу реализовать если у меня аппбар не в скрине находится
Ну так же как с onClick'ами, например прокидывать от родителя
Обсуждают сегодня