Helo! I been having a hard time implementing SwipeRefreshLayout on top of my WebView. It seems like pullRefresh only takes a scrollable view inside it to be able to function.
I got it working by using on my WebView:
Modifier.verticalScroll(rememberScrollState())
However, the WebView content is not matching its parent height. I even used
Modifier.fillMaxHeight()
to fix it but it doesn't seem to work.
Any ideas on a workaround? I just transitioned from XML to Compose.
val webClient = remember {
object : AccompanistWebViewClient() {
override fun onPageStarted(
view: WebView?,
url: String?,
favicon: Bitmap?
) {
super.onPageStarted(view, url, favicon)
// TODO()
}
}
}
val refreshScope = rememberCoroutineScope()
var refreshing by remember { mutableStateOf(false) }
fun refresh() = refreshScope.launch {
refreshing = true
delay(1500)
webViewNavigator.reload()
refreshing = false
}
val state = rememberPullRefreshState(refreshing, ::refresh)
Box(
modifier = modifier
.pullRefresh(state)
.border(2.dp, Color.Green) // for debugging purposes
) {
WebView(
state = webViewState,
navigator = webViewNavigator,
onCreated = { webView ->
webView.apply {
settings.javaScriptEnabled = true
}
},
client = webClient,
captureBackPresses = false,
modifier = Modifier.fillMaxHeight()
.verticalScroll(rememberScrollState())
)
PullRefreshIndicator(refreshing, state, Modifier.align(Alignment.TopCenter))
}