Home > Net >  How to skip loginScreen and passwordScreen after launch the app
How to skip loginScreen and passwordScreen after launch the app

Time:07-11

Hello i would like to know How to skip the loginScreen and the passwordScreen and move to homeScreen after launching the app because i have Stored the username and password in Datastore, So how can i do that?

Here is my code:

MainActivity.kt

setContent {
    EEETheme {
        // A surface container using the 'background'
        // color from the theme
        Surface(
            modifier = Modifier.fillMaxSize(),
            color = MaterialTheme.colors.background
        ) {
            Nav()
        }
    }
}

Screen Class

sealed class Screen(val route: String) {

  object LoginScreen: Screen(route = "LoginPage_route")
  object PasswordScreen: Screen(route = "PasswordPage_route")

}

Navigation.kt

@Composable
fun Nav() {
   val context = LocalContext.current
   val navController = rememberNavController()

   NavHost(
      navController = navController,
      startDestination = Screen.LoginScreen.route
   ) {

  composable(route = Screen.LoginScreen.route) {
     LoginScreen(navController)
  }

  composable(route = Screen.PasswordScreen.route) {
     PasswordScreen(navController)
  }

  composable(route = Screen.Home.route) {
     Screen_A_with_WithTopBar(navController)
  }

}

LoginScreen.kt

@Composable
fun LoginScreen(navController: NavController) {
   Column(
      horizontalAlignment = Alignment.CenterHorizontally,
      verticalArrangement = Arrangement.Center,
      modifier = Modifier
         .fillMaxSize()
   ) {

  val context = LocalContext.current
  var username by remember { mutableStateOf("") }
  Text(text = "Login", fontSize = 33.sp)

  Spacer(modifier = Modifier.height(20.dp))

  OutlinedTextField(
     textStyle = TextStyle(fontSize = 24.sp),
     value = username,
     onValueChange = { username = it },
     label = { Text("Enter Your username") },
     maxLines = 1
  )

  Button(onClick = {

  }) {
     Text(text = "Submit", fontSize = 33.sp)
  }
 }

}

PasswordScreen.kt

@Composable
fun PasswordLogin(navController: NavController) {
   Column(
      horizontalAlignment = Alignment.CenterHorizontally,
      verticalArrangement = Arrangement.Center,
      modifier = Modifier
         .fillMaxSize()
   ) {

  val context = LocalContext.current
  var username by remember { mutableStateOf("") }
  Text(text = "Login", fontSize = 33.sp)

  Spacer(modifier = Modifier.height(20.dp))

  OutlinedTextField(
     textStyle = TextStyle(fontSize = 24.sp),
     value = username,
     onValueChange = { username = it },
     label = { Text("Enter Your username") },
     maxLines = 1
  )

  Button(onClick = {

  }) {
     Text(text = "Submit", fontSize = 33.sp)
  }
 }

}

HomeScreen.kt

@Composable
fun HomeScreen(navController: NavController) {
   Column(
      horizontalAlignment = Alignment.CenterHorizontally,
      verticalArrangement = Arrangement.Center,
      modifier = Modifier
         .fillMaxSize()
   ) {
      Text(text = "Home Screen", fontSize = 33.sp)
   }
}

DataStore Class

  class StoreUserName(private val context: Context) {
   // to make sure there's only one instance
   companion object {
      private val Context.dataStore: DataStore<Preferences> by preferencesDataStore("authentication")
      val USERNAME_KEY  = stringPreferencesKey("username")
      val PASSWORD_KEY  = stringPreferencesKey("password")
    
   }

   //get the saved CompanyID
   val getUsername: Flow<String?> = context.dataStore.data
      .map { preferences ->
         preferences[USERNAME_KEY] ?: ""
      }

   //get the saved LoginID
   val getPassword: Flow<String?> = context.dataStore.data
      .map { preferences ->
         preferences[PASSWORD_KEY] ?: ""
      }


   //save username into datastore
   suspend fun saveUsername(username: String) {
      context.dataStore.edit { preferences ->
         preferences[USERNAME_KEY] = username
      }
   }

   //save Password into datastore
   suspend fun savePassword(password: String) {
      context.dataStore.edit { preferences ->
         preferences[PASSWORD_KEY] = password
      }
   }

}

CodePudding user response:

In your fun Nav() you should check if you have credentials stored and then based on that you should set startDestination

for example:

@Composable
fun Nav() {
   val context = LocalContext.current
   val navController = rememberNavController()
   val isLoginRequired = //you condition
   NavHost(
      navController = navController,
      startDestination = if(isLoginRequired) 
      Screen.LoginScreen.route 
      else 
      Screen.Home.route
   ) {

  composable(route = Screen.LoginScreen.route) {
     LoginScreen(navController)
  }

  composable(route = Screen.PasswordScreen.route) {
     PasswordScreen(navController)
  }

  composable(route = Screen.Home.route) {
     Screen_A_with_WithTopBar(navController)
  }

}
  • Related