refactor: split out mapstate
This commit is contained in:
parent
b376e7da5b
commit
c26e522a2e
3 changed files with 21 additions and 15 deletions
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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(),
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue