refactor(webview): 重构WebView组件实现

- 将rememberSaveable导入路径修正到saveable包下
- 移除未使用的Log导入并添加ViewGroup导入
- 添加FrameLayout用于WebView容器包装
- 使用FrameLayout作为WebView的父容器以改善布局控制
- 更新AndroidView的factory和update回调中的WebView引用方式
- 通过容器视图统一管理WebView生命周期和布局参数
- 更新发布版本号从0.4.9到0.4.10
这个提交包含在:
XuqmGroup 2026-05-11 18:58:51 +08:00
父节点 9e9b41fedb
当前提交 0fdfc048e7
共有 3 个文件被更改,包括 18 次插入8 次删除

查看文件

@ -2,4 +2,4 @@ org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
android.useAndroidX=true
kotlin.code.style=official
android.nonTransitiveRClass=true
PUBLISH_VERSION=0.4.9
PUBLISH_VERSION=0.4.10

查看文件

@ -17,8 +17,8 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.rememberSaveable
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalClipboardManager

查看文件

@ -6,7 +6,7 @@ import android.content.pm.PackageManager
import android.net.Uri
import android.os.Handler
import android.os.Looper
import android.util.Log
import android.view.ViewGroup
import android.webkit.JavascriptInterface
import android.webkit.PermissionRequest
import android.webkit.ValueCallback
@ -14,6 +14,7 @@ import android.webkit.WebChromeClient
import android.webkit.WebResourceRequest
import android.webkit.WebViewClient
import android.webkit.WebView
import android.widget.FrameLayout
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.runtime.Composable
@ -201,7 +202,7 @@ fun XWebViewView(
AndroidView(
modifier = modifier,
factory = { ctx ->
WebView(ctx).apply {
val wv = WebView(ctx).apply {
settings.javaScriptEnabled = true
settings.domStorageEnabled = true
settings.useWideViewPort = true
@ -279,12 +280,21 @@ fun XWebViewView(
if (config.url.isNotBlank()) {
loadUrl(config.url)
}
webView = this
}
webView = wv
val container = FrameLayout(ctx)
container.addView(wv, FrameLayout.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
))
container
},
update = { view ->
if (view.url.isNullOrBlank() && config.url.isNotBlank()) {
view.loadUrl(config.url)
update = { container ->
val wv = (container as? FrameLayout)?.getChildAt(0) as? WebView ?: return@AndroidView
if (wv.url.isNullOrBlank() && config.url.isNotBlank()) {
wv.loadUrl(config.url)
}
},
)