Skip to content

Commit a0b947b

Browse files
committed
[design] #62 base bottom sheet
1 parent cc44bc5 commit a0b947b

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package com.record.designsystem.component.bottomsheet
2+
3+
import androidx.compose.foundation.layout.ColumnScope
4+
import androidx.compose.material3.ExperimentalMaterial3Api
5+
import androidx.compose.material3.ModalBottomSheet
6+
import androidx.compose.material3.SheetState
7+
import androidx.compose.material3.rememberModalBottomSheetState
8+
import androidx.compose.runtime.Composable
9+
import androidx.compose.runtime.getValue
10+
import androidx.compose.runtime.mutableStateOf
11+
import androidx.compose.runtime.rememberCoroutineScope
12+
import androidx.compose.runtime.saveable.rememberSaveable
13+
import androidx.compose.runtime.setValue
14+
import androidx.compose.ui.graphics.Color
15+
import androidx.compose.ui.graphics.RectangleShape
16+
import androidx.compose.ui.graphics.Shape
17+
import androidx.compose.ui.tooling.preview.Preview
18+
import com.record.designsystem.theme.RecordyTheme
19+
import kotlinx.coroutines.launch
20+
21+
@OptIn(ExperimentalMaterial3Api::class)
22+
@Composable
23+
fun RecordyBottomSheet(
24+
sheetState: SheetState = rememberModalBottomSheetState(
25+
skipPartiallyExpanded = true,
26+
),
27+
isSheetOpen: Boolean,
28+
onDismissRequest: () -> Unit = {},
29+
shape: Shape = RectangleShape,
30+
content: @Composable ColumnScope.() -> Unit,
31+
) {
32+
val scope = rememberCoroutineScope()
33+
if (isSheetOpen) {
34+
ModalBottomSheet(
35+
sheetState = sheetState,
36+
shape = shape,
37+
onDismissRequest = {
38+
scope.launch { sheetState.hide() }
39+
onDismissRequest()
40+
},
41+
containerColor = Color(0xFFE8E8E8),
42+
dragHandle = null,
43+
) {
44+
content()
45+
}
46+
}
47+
}
48+
49+
@OptIn(ExperimentalMaterial3Api::class)
50+
@Preview
51+
@Composable
52+
fun RecordyBottomSheetPreview() {
53+
var isSheetOpen by rememberSaveable { mutableStateOf(false) }
54+
RecordyTheme {
55+
RecordyBottomSheet(
56+
isSheetOpen = true,
57+
onDismissRequest = { isSheetOpen = !isSheetOpen },
58+
content = {},
59+
)
60+
}
61+
}

0 commit comments

Comments
 (0)