Основное содержимое 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
Мобильная версия