Как область применения ViewModel в несколько композиции с использованием новой навигации 3Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как область применения ViewModel в несколько композиции с использованием новой навигации 3

Сообщение 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, но здесь вы работаете только с ключами.

Подробнее здесь: https://stackoverflow.com/questions/796 ... vigation-3
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»