Navigation - boostcampwm-2024/and04-Nature-Album GitHub Wiki

โœ… ์ง„ํ–‰ํ•œ ๊ธฐ๋Šฅ

์นด๋ฉ”๋ผ ์‹คํ–‰ ๋ฐ ์ดฌ์˜,์ €์žฅ ์™„๋ฃŒ์‹œ ํ™”๋ฉด ์ „ํ™˜ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ

HomeScreen ์—์„œ NatureAlbumNavHost ์œผ๋กœ ์ด๋™

๐Ÿ’ก๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ • ๊ธฐ๋ก

โ“ ์˜๋ฌธ ์‚ฌํ•ญ

์นด๋ฉ”๋ผ ์‹คํ–‰ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ HomeScreen์— ์žˆ์œผ๋ฉด ์‚ฌ์ง„ ์ €์žฅ(์•จ๋ฒ”์ถ”๊ฐ€) ํ™”๋ฉด์—์„œ ๋’ค๋กœ๊ฐ€๊ธฐ ํ˜น์€ ์ทจ์†Œ๋ฅผ ๋ˆŒ๋ €์„๋•Œ ์นด๋ฉ”๋ผ๋กœ ๋ฐ”๋กœ ๋Œ์•„๊ฐ€์ง€ ๋ชปํ•˜๋Š”๊ฒŒ ์•„๋‹Œ๊ฐ€??

๐Ÿ’ก ์˜๋ฌธ ํ•ด๊ฒฐ

Intent๋กœ ์‹คํ–‰ํ•ด ๋ฐฑ์Šคํƒ์— ๋‚จ์•„์žˆ์ง€ ์•Š์•„ ์นด๋ฉ”๋ผ๋กœ ๊ฐ„๋‹จํžˆ ๋Œ์•„๊ฐ€์ง€๋Š” ๋ชปํ•œ๋‹คโ€ฆ!

HomeScreen ์—์„œ NatureAlbumNavHost ์œผ๋กœ ์ด๋™์‹œ์ผœ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฐ์—์„œ ์นด๋ฉ”๋ผ ์ดฌ์˜์„ ํ• ์ˆ˜ ์žˆ๋„๋ก ํ•˜์ž

๐Ÿ’ฅ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ…

  • NatureAlbumNavHost ์— ํ˜„์žฌ ์ดฌ์˜ํ•œ ์‚ฌ์ง„์ด ์ €์žฅ๋  uri๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๊ณ , ๋Ÿฐ์ณ ๋ฐ ์นด๋ฉ”๋ผ๋ฅผ ์‹คํ–‰ํ•  ํ•จ์ˆ˜ ์ž‘์„ฑ

  • View์—์„œ๋Š” ๋ฐฑ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ overrideํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ์ปดํฌ์ฆˆ์—์„œ๋Š” ์–ด๋–ป๊ฒŒ??

    @OptIn(ExperimentalMaterial3Api::class)
    @Composable
    fun SavePhotoScreen(
        model: Any, // uri, Resource id, bitmap ๋“ฑ๋“ฑ.. ํƒ€์ž…์ด ํ™•์ •์ง€์–ด์ง€์ง€ ์•Š์Œ
        onBack: () -> Unit = {},
        description: String = "",
        label: Label? = null,
        modifier: Modifier = Modifier
    ) {
        BackHandler(onBack = onBack)
        Scaffold(
    		    ...
    

    BackHandler ์‚ฌ์šฉ!!

  • ๋ฐฑ์Šคํƒ ๊ด€๋ฆฌ (ํ™ˆ๊ณผ ์‚ฌ์ง„ ์ €์žฅ ํ™”๋ฉด์‚ฌ์ด์— ์นด๋ฉ”๋ผ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•ด์„œ ๋ฐฑ์Šคํƒ ๊ด€๋ฆฌ๊ฐ€ ์ž๋™์œผ๋กœ ๋˜์ง€ ์•Š์Œ)

    if (result.resultCode == RESULT_OK) {
        navController.navigate(NavigateDestination.SavePhoto.route) {
            launchSingleTop = true
        }
    } else {
        navController.navigate(NavigateDestination.Home.route) {
            popUpTo(NavigateDestination.Home.route) { inclusive = false }
            launchSingleTop = true
        }
    }
    

    ์นด๋ฉ”๋ผ ์‹คํ–‰์˜ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ํ™”๋ฉด ์ „ํ™˜

    launchSingleTop = true : ๋ฐฑ์Šคํƒ์˜ ๋งˆ์ง€๋ง‰์— ํ˜„์žฌ ๋ฃจํŠธ๊ฐ€ ์žˆ์„๊ฒฝ์šฐ ๋ฐฑ์Šคํƒ์— ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ  ์‹คํ–‰

    popUpTo(NavigateDestination.Home.route) { inclusive = false } : Home ์œ„์— SavePhoto๊ฐ€ ์žˆ์„๋•Œ SavePhoto๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‹คํ–‰

ํ™ˆ ํ™”๋ฉด์—์„œ ์นด๋ฉ”๋ผ ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์นด๋ฉ”๋ผ ์‹คํ–‰

์นด๋ฉ”๋ผ ์ดฌ์˜ ๋ฐ ์ €์žฅ ์™„๋ฃŒ์‹œ SavePhoto ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜

์นด๋ฉ”๋ผ ์ดฌ์˜ ์ทจ์†Œ์‹œ Home ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜

SavePhoto ํ™”๋ฉด์—์„œ ๋ฐฑ๋ฒ„ํŠผ/์ทจ์†Œ๋ฒ„ํŠผ ํด๋ฆญ์‹œ ์นด๋ฉ”๋ผ ์‹คํ–‰