Pular para o conteúdo principal

TextInput

O componente TextInput é um campo de entrada de texto que permite aos usuários inserir e editar texto em formulários. Ele inclui suporte integrado para máscaras (via MaskedTextInput interno) e diversas opções de estilo e comportamento.

Importação

import { TextInput } from '@platformbuilders/fluid-react-native';

Exemplo Básico

<TextInput 
label="Nome"
placeholder="Digite seu nome"
value={value}
onChangeText={setValue}
/>

Variantes

O TextInput possui diferentes variantes para diferentes contextos de uso:

Padrão

<TextInput 
label="Campo padrão"
value={value}
onChangeText={setValue}
/>

Outline

<TextInput 
label="Campo outline"
variant="outline"
value={value}
onChangeText={setValue}
/>

Underline

<TextInput 
label="Campo underline"
variant="underline"
value={value}
onChangeText={setValue}
/>

Estados

Com Valor

<TextInput 
label="Campo com valor"
value="John Doe"
onChangeText={setValue}
/>

Desabilitado

<TextInput 
label="Campo desabilitado"
value="John Doe"
disabled
onChangeText={setValue}
/>

Com Erro

<TextInput 
label="Campo com erro"
value={value}
error="Este campo é obrigatório"
onChangeText={setValue}
/>

Somente Leitura

<TextInput 
label="Campo somente leitura"
value="Valor não editável"
editable={false}
onChangeText={setValue}
/>

Tipo de Teclado

<TextInput 
label="Email"
placeholder="Digite seu email"
keyboardType="email-address"
autoCapitalize="none"
value={value}
onChangeText={setValue}
/>

<TextInput
label="Telefone"
placeholder="Digite seu telefone"
keyboardType="phone-pad"
value={value}
onChangeText={setValue}
/>

<TextInput
label="Número"
placeholder="Digite um número"
keyboardType="numeric"
value={value}
onChangeText={setValue}
/>

Com Ícone

Você pode adicionar ícones ao campo:

<TextInput 
label="Buscar"
placeholder="Digite para buscar"
icon="search"
iconPosition="left" // "left" (padrão) ou "right"
value={value}
onChangeText={setValue}
/>

Componentes Especializados

PasswordInput

Para senhas com alternância de visibilidade:

import { PasswordInput } from '@platformbuilders/fluid-react-native';

<PasswordInput
label="Senha"
placeholder="Digite sua senha"
value={value}
onChangeText={setValue}
/>

MaskedTextInput

O componente TextInput lida automaticamente com máscaras quando a prop maskType é fornecida (ex: 'cpf', 'cnpj', 'phone'). Ele utiliza o componente MaskedTextInput internamente para essa funcionalidade. Para opções de máscara mais avançadas ou personalizadas, consulte a prop options na tabela de API ou a documentação específica do MaskedTextInput (se disponível).

// Exemplo usando maskType diretamente no TextInput
<TextInput
label="CPF"
placeholder="Digite seu CPF"
maskType="cpf"
value={value}
onChangeText={setValue}
/>

// Para máscaras customizadas, você pode usar a prop options
// (Consulte a documentação de react-native-masked-input para detalhes)

SearchInput

Para campos de busca com ícone e limpar:

import { SearchInput } from '@platformbuilders/fluid-react-native';

<SearchInput
placeholder="Buscar..."
value={value}
onChangeText={setValue}
onClear={() => setValue('')}
/>

Área de Texto Multilihas

<TextInput 
label="Descrição"
placeholder="Digite uma descrição detalhada"
multiline
numberOfLines={4}
value={value}
onChangeText={setValue}
/>

Outros Exemplos

Estados Visuais (Status)

Controle a aparência com a prop status.

<TextInput 
label="Campo Sucesso"
value="Valor válido"
status="success"
onChangeText={setValue}
/>
<TextInput
label="Campo Perigo"
value="Algo deu errado"
status="danger" // Equivalente a usar a prop 'error'
onChangeText={setValue}
/>
<TextInput
label="Campo Desabilitado (via status)"
value="Não editável"
status="disabled"
onChangeText={setValue}
/>

