Estou movendo meu aplicativo para o jetpack compose da visualização. A navegação padrão está usando o nav_graph
. O aplicativo foi criado seguindo o princípio de uma atividade, vários fragmentos. Para mover o aplicativo lentamente, estou tentando apenas carregar o compose no fragmento. para que o fragmento possa ser visto como um ninho para o compose. Estou fazendo isso para manter a navegação no lugar antes de mover a navegação. Estou tentando fazer o compose navegar até o fragmento usando o nav_graph.
Atualmente, meu fragmento se parece com isso:
SignInFragment:
class SignInFragment : BaseFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
val composeView = ComposeView(requireContext())
composeView.apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
activity?.let {
SignInScreen()
}
}
}
return composeView
}
}
e estou tentando navegar para o HomeFragment
. Atualmente, eu estava usando a navegação como abaixo:
findNavController().navigate(SignInFragmentDirections.actionSignInFragmentToHomeFragment())
Agora meu composable é como abaixo:
@Composable
fun SignInScreen(authViewModel: AuthViewModel = viewModel())
{
val authState by authViewModel.authState.collectAsState()
val lifecycleEventObserver = remember {
LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_RESUME) {
authViewModel.checkAuthorized()
}
}
}
ProcessLifecycleOwner.get().lifecycle.addObserver(lifecycleEventObserver)
if(authState is AuthUIState.LoginSuccess) {
navigateToDashboard()
}
Button(
onClick = { authViewModel.signIn() },
) {
Text("SignIn")
}
}
fun navigateToDashboard() {
// Try to navigate to home fragment
}
Basicamente, quando estou carregando SignInScreen
, estou verificando o estado da autorização. Se autorizado, estou redirecionando para a HomePage, caso contrário, exibo o botão para o usuário fazer login.
Não consigo descobrir uma maneira de fazer issonavigateToDashboard()
Estou realmente tentando manter o fragmento apenas para o nav_graph, para que eu possa fazer a transição quando todas as telas estiverem no Compose.
alguma ideia?