Added list of reusable textfield components
This commit is contained in:
parent
2b6bcbd2b8
commit
9bb48a63fa
1 changed files with 94 additions and 0 deletions
|
@ -0,0 +1,94 @@
|
||||||
|
package be.ugent.sel.studeez.common.composable
|
||||||
|
|
||||||
|
import androidx.annotation.StringRes
|
||||||
|
import androidx.compose.foundation.text.KeyboardOptions
|
||||||
|
import androidx.compose.material.Icon
|
||||||
|
import androidx.compose.material.IconButton
|
||||||
|
import androidx.compose.material.OutlinedTextField
|
||||||
|
import androidx.compose.material.Text
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.Email
|
||||||
|
import androidx.compose.material.icons.filled.Lock
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import be.ugent.sel.studeez.R.string as AppText
|
||||||
|
import be.ugent.sel.studeez.R.drawable as AppIcon
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.res.painterResource
|
||||||
|
import androidx.compose.ui.res.stringResource
|
||||||
|
import androidx.compose.ui.text.input.KeyboardType
|
||||||
|
import androidx.compose.ui.text.input.PasswordVisualTransformation
|
||||||
|
import androidx.compose.ui.text.input.VisualTransformation
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun BasicField(
|
||||||
|
@StringRes text: Int,
|
||||||
|
value: String,
|
||||||
|
onNewValue: (String) -> Unit,
|
||||||
|
modifier: Modifier = Modifier
|
||||||
|
) {
|
||||||
|
OutlinedTextField(
|
||||||
|
singleLine = true,
|
||||||
|
modifier = modifier,
|
||||||
|
value = value,
|
||||||
|
onValueChange = { onNewValue(it) },
|
||||||
|
placeholder = { Text(stringResource(text)) }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun EmailField(value: String, onNewValue: (String) -> Unit, modifier: Modifier = Modifier) {
|
||||||
|
OutlinedTextField(
|
||||||
|
singleLine = true,
|
||||||
|
modifier = modifier,
|
||||||
|
value = value,
|
||||||
|
onValueChange = { onNewValue(it) },
|
||||||
|
placeholder = { Text(stringResource(AppText.email)) },
|
||||||
|
leadingIcon = { Icon(imageVector = Icons.Default.Email, contentDescription = "Email") }
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun PasswordField(value: String, onNewValue: (String) -> Unit, modifier: Modifier = Modifier) {
|
||||||
|
PasswordField(value, AppText.password, onNewValue, modifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun RepeatPasswordField(
|
||||||
|
value: String,
|
||||||
|
onNewValue: (String) -> Unit,
|
||||||
|
modifier: Modifier = Modifier
|
||||||
|
) {
|
||||||
|
PasswordField(value, AppText.repeat_password, onNewValue, modifier)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun PasswordField(
|
||||||
|
value: String,
|
||||||
|
@StringRes placeholder: Int,
|
||||||
|
onNewValue: (String) -> Unit,
|
||||||
|
modifier: Modifier = Modifier
|
||||||
|
) {
|
||||||
|
var isVisible by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
val icon =
|
||||||
|
if (isVisible) painterResource(AppIcon.ic_visibility_on)
|
||||||
|
else painterResource(AppIcon.ic_visibility_off)
|
||||||
|
|
||||||
|
val visualTransformation =
|
||||||
|
if (isVisible) VisualTransformation.None else PasswordVisualTransformation()
|
||||||
|
|
||||||
|
OutlinedTextField(
|
||||||
|
modifier = modifier,
|
||||||
|
value = value,
|
||||||
|
onValueChange = { onNewValue(it) },
|
||||||
|
placeholder = { Text(text = stringResource(placeholder)) },
|
||||||
|
leadingIcon = { Icon(imageVector = Icons.Default.Lock, contentDescription = "Lock") },
|
||||||
|
trailingIcon = {
|
||||||
|
IconButton(onClick = { isVisible = !isVisible }) {
|
||||||
|
Icon(painter = icon, contentDescription = "Visibility")
|
||||||
|
}
|
||||||
|
},
|
||||||
|
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password),
|
||||||
|
visualTransformation = visualTransformation
|
||||||
|
)
|
||||||
|
}
|
Reference in a new issue