Contraste

Para fundos escuros.

<View style={{ backgroundColor: '#333', padding: 10 }}>
<TextInput
label="Campo com contraste"
contrast
value={value}
onChangeText={setValue}
/>
</View>

Tamanho Grande

<TextInput 
label="Campo Grande"
large
value={value}
onChangeText={setValue}
/>

Texto Centralizado

<TextInput 
label="Código"
placeholder="0000"
centered
maxLength={4}
keyboardType="numeric"
value={value}
onChangeText={setValue}
/>

Sem Linha Inferior

<TextInput 
label="Sem linha"
withBottomline={false}
value={value}
onChangeText={setValue}
/>

API

Props

PropTipoPadrãoDescrição
idstring-ID do componente (influencia testID).
accessibilitystring-Identificador principal de acessibilidade.
accessibilityLabelstring(Gerado)Rótulo de acessibilidade específico.
testIDstring(Gerado)ID para testes automatizados.
labelstring''Texto de rótulo exibido acima ou dentro do campo.
placeholderstring''Texto exibido quando o campo está vazio.
valuestring''Valor atual do campo.
errorstring | boolean''Mensagem de erro a ser exibida ou true para indicar estado de erro.
onChangeText(text: string) => void-Função chamada quando o valor do texto muda.
onBlur(event: any) => void() => {}Função chamada quando o campo perde o foco.
onFocus(event: any) => void() => {}Função chamada quando o campo ganha foco.
leftIconNamestring-Nome do ícone FontAwesome a ser exibido à esquerda.
rightIconNamestring-Nome do ícone FontAwesome a ser exibido à direita.
onPressIcon() => void-Função chamada ao pressionar o ícone esquerdo.
onRightIconPress() => void-Função chamada ao pressionar o ícone direito.
iconColorstring(Cor do tema)Cor para ambos os ícones (se leftIconColor não for definido).
leftIconColorstringiconColorCor específica para o ícone esquerdo.
iconSizenumber(Tamanho do tema)Tamanho para ambos os ícones.
iconTypeIconFontsIconFonts.FontAwesomeTipo de fonte de ícones (se usando ícones de outras libs).
iconHitSlopobject{}Área de toque adicional para os ícones.
largebooleanfalseAplica estilo de tamanho grande ao texto do input.
contrastbooleanfalseAplica estilo de alto contraste (útil em fundos escuros).
centeredbooleanfalseCentraliza o texto dentro do input.
withBottomlinebooleantrueExibe a linha inferior padrão (variante underline).
multilinebooleanfalsePermite que o input tenha múltiplas linhas.
numberOfLinesnumber-Número de linhas a serem exibidas (requer multiline={true}).
autoFocusbooleanfalseFoca automaticamente o campo ao montar.
keyboardTypeKeyboardTypeOptions'default'Tipo de teclado a ser exibido (numeric, email-address, etc.).
maskTypestring | nullnullTipo de máscara a ser aplicada (ex: 'cpf', 'cnpj', 'phone', 'uppercase').
optionsTextInputMaskOptionProp(Padrão interno)Opções avançadas para máscaras customizadas (ver react-native-masked-input).
statusInputStatusInputStatus.DefaultControla o estado visual (Default, Danger, Success, Disabled).
editablebooleantrueDefine se o campo pode ser editado.
borderedHeightnumber-Ativa a variante com borda e define sua altura.
borderedColorstring(Cor do tema)Cor da borda (quando borderedHeight está definido).
focusBorderedColorstring(Cor primária do tema)Cor da borda quando em foco (com borderedHeight).
borderedWidthnumber1Largura da borda (com borderedHeight).
borderedRadiusnumber0Raio da borda (com borderedHeight).
borderedLabelstring''Texto do rótulo posicionado acima da borda (com borderedHeight).
borderedBackgroundColorstring(Cor do tema)Cor de fundo para a variante com borda.
showBorderErroredbooleantrueSe a borda deve ficar vermelha em estado de erro (com borderedHeight).
fixedLabelVariantTypographyVariants'xs'Variante de tipografia para o borderedLabel ou label fixo superior.
inputPaddingnumber(Calculado)Padding interno horizontal do campo de texto.
inputLeftPaddingnumber-Padding interno esquerdo específico.
inputRightPaddingnumber-Padding interno direito específico.
allowFontScalingbooleanfalsePermite que a fonte do input seja escalada pelas configurações do OS.
suppressAnimationbooleantrueDesabilita a animação do label flutuante.
hidePlaceholderOnFocusbooleanfalseOculta o placeholder quando o campo está focado.
isFloatingboolean(Determinado)Indica se o label está no modo flutuante (não configurável diretamente).
animationValuesobject(Padrão interno)Valores de estilo (top, fontSize, opacity) para animação do label.
styleStyleProp<ViewStyle>{}Estilo aplicado ao container do input e label (sem borda).
errorStyleStyleProp<TextStyle>{}Estilo aplicado ao texto de erro.
textStyleStyleProp<TextStyle>{}Estilo aplicado diretamente ao texto dentro do input.
rootStyleStyleProp<ViewStyle>{}Estilo aplicado ao container raiz do componente.
labelStyleStyleProp<TextStyle>{}Estilo aplicado ao texto do label.
inputRefRef<TextInput>-Ref para acessar o componente TextInput interno.
...restTextInputProps-Outras props do TextInput do React Native são passadas.

