@Composable
fun MyWebView(
viewModel: MainViewModel,
snackbarHost : SnackbarHostState,
){
val webView = rememberWebView()
// LaunchedEffect(key1 = , block = )
// LaunchedEffect(true)
LaunchedEffect(Unit){
viewModel.undoSharedFlow.collectLatest {
if(webView.canGoBack()){
webView.goBack()
}else{
snackbarHost.showSnackbar("더 이상 뒤로 갈 수 없음")
}
}
}
LaunchedEffect(Unit){
viewModel.redoSharedFlow.collectLatest {
if(webView.canGoForward()){
webView.goForward()
}else{
snackbarHost.showSnackbar("더 이상 앞으로 갈 수 없음")
}
}
}
AndroidView(
modifier = Modifier.fillMaxSize(),
factory = { webView },
update = {webView ->
webView.loadUrl(viewModel.url.value)
}
)
}
@Composable
fun rememberWebView() : WebView{
val context = LocalContext.current
val webView = remember {
WebView(context).apply {
settings.javaScriptEnabled = true
webViewClient = WebViewClient()
loadUrl("https://google.com")
}
}
return webView
}
MainActivity, HomeScreen
class MainActivity : ComponentActivity() {
@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class)
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter",
"UnusedMaterialScaffoldPaddingParameter"
)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val viewModel = viewModel<MainViewModel>()
HomeScreen(viewModel)
}
}
}
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter")
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun HomeScreen(viewModel: MainViewModel){
val focusManger = LocalFocusManager.current
Composable MyWebView, rememberWebView
MainActivity, HomeScreen
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter") @OptIn(ExperimentalMaterial3Api::class) @Composable fun HomeScreen(viewModel: MainViewModel){ val focusManger = LocalFocusManager.current
}