当基本 URL 未更改 Jetpack Compose 时如何正确导航 Web 视图

问题描述 投票:0回答:1

我有一个带有后退按钮的导航栏,可以正确导航我的应用程序。有一个打开 Web 视图的屏幕,我尝试编辑导航栏,以便它先在 Web 视图中导航,然后再返回应用程序。

但是,我不知道如何让它识别 url.com/start 与 url.com/ DifferentSection 不同。除非整个 url 发生变化(例如 diffURL.com),否则我找到的任何方法都无法识别浏览同一基本 url 的不同部分。我假设我用来识别更改的任何内置函数仅在存在完整页面重定向时运行。

我废弃了所有代码并重新开始,因此任何对此的开始建议都会很棒。

kotlin navigation android-jetpack-compose android-webview android-jetpack-compose-material3
1个回答
0
投票

要在 Jetpack Compose 中导航回应用程序之前处理 WebView 中的导航,您需要分别管理 WebView 的后退导航和应用程序的后退导航。这是实现此目的的简化方法:

  1. 处理WebView导航:当WebView可以在其历史记录中导航回来时,您需要拦截后退按钮按下。
  2. 处理应用程序导航:当 WebView 无法向后导航时,后退按钮应在您的应用程序中向后导航。

我在下面附上了示例可组合项

@Composable
fun WebViewScreen(
    url: String,
    onBackPressed: () -> Unit
) {
    var webView: WebView? by remember { mutableStateOf(null) }

    BackHandler(enabled = webView?.canGoBack() == true) {
        webView?.goBack()
    }

    AndroidView(
        modifier = Modifier.fillMaxSize(),
        factory = { context ->
            WebView(context).apply {
                webViewClient = WebViewClient()
                loadUrl(url)
                webView = this
            }
        }
    )

    LaunchedEffect(Unit) {
        snapshotFlow { webView?.canGoBack() }
            .collect { canGoBack ->
                if (canGoBack == false) {
                    onBackPressed()
                }
            }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.