Customização

Com Tema

O componente TextInput respeita o tema definido:

// Em seu tema
const theme = {
...defaultTheme,
colors: {
...defaultTheme.colors,
primary: '#FF5722',
error: '#FF0000',
},
};

// TextInput usará automaticamente as cores do tema
<TextInput
label="Campo com tema"
value={value}
onChangeText={setValue}
/>

Com Props de Estilo

Você pode customizar o estilo diretamente:

<TextInput 
label="Campo personalizado"
value={value}
onChangeText={setValue}
containerStyle={{
marginBottom: 16,
}}
inputStyle={{
fontWeight: 'bold',
}}
labelStyle={{
fontSize: 16,
}}
/>

Considerações de Acessibilidade

O TextInput foi desenvolvido com acessibilidade em mente:

  • Implementa accessibilityRole="none" e accessibilityState
  • O prop label é utilizado como accessibilityLabel por padrão
  • Suporta foco e navegação por tecnologias assistivas
  • Estados como disabled e error são comunicados adequadamente
<TextInput 
label="Nome"
accessibilityLabel="Campo de entrada para nome completo"
accessibilityHint="Digite seu nome completo aqui"
value={value}
onChangeText={setValue}
/>

API de Referência

Props

PropTipoPadrãoDescrição
labelstring-O texto do rótulo do campo
valuestring-O valor do campo
onChangeText(text: string) => void-Função chamada quando o texto é alterado
placeholderstring-Texto de espaço reservado quando o campo está vazio
variant'default' | 'outline' | 'underline''default'Define o estilo visual do campo
disabledbooleanfalseDesabilita a interação com o campo
errorstring-Mensagem de erro para exibir
iconstring-Nome do ícone para exibir
iconPosition'left' | 'right''left'Posição do ícone em relação ao texto
multilinebooleanfalsePermite entrada de múltiplas linhas
numberOfLinesnumber1Número de linhas para campos multiline
keyboardType'default' | 'numeric' | 'email-address' | ...'default'Tipo de teclado a ser exibido
autoCapitalize'none' | 'sentences' | 'words' | 'characters''sentences'Controla a capitalização automática
secureTextEntrybooleanfalseDefine o campo como entrada segura (senha)
maxLengthnumber-Número máximo de caracteres
editablebooleantrueDefine se o texto é editável
returnKeyType'done' | 'go' | 'next' | 'search' | ...-Tipo de botão de retorno no teclado
onSubmitEditing() => void-Função chamada ao pressionar o botão de retorno
onFocus() => void-Função chamada quando o campo recebe foco
onBlur() => void-Função chamada quando o campo perde foco
containerStyleStyleProp<ViewStyle>-Estilo para o container do campo
inputStyle