Guest User

Untitled

a guest
Apr 21st, 2023
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 4.02 KB | None | 0 0
  1. package clover.companion.ui.widgets
  2.  
  3. import androidx.compose.foundation.layout.Arrangement
  4. import androidx.compose.foundation.layout.Column
  5. import androidx.compose.foundation.layout.Row
  6. import androidx.compose.foundation.layout.Spacer
  7. import androidx.compose.foundation.layout.fillMaxSize
  8. import androidx.compose.foundation.layout.fillMaxWidth
  9. import androidx.compose.foundation.layout.width
  10. import androidx.compose.foundation.lazy.LazyColumn
  11. import androidx.compose.foundation.selection.toggleable
  12. import androidx.compose.material.icons.Icons
  13. import androidx.compose.material.icons.filled.Favorite
  14. import androidx.compose.material3.Button
  15. import androidx.compose.material3.Checkbox
  16. import androidx.compose.material3.Icon
  17. import androidx.compose.material3.ListItem
  18. import androidx.compose.material3.MaterialTheme
  19. import androidx.compose.material3.ModalBottomSheet
  20. import androidx.compose.material3.Text
  21. import androidx.compose.material3.rememberModalBottomSheetState
  22. import androidx.compose.runtime.Composable
  23. import androidx.compose.runtime.getValue
  24. import androidx.compose.runtime.mutableStateOf
  25. import androidx.compose.runtime.remember
  26. import androidx.compose.runtime.rememberCoroutineScope
  27. import androidx.compose.runtime.saveable.rememberSaveable
  28. import androidx.compose.runtime.setValue
  29. import androidx.compose.ui.Alignment
  30. import androidx.compose.ui.Modifier
  31. import androidx.compose.ui.semantics.Role
  32. import androidx.compose.ui.tooling.preview.Preview
  33. import androidx.compose.ui.unit.dp
  34. import kotlinx.coroutines.launch
  35.  
  36. @Composable
  37. @Preview
  38. fun ModalBottomSheetSample() = MaterialTheme{
  39.     var openBottomSheet by rememberSaveable { mutableStateOf(false) }
  40.     var skipPartiallyExpanded by remember { mutableStateOf(false) }
  41.     val scope = rememberCoroutineScope()
  42.     val bottomSheetState = rememberModalBottomSheetState(
  43.         skipPartiallyExpanded = skipPartiallyExpanded
  44.     )
  45.  
  46.     // App content
  47.     Column(
  48.         modifier = Modifier.fillMaxSize(),
  49.         horizontalAlignment = Alignment.CenterHorizontally,
  50.         verticalArrangement = Arrangement.Center
  51.     ) {
  52.         Row(
  53.             Modifier.toggleable(
  54.                 value = skipPartiallyExpanded,
  55.                 role = Role.Checkbox,
  56.                 onValueChange = { checked -> skipPartiallyExpanded = checked }
  57.             )
  58.         ) {
  59.             Checkbox(checked = skipPartiallyExpanded, onCheckedChange = null)
  60.             Spacer(Modifier.width(16.dp))
  61.             Text("Skip partially expanded State")
  62.         }
  63.         Button(onClick = { openBottomSheet = !openBottomSheet }) {
  64.             Text(text = "Show Bottom Sheet")
  65.         }
  66.     }
  67.  
  68.     // Sheet content
  69.     if (openBottomSheet) {
  70.         ModalBottomSheet(
  71.             onDismissRequest = { openBottomSheet = false },
  72.             sheetState = bottomSheetState,
  73.         ) {
  74.             Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.Center) {
  75.                 Button(
  76.                     // Note: If you provide logic outside of onDismissRequest to remove the sheet,
  77.                     // you must additionally handle intended state cleanup, if any.
  78.                     onClick = {
  79.                         scope.launch { bottomSheetState.hide() }.invokeOnCompletion {
  80.                             if (!bottomSheetState.isVisible) {
  81.                                 openBottomSheet = false
  82.                             }
  83.                         }
  84.                     }
  85.                 ) {
  86.                     Text("Hide Bottom Sheet")
  87.                 }
  88.             }
  89.             LazyColumn {
  90.                 items(50) {
  91.                     ListItem(
  92.                         headlineContent = { Text("Item $it") },
  93.                         leadingContent = {
  94.                             Icon(
  95.                                 Icons.Default.Favorite,
  96.                                 contentDescription = "Localized description"
  97.                             )
  98.                         }
  99.                     )
  100.                 }
  101.             }
  102.         }
  103.     }
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment