Должна ли ViewModel жить так же долго, как и все приложение? ViewModel внутри Scaffold с BottomSheet + Google MapsAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Должна ли ViewModel жить так же долго, как и все приложение? ViewModel внутри Scaffold с BottomSheet + Google Maps

Сообщение Anonymous »

Я создаю приложение Jetpack Compose, которое использует Scaffold с постоянным нижним листом.

Основное содержимое Scaffold показывает Google Maps, а нижний лист показывает меню.
У меня есть MapViewModel, который загружает маркеры из API. Составной элемент MapScreen отображает эти маркеры на карте Google.
Поскольку карта существует на нескольких экранах и пользователь может переключать вкладки на нижнем листе, я хочу, чтобы маркеры карты оставались загруженными. Мой вопрос:
Должна ли эта MapViewModel существовать так же долго, как и все приложение?

Код: Выделить всё

class MapViewModel(
private val repository: PlaneRepository
) : ViewModel() {

private val _planes = MutableStateFlow(emptyList())
val planes = _planes.asStateFlow()

init {
loadPlanePositions()
}

fun loadPlanePositions() {
viewModelScope.launch {
_planes.value = repository.fetchPlanePositions()
}
}
}

@Composable
fun AeroplaneApp() {
val bottomSheetState = rememberBottomSheetScaffoldState()

BottomSheetScaffold(
scaffoldState = bottomSheetState,
sheetContent = {
MenuSheetContent()
}
) {
MapScreen()
}
}

@Composable
fun MapScreen(viewModel: MapViewModel = viewModel()) {
val planes by viewModel.planes.collectAsStateWithLifecycle()

GoogleMap(
modifier = Modifier.fillMaxSize()
) {
planes.forEach { plane ->
Marker(
state = MarkerState(position = plane.latLng),
title = plane.id
)
}
}
}

data class Aeroplane(
val id: String,
val latLng: LatLng
)

interface PlaneRepository {
suspend fun fetchPlanePositions(): List
}
Вопросы
Должна ли ViewModel соответствовать времени жизни всего приложения? Если нет, что мне делать?
Каков наилучший метод определения области действия ViewModel в этой архитектуре?

Подробнее здесь: https://stackoverflow.com/questions/798 ... affold-wit
Ответить

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

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

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

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

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