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