LEVELU
05/14/2024, 2:15 PMLEVELU
05/14/2024, 2:19 PMfun currentRoles() : Roles {
return currentRole
}
fun defineRole() {
currentRole = if (!hasUserCS) {
if (!hasPet) {
nextRoles.add(Roles.Pet)
}
if (!hasPetCS) {
nextRoles.add(Roles.PetCS)
}
nextRoles.add(Roles.FullCS)
Roles.UserCS
} else if (!hasPet) {
if (!hasPetCS) {
nextRoles.add(Roles.PetCS)
}
nextRoles.add(Roles.FullCS)
Roles.Pet
} else if (!hasPetCS) {
nextRoles.add(Roles.PetCS)
nextRoles.add(Roles.FullCS)
Roles.Pet
} else {
Roles.FullCS
}
}
// My navGraph for the App
fun RootNavGraph(
) {
val navController = rememberNavController()
var mUser : User? = null
var mPet by remember { mutableStateOf<Pet?>(null) }
var target by remember { mutableStateOf(Roles.Guest) }
NavHost(
navController = navController,
route = RootRoute.route,
startDestination = when (roleService.currentRoles()) {
Roles.Guest, Roles.Country -> {
ExplorerRoute.create(RootRoute.route, WelcomeRoute)
}
Roles.FullCS -> {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED || isHiddenFor2Weeks()) {
ExplorerRoute.create(RootRoute.route, AppRoute)
} else {
ExplorerRoute.create(RootRoute.route, RequestNotificationRoute)
}
}
else -> {
if (userService.currentUser.id != 0) mUser = toNewUser(userService.currentUser)
if (petService.currentPet.id != 0) mPet = petService.currentPet
target = roleService.currentRoles()
ExplorerRoute.create(RootRoute.route, JoinRoute)
}
}
Zach Klippenstein (he/him) [MOD]
05/14/2024, 4:46 PMmUser
is suspicious, since it’s not a remember { mutableStateOf() }
. The m
prefix for fields is typically not used in modern code, and even if it is in a code base, it stands for “member” and variables defined in functions aren’t class members so it’s not accurate anyway. If defineRoles
is called from a composable that’s probably bad, since it adds to a list and so it’ll add multiple times when recomposed.