Вот код, который я использую:
Код: Выделить всё
@SuppressLint("SetJavaScriptEnabled")
@Composable
internal fun WebView(downloadListener: SDKDownloadListener, modifier: Modifier = Modifier) {
var showSplash by remember { mutableStateOf(true) }
Box(modifier = modifier) {
AndroidView(
factory = { context ->
WebView(context).apply {
// Clear various caches and preferences
clearCache(true)
// Configure WebView settings
settings.apply {
javaScriptEnabled = true
domStorageEnabled = true
databaseEnabled = true
allowContentAccess = true
allowFileAccess = true
}
// Set WebView properties
webViewClient = WebViewClient()
webChromeClient = WebChromeClient()
// Set download listener
setDownloadListener(downloadListener)
// Add JavaScript interface
addJavascriptInterface(EventListenerJavascriptInterface(), JAVASCRIPT_INTERFACE)
// Load URL with POST data
postUrl("https://post.dev", body)
}
},
modifier = Modifier.matchParentSize(),
)
// Splash screen with animation
AnimatedVisibility(
visible = showSplash,
exit = slideOutVertically(targetOffsetY = { it }) + fadeOut(),
modifier = Modifier.matchParentSize()
) {
SplashView(onButtonPress = { showSplash = false })
}
}
}
- Очистка кэша, включение JavaScript, включение базы данных и т. д.
- Проверка веб-сайтов на наличие ошибок JavaScript.
Дополнительная информация:
Одни и те же сайты прекрасно работают на iOS и в браузере. Flutter WebView отлично работает как на Android, так и на iOS с одними и теми же веб-сайтами.
Подробнее здесь: https://stackoverflow.com/questions/784 ... s-properly