Joseph Hawkes-Cates
05/11/2022, 2:59 PMvar webView: WebView? by remember { mutableStateOf(null) }
val webViewState = rememberWebViewStateWithHTMLData(
data = internalHtml,
baseUrl = webViewUrl
)
WebView(
state = webViewState,
captureBackPresses = false,
onCreated = {
webView = it
it.clearCache(true)
it.clearHistory()
it.settings.javaScriptEnabled = true
it.addJavascriptInterface(webHandler, webHandler.interfaceName)
Timber.d("Created WebView")
},
client = webViewClient,
chromeClient = remember { MyWebChromeClient() },
)
if(!webViewState.isLoading) {
applyJavascript(webView)
}
val isLoading = webView?.webViewClient?.let {
webViewClient.state.isLoading
} ?: true
val webViewData = remember(webViewHtml, webViewUrl) {
WebContent.Data(internalHtml, webViewUrl)
}
// Only create this state instance once since the WebView Composable does not fully update for new instances
val webViewState = remember { WebViewState(webViewData) }
// When the webViewData changes, set it on the webViewState. Content is a mutableState field so updating it will trigger the appropriate recompositons.
LaunchedEffect(webViewData) {
webViewState.content = webViewData
}
this is more verbose than my first workaround, but it is not dependent on the order of when things are set within the internal WebView creation code.Ben Trengrove [G]
05/11/2022, 8:36 PMJoseph Hawkes-Cates
05/12/2022, 10:07 PMBen Trengrove [G]
05/12/2022, 10:13 PM