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
	
	 lbarraga
						lbarraga