나만의 웹 브라우저 03 - UI와 ViewModel 연동 강의에서 질문들이 있습니다.
205
投稿した質問数 7
WebView를 remember로 만든 이유가 무엇인가요?
@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
}
MyWebView Compose의 파라메타로 ScaffoldState를 받았는데요. 이건 SnackBar를 위한 것인데 파라메타로 고차 함수를 받아 SnackBar에 띄울 메시지만 전달 해도 될 것 같은데 파라메타로 받는 것이 더 좋은 건가요?
@Composable
fun MyWebView(viewModel: MainViewModel, onSnack: (String) -> Unit {
LaunchedEffect를 2개를 선언하고 각각 사용을 하였는데요. 하나의 LaunchedEffect에 둘 다를 넣고 사용하면 뒤에껏이 동작을 안하던데 혹시 그 이유를 알 수 있을까요?
LaunchedEffect(key1 = Unit) {
viewModel.undoShardFlow.collectLatest {
if (webView.canGoBack()) {
webView.goBack()
} else {
scaffoldState.snackbarHostState.showSnackbar("더 이상 뒤로 갈 수 없음.")
}
}
viewModel.redoShardFlow.collectLatest {
if (webView.canGoForward()) {
webView.goForward()
} else {
scaffoldState.snackbarHostState.showSnackbar("더 이상 앞으로 갈 수 없음.")
}
}
}
3번에서 제가 잘못 코딩한 것이 아니라면 LaunchedEffect 하나 당 하나의 Flow만 처리가 가능한 것이라면 처리해야하는 Flow가 많다면 그 수 만큼 LaunchedEffect를 선언해야 한다면 뭔가 코드가 지저분해 질 것 같은데 좋은 방법은 없을까요?
回答 2
1
remember 는 상태 유지를 위해 사용하는데요. WebView 인스턴스의 마지막 상태를 기억하기 위해 사용했습니다.
고차함수로 메시지만 전달하면 Snackbar 관련 로직을 MyWebView 외부로 이동할 수 있기 때문에 관심사 분리가 되고, 추후에 테스트도 가능하기 때문에 더 나은 방법입니다.
3. 컴포즈 함수 내에서 suspend 함수를 안전하게 실행하기 위해 LaunchedEffect를 사용합니다. LaunchedEffect 는 코루틴 스코프이고 suspend 함수를 여러개 호출하면 앞에 것이 종료되어야 다음 것이 순차적으로 호출됩니다. collectLatest 함수는 suspend 함수이고 undoSharedFlow 의 값을 collectLatest 함수로 계속 수집하는 동안 다음 코드로 실행이 되지 않습니다.
4. combine 함수를 사용하면 2개 이상의 Flow 를 하나로 결합할 수 있습니다.
ViewModel 사용 관련 질문
0
75
1
onTabFavorite 콜백 관련 질문
0
60
2
livedata가 왜 필요한 건지 궁금합니다
0
128
3
깃허브에 있는 MemoryTodoRepository 는 룸을 사용하는게 아닌 메모리에 저장, 수정, 삭제 하는건가요?
0
172
1
이젠 아래와 같은 오류가 뜨는데 KSP가 문제 인걸까요?
0
369
2
영상 1분쯤에서 MainActivity에서 viewModel이 저는 안되고 그래들 문제인거 같은데 해결 방법을 모르겠습니다.
0
186
1
전자액자에서 영상과 깃허브의 내용이 달라서 영상을 다보고 깃허브 내용으로 돌려봤는데 권한요청부터가 안됩니다.
0
189
2
Navigation수업에서 string대신 bitmap을 인자로 넘겨주는 방법?
0
177
1
TodoList - 04에서 recentlyDeleteTodo가 null일 경우 처리 방법 문의
0
171
1
Scaffold를 사용하면 Content padding parameter it is not used 에러
0
349
1
Material3로 바뀌면서 강의랑 다른 부분이 초반부터 있는데요.
0
221
1
강의에서 사용하는 리소스(이미지 등)을 다운 받을 수 있으면 좋겠어요.
0
248
2
Card Compose에서 elevation 옵션
1
347
1
구글맵 질문입니다
0
233
1
구글맵강의중에서 ..
0
578
7
drawCircle( color = Color.... 부분에서 빨간줄이 ...
0
269
2
val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요
0
524
1
나만의 웹브라우져 02 코드실행시 에뮬레이터에 따라
0
221
1
나만의 웹브라우져 01 코딩 후 실행하면 아래와 같은 오류가 뜨네요
0
3221
2
비만도계산기 로직작성 에서 문제가 발생했어요 ^^
0
338
3
viewModel() 오류 추가질문입니다
0
1118
2
viewModel: MainViewModel = viewModel() 에 오류있습니다
0
537
3
AAR metadata 관련오류발생
0
1437
3
모바일화면에 키보드가 사라지지 않아
0
250
1

