- Code bereinigt

- MapView in MapSegment ausgelagert
This commit is contained in:
2026-01-13 16:23:04 +01:00
parent f5ac96807c
commit 97d86523ab
3 changed files with 161 additions and 41 deletions

View File

@@ -18,6 +18,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.FilterAlt
import androidx.compose.material.icons.filled.FormatListNumbered
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material3.*
import androidx.compose.runtime.*
@@ -44,9 +45,8 @@ import kotlinx.coroutines.Dispatchers
fun MainScreen(modifier: Modifier = Modifier, application: Application) {
var showReport by rememberSaveable { mutableStateOf(false) }
var sliderOpen by remember { mutableStateOf(false) }
// ViewModel Initialisierung
val mapViewModel = remember { MapViewModel(application) }
val albumViewModel = remember { AlbumViewModel(Dispatchers.Default) }
Scaffold(
modifier = Modifier.fillMaxSize(),
@@ -63,19 +63,26 @@ fun MainScreen(modifier: Modifier = Modifier, application: Application) {
},
floatingActionButton = {
LargeFloatingActionButton(
onClick = { showReport = true; sliderOpen = false },
onClick = {
showReport = true
sliderOpen = false
},
modifier = Modifier.offset(y = 64.dp),
containerColor = ButtonColor
) { Icon(Icons.Default.Add, contentDescription = "Add") }
) {
Icon(Icons.Default.Add, contentDescription = "Add")
}
},
floatingActionButtonPosition = FabPosition.Center,
) { innerPadding ->
ContentScreen(
modifier = Modifier.padding(innerPadding),
mapViewModel = mapViewModel,
mapViewModel,
albumViewModel,
showReport = showReport,
sliderOpen = sliderOpen,
onDismissReport = { showReport = false })
onDismissReport = { showReport = false }
)
}
}
@@ -83,26 +90,20 @@ fun MainScreen(modifier: Modifier = Modifier, application: Application) {
fun ContentScreen(
modifier: Modifier = Modifier,
mapViewModel: MapViewModel,
albumViewModel: AlbumViewModel,
showReport: Boolean,
sliderOpen: Boolean,
onDismissReport: () -> Unit
) {
val albumViewModel = remember { AlbumViewModel(Dispatchers.Default) }
val locationDisplay = setupLocationDisplay()
// VERBINDUNG ZUM VIEWMODEL (Hier wird das GPS-Werkzeug übergeben)
LaunchedEffect(locationDisplay) {
mapViewModel.locationDisplay = locationDisplay
}
Box(modifier = modifier.fillMaxSize()) {
MapView(
// HINTERGRUND: Die Map
MapSegment(
modifier = Modifier.fillMaxSize(),
arcGISMap = mapViewModel.map,
mapViewProxy = mapViewModel.mapViewProxy,
locationDisplay = locationDisplay
mapViewModel = mapViewModel,
)
// VORDERGRUND: Das Overlay (wenn showReport = true)
if (showReport) {
ReportOverlay(
onCancel = onDismissReport,
@@ -118,18 +119,29 @@ fun ContentScreen(
)
}
// Slider von Links
SideSlider(visible = sliderOpen) {
SliderMenuItem(text = "Schäden filtern", icon = Icons.Default.FilterAlt, onClick = {})
}
Text(
"Menü",
style = MaterialTheme.typography.titleMedium,
modifier = Modifier.padding(bottom = 12.dp)
)
if (mapViewModel.snackBarMessage.isNotEmpty()) {
Snackbar(modifier = Modifier.align(Alignment.BottomCenter).padding(bottom = 80.dp)) {
Text(mapViewModel.snackBarMessage)
}
LaunchedEffect(mapViewModel.snackBarMessage) {
kotlinx.coroutines.delay(4000)
mapViewModel.snackBarMessage = ""
}
SliderMenuItem(
text = "Schäden filtern",
icon = Icons.Default.FilterAlt,
onClick = {
/* TODO */
}
)
SliderMenuItem(
text = "Schadensliste",
icon = Icons.Default.FormatListNumbered,
onClick = {
/* TODO */
}
)
}
}
}
@@ -349,10 +361,4 @@ fun ReportOverlay(
}
}
}
}
fun createMap(): ArcGISMap {
return ArcGISMap(BasemapStyle.ArcGISTopographic).apply {
initialViewpoint = Viewpoint(53.14, 8.20, 20000.0)
}
}