• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    미해결

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

23.12.03 09:53 작성 조회수 226

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()
                    }
                }
            }
        },
    )

 

답변 1

답변을 작성해보세요.

1

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 에서 여러가지 변경