From d974ad35af0aa4585091303256dbe221fe04a1fb Mon Sep 17 00:00:00 2001
From: Runt <qingingrunt2010@qq.com>
Date: Sat, 30 Aug 2025 17:43:48 +0000
Subject: [PATCH] 超出父容器

---
 libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt |   37 +++++++++++++++++++++++++++++++++++--
 1 files changed, 35 insertions(+), 2 deletions(-)

diff --git a/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt b/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt
index f13f6dc..0208e22 100644
--- a/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt
+++ b/libmvi/src/main/java/com/runt/open/mvi/views/PublicViews.kt
@@ -1,5 +1,6 @@
 package com.runt.open.mvi.views
 
+import android.util.Log
 import androidx.compose.foundation.BorderStroke
 import androidx.compose.foundation.background
 import androidx.compose.foundation.layout.Arrangement
@@ -28,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
@@ -43,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) {
@@ -72,10 +101,12 @@
 fun MessageDialog(message : MessageState){
     if(message.isVisible){
         Dialog(onDismissRequest = {
-            if(message.cancelDissmiss){
+            //系统响应
+            Log.i("PublicViews" , "MessageDialog: onDismiss")
+            if(message.touchOutside){
                 message.setDismiss.invoke()
+                message.onDismissRequest.invoke()
             }
-            message.onDismissRequest.invoke()
         }) {
             Card(
                 modifier = Modifier
@@ -106,6 +137,7 @@
                             Button(onClick = {
                                 if(message.cancelDissmiss){
                                     message.setDismiss.invoke()
+                                    message.onDismissRequest.invoke()
                                 }
                                 message.onCancelRequest.invoke()
                             },
@@ -121,6 +153,7 @@
                         Button(onClick = {
                             if(message.confirmDissmiss){
                                 message.setDismiss.invoke()
+                                message.onDismissRequest.invoke()
                             }
                             message.onConfirmRequest.invoke()
                         }) {

--
Gitblit v1.9.1