mattinger
01/11/2022, 7:03 PMclass BottomSheetDialogFragmentBridge: BottomSheetDialogFragment() {
private var content: @Composable () -> Unit = { }
var isCanceledOnTouchOutside: Boolean = true
fun setContent(c: @Composable () -> Unit) {
content = c
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return ComposeView(requireContext()).apply {
setContent {
content()
}
}
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return super.onCreateDialog(savedInstanceState).apply {
setCancelable(isCancelable)
setCanceledOnTouchOutside(isCanceledOnTouchOutside)
}
}
}
@Composable
fun BottomSheetDialogBridge(
tag: String,
cancelable: Boolean,
canceledOnTouchOutside: Boolean,
content: @Composable () -> Unit
) {
val context = LocalContext.current
(context as? FragmentActivity)?.let { activity ->
val dialog = remember { mutableStateOf<BottomSheetDialogFragment?>(null) }
dialog.value = BottomSheetDialogFragmentBridge().apply {
setContent(content)
isCancelable = cancelable
isCanceledOnTouchOutside = canceledOnTouchOutside
}
DisposableEffect(key1 = tag) {
dialog.value?.show(activity.supportFragmentManager, tag)
onDispose {
dialog.value?.dismiss()
}
}
}
}
Ian Lake
01/11/2022, 7:06 PMmattinger
01/11/2022, 7:14 PMChris Sinco [G]
01/12/2022, 6:49 AM