refactor: split out mapstate

This commit is contained in:
LavaDesu 2025-07-28 22:31:26 +10:00
parent b376e7da5b
commit c26e522a2e
Signed by: cilly
GPG key ID: 6500251E087653C9
3 changed files with 21 additions and 15 deletions

View file

@ -74,6 +74,7 @@ fun App(
val state by viewModel.state.collectAsStateWithLifecycle()
val infoState by viewModel.infoState.collectAsStateWithLifecycle()
val mapState by viewModel.mapState.collectAsStateWithLifecycle()
val scaffoldState = rememberBottomSheetScaffoldState(
bottomSheetState = rememberStandardBottomSheetState(
@ -139,9 +140,9 @@ fun App(
extInsets = WindowInsets(top = with(LocalDensity.current) {
SearchBarDefaults.InputFieldHeight.roundToPx()
}, bottom = extInsets),
markers = state.markers,
markers = mapState.markers,
setLastKnownLocation = viewModel::setLastKnownLocation,
polylines = state.polylines,
polylines = mapState.polylines,
)
Searcher(
routes = state.routes,

View file

@ -26,6 +26,7 @@ import moe.lava.banksia.native.maps.MarkerType
import moe.lava.banksia.native.maps.Point
import moe.lava.banksia.native.maps.Polyline
import moe.lava.banksia.ui.state.InfoPanelState
import moe.lava.banksia.ui.state.MapState
import moe.lava.banksia.util.BoxedValue
import moe.lava.banksia.util.BoxedValue.Companion.box
@ -33,8 +34,6 @@ sealed class BanksiaEvent {}
data class BanksiaViewState(
val routes: List<PtvRoute> = listOf(),
val markers: List<Marker> = listOf(),
val polylines: List<Polyline> = listOf(),
)
class BanksiaViewModel : ViewModel() {
@ -44,13 +43,15 @@ class BanksiaViewModel : ViewModel() {
private val iInfoState = MutableStateFlow<InfoPanelState>(InfoPanelState.None)
val infoState = iInfoState.asStateFlow()
private val iMapState = MutableStateFlow(MapState())
val mapState = iMapState.asStateFlow()
private val iCameraChangeEmitter = MutableSharedFlow<BoxedValue<CameraPosition>>()
val cameraChangeEmitter = iCameraChangeEmitter.asSharedFlow()
private val ptvService = PtvService()
private var locationTrackerJob: Job? = null
private var lastKnownLocation: Point? = null
private val iCameraChangeEmitter = MutableSharedFlow<BoxedValue<CameraPosition>>()
val cameraChangeEmitter = iCameraChangeEmitter.asSharedFlow()
init {
viewModelScope.launch {
requestRoutes()
@ -90,12 +91,7 @@ class BanksiaViewModel : ViewModel() {
}
fun switchRoute(route: PtvRoute?) {
iState.update {
it.copy(
markers = listOf(),
polylines = listOf(),
)
}
iMapState.update { MapState() }
iInfoState.update {
if (route == null)
InfoPanelState.None
@ -197,7 +193,7 @@ class BanksiaViewModel : ViewModel() {
else
null
iState.update { it.copy(polylines = polylines) }
iMapState.update { it.copy(polylines = polylines) }
newCameraPosition?.let { iCameraChangeEmitter.emit(it.box()) }
}
@ -241,7 +237,7 @@ class BanksiaViewModel : ViewModel() {
}
}
iState.update { it.copy(markers = markers) }
iMapState.update { it.copy(markers = markers) }
}
private fun buildBounds(points: List<Point>): CameraPositionBounds {

View file

@ -0,0 +1,9 @@
package moe.lava.banksia.ui.state
import moe.lava.banksia.native.maps.Marker
import moe.lava.banksia.native.maps.Polyline
data class MapState(
val markers: List<Marker> = listOf(),
val polylines: List<Polyline> = listOf(),
)