Runt
2025-08-30 d974ad35af0aa4585091303256dbe221fe04a1fb
libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt
@@ -29,8 +29,10 @@
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Constraints
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.window.Dialog
@@ -44,6 +46,32 @@
 * @purpose
 * @date 5/18/25
 */
/**
 * 超出父容器
 */
@Composable
fun UnboundedBox(
    modifier: Modifier = Modifier,
    content: @Composable () -> Unit
) {
    Layout(content, modifier) { measurables, parent ->
        // 给子树宽高用"无限"上限测量
        val loose = Constraints(
            minWidth = 0, minHeight = 0,
            maxWidth = Int.MAX_VALUE, maxHeight = Int.MAX_VALUE
        )
        val placeables = measurables.map { it.measure(loose) }
        // 自己仍按父约束的大小布局(不撑爆父)
        val w = parent.maxWidth
        val h = parent.maxHeight
        layout(w, h) {
            // 放在(0,0)。如需往外探出,可用负偏移:placeRelative(-50, 0)
            placeables.forEach { it.placeRelative(0, 0) }
        }
    }
}
@Composable
fun LoadingDialog( loadingState : LoadingState) {
@@ -77,7 +105,6 @@
            Log.i("PublicViews" , "MessageDialog: onDismiss")
            if(message.touchOutside){
                message.setDismiss.invoke()
                message.onCancelRequest.invoke()
                message.onDismissRequest.invoke()
            }
        }) {
@@ -108,11 +135,11 @@
                        if(!message.cancelText.equals("")){
                            Spacer(modifier = Modifier.weight(1f))
                            Button(onClick = {
                                message.onCancelRequest.invoke()
                                if(message.cancelDissmiss){
                                    message.setDismiss.invoke()
                                    message.onDismissRequest.invoke()
                                }
                                message.onCancelRequest.invoke()
                            },
                                colors = ButtonDefaults.buttonColors(
                                    containerColor = Color.Gray,      // 背景色
@@ -124,11 +151,11 @@
                        }
                        Spacer(modifier = Modifier.weight(1f))
                        Button(onClick = {
                            message.onConfirmRequest.invoke()
                            if(message.confirmDissmiss){
                                message.setDismiss.invoke()
                                message.onDismissRequest.invoke()
                            }
                            message.onConfirmRequest.invoke()
                        }) {
                            Text(text = message.confirmText)
                        }