-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Base] #25 app navigation 구현 #30
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
package pokitmons.pokit.navigation | ||
|
||
import androidx.navigation.NavType | ||
import androidx.navigation.navArgument | ||
|
||
object Login { | ||
val route: String = "login" | ||
} | ||
|
||
object Home { | ||
val route: String = "home" | ||
} | ||
|
||
object AddLink { | ||
val route: String = "addLink" | ||
val linkIdArg = "link_id" | ||
val routeWithArgs = "$route?$linkIdArg={$linkIdArg}" | ||
var arguments = listOf( | ||
navArgument(linkIdArg) { | ||
nullable = true | ||
type = NavType.StringType | ||
} | ||
) | ||
} | ||
|
||
object AddPokit { | ||
val route: String = "addPokit" | ||
val pokitIdArg = "pokit_id" | ||
val routeWithArgs = "$route?$pokitIdArg={$pokitIdArg}" | ||
var arguments = listOf( | ||
navArgument(pokitIdArg) { | ||
nullable = true | ||
type = NavType.StringType | ||
} | ||
) | ||
} | ||
Comment on lines
+14
to
+36
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 요 부분 이해안가는데 설명 부탁드립니답 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 일반적으로 navigation 호출할 때, 인자를 넘겨줄 필요가 없다면 형이 login쪽 구현했던 방식처럼 sealed class LoginRoute(val name: String) {
data object LoginScreen : LoginRoute("LoginScreen")
// ~~
} 이렇게 구현하면 되는데, 만약 인자가 필요한 경우에는 그 인자 정보까지 route 경로에 포함을 시켜줘야 돼 |
||
|
||
object PokitDetail { | ||
val route: String = "pokitDetail" | ||
val pokitIdArg = "pokit_id" | ||
val routeWithArgs = "$route/{$pokitIdArg}" | ||
var arguments = listOf(navArgument(pokitIdArg) { defaultValue = "-" }) | ||
} | ||
Comment on lines
+38
to
+43
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 요 부분 이해안가는데 설명 부탁드립니답 22 There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 여기서는 pokitIdArg가 반드시 필요한 정보기 때문데 ?가 아닌 일반 세부 경로 선언하듯 /를 사용해서 인자 정보를 반영한 routeWithArgs를 선언한 거야 다 적고 보니까 설명을 잘 못한 거 같아서 이와 관련된 공식 문서 링크 달아둘께! |
||
|
||
object Search { | ||
val route: String = "search" | ||
} |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,96 @@ | ||
package pokitmons.pokit.navigation | ||
|
||
import androidx.compose.foundation.layout.Box | ||
import androidx.compose.foundation.layout.fillMaxSize | ||
import androidx.compose.runtime.Composable | ||
import androidx.compose.ui.Modifier | ||
import androidx.hilt.navigation.compose.hiltViewModel | ||
import androidx.navigation.NavHostController | ||
import androidx.navigation.compose.NavHost | ||
import androidx.navigation.compose.composable | ||
import com.strayalpaca.addlink.AddLinkScreenContainer | ||
import com.strayalpaca.addlink.AddLinkViewModel | ||
import com.strayalpaca.addpokit.AddPokitScreenContainer | ||
import com.strayalpaca.addpokit.AddPokitViewModel | ||
import com.strayalpaca.pokitdetail.PokitDetailScreenContainer | ||
import com.strayalpaca.pokitdetail.PokitDetailViewModel | ||
import pokitmons.pokit.LoginViewModel | ||
import pokitmons.pokit.login.LoginScreen | ||
import pokitmons.pokit.search.SearchScreenContainer | ||
import pokitmons.pokit.search.SearchViewModel | ||
|
||
@Composable | ||
fun RootNavHost( | ||
navHostController: NavHostController, | ||
) { | ||
NavHost(navController = navHostController, startDestination = Login.route) { | ||
composable(Login.route) { | ||
val viewModel: LoginViewModel = hiltViewModel() | ||
LoginScreen( | ||
loginViewModel = viewModel, | ||
onNavigateToTermsOfServiceScreen = {} | ||
) | ||
} | ||
|
||
composable(Home.route) { | ||
Box(modifier = Modifier.fillMaxSize()) | ||
} | ||
|
||
composable( | ||
route = AddLink.routeWithArgs, | ||
arguments = AddLink.arguments | ||
) { navBackStackEntry -> | ||
val viewModel: AddLinkViewModel = hiltViewModel() | ||
val linkId = navBackStackEntry.arguments?.getString(AddLink.linkIdArg) | ||
AddLinkScreenContainer( | ||
linkId = linkId, | ||
viewModel = viewModel, | ||
onBackPressed = navHostController::popBackStack, | ||
onNavigateToAddPokit = { | ||
navHostController.navigate(AddPokit.route) | ||
} | ||
) | ||
} | ||
|
||
composable( | ||
route = AddPokit.routeWithArgs, | ||
arguments = AddPokit.arguments | ||
) { | ||
val viewModel: AddPokitViewModel = hiltViewModel() | ||
AddPokitScreenContainer( | ||
viewModel = viewModel, | ||
onBackPressed = navHostController::popBackStack | ||
) | ||
} | ||
|
||
composable( | ||
route = PokitDetail.routeWithArgs, | ||
arguments = PokitDetail.arguments | ||
) { | ||
val viewModel: PokitDetailViewModel = hiltViewModel() | ||
PokitDetailScreenContainer( | ||
viewModel = viewModel, | ||
onBackPressed = navHostController::popBackStack, | ||
onNavigateToLinkModify = { linkId -> | ||
navHostController.navigate("${AddLink.route}?${AddLink.linkIdArg}=$linkId") | ||
}, | ||
onNavigateToPokitModify = { pokitId -> | ||
navHostController.navigate("${AddPokit.route}?${AddPokit.pokitIdArg}=$pokitId") | ||
} | ||
) | ||
} | ||
|
||
composable( | ||
route = Search.route | ||
) { | ||
val viewModel: SearchViewModel = hiltViewModel() | ||
SearchScreenContainer( | ||
viewModel = viewModel, | ||
onBackPressed = navHostController::popBackStack, | ||
onNavigateToLinkModify = { linkId -> | ||
navHostController.navigate("${AddLink.route}?${AddLink.linkIdArg}=$linkId") | ||
} | ||
) | ||
} | ||
} | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
믹스패널 고려까지 알잘딱깔센;;