Advertisement
ZelimkhanMezhidov

Untitled

Mar 30th, 2022
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.34 KB | None | 0 0
  1. @ExperimentalComposeUiApi
  2. @Composable
  3. fun MapScreen(navController:NavHostController, viewModel: MapScreenVM = hiltViewModel()) {
  4.  
  5.     var uiSettings by remember { mutableStateOf(MapUiSettings(zoomControlsEnabled = false)) }
  6.     val properties by remember { mutableStateOf(MapProperties(mapType = MapType.SATELLITE)) }
  7.     var addresses by remember { mutableStateOf<List<AddressModel>>(emptyList())}
  8.     var dropdownExpanded by remember { mutableStateOf(false) }
  9.     var selectedIndex by remember { mutableStateOf(0) }
  10.     var selectedAddress by remember { mutableStateOf("") }
  11.     val scope = rememberCoroutineScope()
  12.  
  13.  
  14.     Box(modifier = Modifier.fillMaxSize())
  15.     {
  16.         val grozny = LatLng(43.312, 45.6889)
  17.         val cameraPositionState = rememberCameraPositionState { position = CameraPosition.fromLatLngZoom(grozny, 13f) }
  18.         val geocoder = Geocoder(LocalContext.current)
  19.         var addressesFromMap: List<Address> = geocoder.getFromLocation(cameraPositionState.position.target.latitude, cameraPositionState.position.target.longitude, 1)
  20.         val mapCurrentAddress = addressesFromMap[0].getAddressLine(0)
  21.  
  22.         GoogleMap(
  23.             modifier = Modifier.fillMaxSize(),
  24.             cameraPositionState = cameraPositionState,
  25.             uiSettings = uiSettings)
  26.         {
  27.             Marker(position = cameraPositionState.position.target,)
  28.         }
  29.  
  30.             Column(
  31.                 horizontalAlignment = Alignment.CenterHorizontally,
  32.                 modifier = Modifier
  33.                     .fillMaxWidth()
  34.                     .clip(shape = RoundedCornerShape(30.dp))
  35.                     .padding(top = 60.dp, start = 10.dp, end = 10.dp)
  36.                     .statusBarsPadding()
  37.                     .align(Alignment.TopCenter))
  38.             {
  39.                 DropdownMenu(
  40.                     expanded = dropdownExpanded,
  41.                     onDismissRequest = { dropdownExpanded = false },
  42.                     properties = PopupProperties(focusable = false),
  43.                     modifier = Modifier
  44.                         .fillMaxWidth()
  45.                         .background(Color.Transparent))
  46.                 {
  47.                     addresses.forEachIndexed { index, item ->
  48.                         Column {
  49.                             DropdownMenuItem(
  50.                                 onClick = {
  51.                                     selectedIndex = index
  52.                                     selectedAddress = item.value
  53.                                     dropdownExpanded = false })
  54.                             {
  55.                                 Text(
  56.                                     text = item.value ,
  57.                                     style = MaterialTheme.typography.h4,
  58.                                     fontSize = 18.sp,
  59.                                     modifier = Modifier.fillMaxWidth())
  60.                             }
  61.                             Divider()
  62.                         }
  63.                     }
  64.                 }
  65.             }
  66.  
  67.             AddressSearchCard(modifier = Modifier
  68.                 .fillMaxWidth()
  69.                 .align(Alignment.TopCenter)
  70.                 .padding(horizontal = 10.dp)
  71.                 .statusBarsPadding(),
  72.                 address = selectedAddress,
  73.                 onChange = { txt ->
  74.                     dropdownExpanded = txt.isNotEmpty()
  75.                     selectedAddress = txt
  76.                     viewModel.getAddresses(
  77.                         success = {  addresses = it },
  78.                         address = txt)
  79.                 },
  80.                 clearAddress = { selectedAddress = "" })
  81.  
  82.             BottomAddressCard(
  83.                 title = stringResource(R.string.map_card_txt1),
  84.                 address =  if(selectedAddress.isEmpty()) mapCurrentAddress else selectedAddress,
  85.                 modifier = Modifier
  86.                     .align(Alignment.BottomCenter)
  87.                     .padding(start = 10.dp, end = 10.dp, bottom = 80.dp)
  88.                     .navigationBarsPadding(),
  89.                 onClick = {
  90.                     if (selectedAddress.isNotEmpty()) {
  91.                         scope.launch { globalSelectedAddress.emit(selectedAddress) }
  92.                     } else { scope.launch { globalSelectedAddress.emit(mapCurrentAddress) }}
  93.  
  94.                     navController.navigate(Screen.Payment.route)
  95.                 }
  96.             )
  97.     }
  98. }
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement