Skip to content

Commit 6fc43af

Browse files
committed
Codi JC38 - Sistema per mostrar o ocultar la clau
1 parent 97440ce commit 6fc43af

File tree

3 files changed

+41
-0
lines changed

3 files changed

+41
-0
lines changed

app/build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ dependencies {
6464
implementation(libs.androidx.material3.android)
6565
implementation(libs.androidx.navigation.compose)
6666
implementation(libs.androidx.appcompat)
67+
implementation(libs.androidx.material.icons.extended)
6768
testImplementation(libs.junit)
6869
androidTestImplementation(libs.androidx.junit)
6970
androidTestImplementation(libs.androidx.espresso.core)

app/src/main/java/es/cibernarium/jetpackcomposeapp/pantalles/LoginScreen.kt

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ import androidx.compose.foundation.layout.fillMaxSize
66
import androidx.compose.foundation.layout.fillMaxWidth
77
import androidx.compose.foundation.layout.padding
88
import androidx.compose.foundation.text.KeyboardOptions
9+
import androidx.compose.material.icons.Icons
10+
import androidx.compose.material.icons.filled.Visibility
11+
import androidx.compose.material.icons.filled.VisibilityOff
12+
import androidx.compose.material3.Icon
13+
import androidx.compose.material3.IconButton
914
import androidx.compose.material3.OutlinedTextField
1015
import androidx.compose.material3.Surface
1116
import androidx.compose.material3.Text
@@ -16,6 +21,8 @@ import androidx.compose.runtime.saveable.rememberSaveable
1621
import androidx.compose.ui.Alignment
1722
import androidx.compose.ui.Modifier
1823
import androidx.compose.ui.text.input.KeyboardType
24+
import androidx.compose.ui.text.input.PasswordVisualTransformation
25+
import androidx.compose.ui.text.input.VisualTransformation
1926
import androidx.compose.ui.unit.dp
2027
import androidx.navigation.NavController
2128

@@ -87,6 +94,11 @@ fun ClauInput(
8794
labelId: String,
8895
clauVisible: MutableState<Boolean>
8996
) {
97+
//Condicional per ocultar o mostrar la clau
98+
val visualTransformation = if(clauVisible.value)
99+
VisualTransformation.None
100+
else PasswordVisualTransformation()
101+
90102
OutlinedTextField(
91103
value = clauState.value,
92104
onValueChange = {clauState.value = it},
@@ -98,9 +110,35 @@ fun ClauInput(
98110
modifier = Modifier
99111
.padding(bottom = 10.dp, start = 10.dp, end = 10.dp)
100112
.fillMaxWidth(),
113+
visualTransformation = visualTransformation,
114+
//Icona per mostrar o ocultar la clau
115+
trailingIcon = {
116+
//Aquesta icona només tindrà que apareixer quan el camp tingui algún caràcter
117+
if(clauState.value.isNotBlank()){
118+
PasswordVisibleIcon(clauVisible)
119+
} else null
120+
}
101121
)
102122
}
103123

124+
@Composable
125+
fun PasswordVisibleIcon(
126+
clauVisible: MutableState<Boolean>
127+
) {
128+
val image =
129+
if(clauVisible.value)
130+
Icons.Default.VisibilityOff
131+
else
132+
Icons.Default.Visibility
133+
IconButton(onClick = {
134+
clauVisible.value = !clauVisible.value
135+
}) {
136+
Icon(
137+
imageVector = image,
138+
contentDescription = "")
139+
}
140+
}
141+
104142
//Creem la funció per la entrada del email
105143
@Composable
106144
fun EmailInput(

gradle/libs.versions.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ composeBom = "2024.04.01"
1111
material3Android = "1.2.1"
1212
navigationCompose = "2.7.7"
1313
appcompat = "1.7.0"
14+
materialIconsExtended = "1.7.5"
1415

1516
[libraries]
1617
androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" }
@@ -30,6 +31,7 @@ androidx-material3 = { group = "androidx.compose.material3", name = "material3"
3031
androidx-material3-android = { group = "androidx.compose.material3", name = "material3-android", version.ref = "material3Android" }
3132
androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigationCompose" }
3233
androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" }
34+
androidx-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended", version.ref = "materialIconsExtended" }
3335

3436
[plugins]
3537
android-application = { id = "com.android.application", version.ref = "agp" }

0 commit comments

Comments
 (0)