与 Jetpack Compose 一起使用时 WebView 在输入时崩溃

WebView crashing on input when used with Jetpack Compose

使用 Jetpack Compose 创建极其简单的 WebView 包装器时,应用程序在我输入任何文本的那一刻崩溃。这是一个错误,还是我在做一些愚蠢的事情?相关代码:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            WebViewC()
        }
    }
}

@Composable
fun WebViewC() {
    return AndroidView(viewBlock = { context ->
        WebView(context).apply {
            layoutParams = ViewGroup.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT,
                ViewGroup.LayoutParams.MATCH_PARENT
            )
            webViewClient = object : WebViewClient() {
                override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
                    return false
                }
            }
            loadUrl("https://google.com")
        }
    })
}

崩溃:

E/MessageQueue-JNI: java.lang.IllegalStateException: KeyEvent can't be processed because this key input node is not active.
        at androidx.compose.ui.input.key.KeyInputModifier.processKeyInput(KeyInputModifier.kt:62)
        at androidx.compose.ui.platform.AndroidComposeView.sendKeyEvent(AndroidComposeView.kt:173)
        at androidx.compose.ui.platform.AndroidComposeView.dispatchKeyEvent(AndroidComposeView.kt:177)

看来这实际上是 Compose 中的一个错误。更新到最新版本(alpha09 在回答这个问题时)似乎已经解决了我的问题。

如果你想动态改变url你需要添加更新方法。

@SuppressLint("SetJavaScriptEnabled")
@Composable
fun WebPageScreen(urlToRender: String) {
  AndroidView(factory = {
    WebView(it).apply {
      layoutParams = ViewGroup.LayoutParams(
          ViewGroup.LayoutParams.MATCH_PARENT,
          ViewGroup.LayoutParams.MATCH_PARENT
      )
      webViewClient = WebViewClient()
      loadUrl(urlToRender)
    }
  }, update = {
    it.loadUrl(urlToRender)
  })
}