inflearn logo
강의

Course

Instructor

Modern Android - Getting Started with Jetpack Compose

My own web browser 03 - UI and ViewModel integration

val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요

524

shafeel2

67 asked

0

늘 수고많으신 강사님의 노고에 감사드립니다

아래 코드중

val scaffoldState = rememberScaffoldState() 에서 빨간줄이 생기네요

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            val viewModel = viewModel<MainViewModel>()
            HomeScreen(viewModel = viewModel)
        }
    }
}

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun HomeScreen(viewModel: MainViewModel) {
    val focusManager = LocalFocusManager.current

    val (inputUrl, setUrl) = rememberSaveable {
        mutableStateOf("https://www.google.com")
    }

    val scaffoldState = rememberScaffoldState()

    Scaffold (
        topBar = {
            TopAppBar(
                title = { Text("나의 웹브라우져")},
                actions = {
                    IconButton(onClick = {
                        viewModel.undo()
                    }){
                        Icon(
                            imageVector = Icons.Default.ArrowBack,
                            contentDescription = "back",
                            tint = Color.Black
                        )
                    }
                    IconButton(onClick = {
                        viewModel.redo()
                    }){
                        Icon(
                            imageVector = Icons.Default.ArrowForward,
                            contentDescription = "forward",
                            tint = Color.Black
                        )
                    }
                }
            )
        }
    ) { paddingValues ->
        Column(
            modifier = Modifier
                .padding(16.dp)
                .fillMaxSize()
        ) {
            OutlinedTextField(
                value = inputUrl,
                onValueChange = setUrl,
                label = { Text("https://")},
                modifier = Modifier
                    .padding(paddingValues)
                    .fillMaxWidth(),
                keyboardOptions = KeyboardOptions(imeAction = ImeAction.Search),
                keyboardActions = KeyboardActions(onSearch = {
                    viewModel.url.value = inputUrl
                    focusManager.clearFocus()
                }),
            )
            Spacer(modifier = Modifier.height(16.dp))
            MyWebView(viewModel = viewModel)
        }
    }
}

@Composable
fun MyWebView(viewModel: MainViewModel) {
    val scope = rememberCoroutineScope()
    AndroidView(
        modifier = Modifier.fillMaxSize(),
        factory = {
            WebView(it).apply {
                settings.javaScriptEnabled = true
                webViewClient = WebViewClient()
                loadUrl("https://google.com")
            }
        },
        update = { webView ->
            webView.loadUrl(viewModel.url.value)
            scope.launch{
                viewModel.undoSharedFlow.collectLatest {
                    if(webView.canGoBack()) {
                        webView.goBack()
                    }
                }
            }
            scope.launch{
                viewModel.redoSharedFlow.collectLatest {
                    if(webView.canGoForward()) {
                        webView.goForward()
                    }
                }
            }
        },
    )

 

android kotlin jetpack

Answer 1

1

survivalcoding

Scaffold 관련된 API가 머티리얼3에서 변경이 되어서 본 수업의 두 번째 강의에서 변경된 내용에 대한 참고 링크를 제시해 드리고, 변경사항이 많은 코드는 github에 최신 코드로 업데이트 해 두었습니다.

https://github.com/junsuk5/android-compose

 

나만의 웹브라우저

https://github.com/junsuk5/android-compose/blob/master/examples/MyWebBrowser/app/src/main/java/com/surivalcoding/mywebbrowser/MainActivity.kt

 

나머지 프로젝트도 얼마나 코드 변경이 필요하신지 학습에 참고하시면 될 것 같습니다.

- 머티리얼3 및 targertApi=33 기준으로 코드 업데이트 현황(100% 완료) 및 변경 난이도(상,중,하) - 

  • Bmi 계산기(하) : 머티리얼3 기반 소소한 변경점

  • 스톱워치(하) : 머티리얼3 기반 소소한 변경점

  • 나만의 웹브라우저(하) : 스낵바 관련 API 변경

  • 전자액자(상) : TargetApi 33 부터 변경된 권한을 분기로 처리, pager API 변경, Coil API 변경

  • 수평측정기(X) : 코드 변경사항 없음. 프리뷰쪽에 일부 API 수정

  • 실로폰(X) : 코드 변경사항 없음

  • Gps Map(하) : Location 관련 API 소소한 변경

  • TodoList(중) : 코드 변경사항 없음. build.gradle.kts 에서 여러가지 변경

     

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

나만의 웹 브라우저 03 - UI와 ViewModel 연동 강의에서 질문들이 있습니다.

0

205

2

Scaffold를 사용하면 Content padding parameter it is not used 에러

0

350

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

나만의 웹브라우져 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