Использование новой библиотеки навигации 3. Я пытаюсь охватить один ViewModel до 2 композиционных товаров. Этот код взят из рецептов NAV 3 и отредактирован для достижения того, что я описал. < /P>
setContent {
val backStack = remember { mutableStateListOf(RouteA) }
var localstoreowner: ViewModelStoreOwner? = null
NavDisplay(
backStack = backStack,
onBack = { backStack.removeLastOrNull() },
entryDecorators = listOf(
rememberSceneSetupNavEntryDecorator(),
rememberSavedStateNavEntryDecorator(),
rememberViewModelStoreNavEntryDecorator()
),
entryProvider = { key ->
when (key) {
is RouteA -> NavEntry(key) {
localstoreowner = LocalViewModelStoreOwner.current
localstoreowner?.let {
ContentGreen(
viewModelStoreOwner = it,
title = "Welcome to Nav3"
) {
Button(onClick = {
backStack.add(RouteB("123"))
}) {
Text("Click to navigate")
}
}
}
}
is RouteB -> NavEntry(key) {
localstoreowner?.let {
ContentUuuu(viewModelStoreOwner = it, "Route id: ${key.id} ")
}
}
else -> {
error("Unknown route: $key")
}
}
}
)
}
< /code>
Оба эти экрана делают то же самое, создайте Uuuviewmodel и покажите UI < /p>
@Composable
fun ContentGreen(
title: String,
viewModelStoreOwner: ViewModelStoreOwner,
modifier: Modifier = Modifier,
onNext: (() -> Unit)? = null,
content: (@Composable () -> Unit)? = null,
) = ContentBase(
viewmodel = viewModel(viewModelStoreOwner),
title = title,
modifier = modifier.background(PastelGreen),
onNext = onNext,
content = content
)
@Composable
fun ContentUuuu(
viewModelStoreOwner: ViewModelStoreOwner,
title: String,
modifier: Modifier = Modifier,
onNext: (() -> Unit)? = null,
content: (@Composable () -> Unit)? = null,
) = ContentBase(
viewmodel = viewModel(viewModelStoreOwner),
title = title,
modifier = modifier.background(PastelBlue),
onNext = onNext,
content = content
)
< /code>
Но то, как я использую ViewModelStoreOwner, явно неверен. Я просто сохраняю его на локальную переменную, когда на маршруте и получаю, когда на Routeb. Есть ли какой -то системный механизм, который справляется с этим? В навигации 2 каждый обратный удар также будет ViewModelStoreOwner, но здесь вы работаете только с ключами.
Подробнее здесь: https://stackoverflow.com/questions/796 ... vigation-3
Как область применения ViewModel в несколько композиции с использованием новой навигации 3 ⇐ Android
Форум для тех, кто программирует под Android
1756915022
Anonymous
Использование новой библиотеки навигации 3. Я пытаюсь охватить один ViewModel до 2 композиционных товаров. Этот код взят из рецептов NAV 3 и отредактирован для достижения того, что я описал. < /P>
setContent {
val backStack = remember { mutableStateListOf(RouteA) }
var localstoreowner: ViewModelStoreOwner? = null
NavDisplay(
backStack = backStack,
onBack = { backStack.removeLastOrNull() },
entryDecorators = listOf(
rememberSceneSetupNavEntryDecorator(),
rememberSavedStateNavEntryDecorator(),
rememberViewModelStoreNavEntryDecorator()
),
entryProvider = { key ->
when (key) {
is RouteA -> NavEntry(key) {
localstoreowner = LocalViewModelStoreOwner.current
localstoreowner?.let {
ContentGreen(
viewModelStoreOwner = it,
title = "Welcome to Nav3"
) {
Button(onClick = {
backStack.add(RouteB("123"))
}) {
Text("Click to navigate")
}
}
}
}
is RouteB -> NavEntry(key) {
localstoreowner?.let {
ContentUuuu(viewModelStoreOwner = it, "Route id: ${key.id} ")
}
}
else -> {
error("Unknown route: $key")
}
}
}
)
}
< /code>
Оба эти экрана делают то же самое, создайте Uuuviewmodel и покажите UI < /p>
@Composable
fun ContentGreen(
title: String,
viewModelStoreOwner: ViewModelStoreOwner,
modifier: Modifier = Modifier,
onNext: (() -> Unit)? = null,
content: (@Composable () -> Unit)? = null,
) = ContentBase(
viewmodel = viewModel(viewModelStoreOwner),
title = title,
modifier = modifier.background(PastelGreen),
onNext = onNext,
content = content
)
@Composable
fun ContentUuuu(
viewModelStoreOwner: ViewModelStoreOwner,
title: String,
modifier: Modifier = Modifier,
onNext: (() -> Unit)? = null,
content: (@Composable () -> Unit)? = null,
) = ContentBase(
viewmodel = viewModel(viewModelStoreOwner),
title = title,
modifier = modifier.background(PastelBlue),
onNext = onNext,
content = content
)
< /code>
Но то, как я использую ViewModelStoreOwner, явно неверен. Я просто сохраняю его на локальную переменную, когда на маршруте и получаю, когда на Routeb. Есть ли какой -то системный механизм, который справляется с этим? В навигации 2 каждый обратный удар также будет ViewModelStoreOwner, но здесь вы работаете только с ключами.
Подробнее здесь: [url]https://stackoverflow.com/questions/79660607/how-to-scope-viewmodel-to-multiple-composables-using-new-navigation-3[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия