all_br_forms 1.0.1 copy "all_br_forms: ^1.0.1" to clipboard
all_br_forms: ^1.0.1 copied to clipboard

Flutter input masks and form formatters for Brazilian documents, contact details, dates, currency, vehicles, and measurements.

all_br_forms #

🇧🇷 Português | 🇺🇸 English

pub package CI pub points license: MIT

Máscaras de entrada brasileiras para Flutter, prontas para TextField e TextFormField. Formate documentos, contatos, datas, valores, veículos e medidas enquanto o usuário digita, com comportamento previsível e testado.

all_br_forms hero

Por que usar? #

  • 26 máscaras com construtores const e uma única importação.
  • Digitação, deleção, colagem, truncamento e idempotência cobertos por testes.
  • Formatos dinâmicos para CPF/CNPJ, telefone, validade e placa.
  • CNPJ numérico e alfanumérico no padrão brasileiro de 2026.
  • Integração direta com all_br_validations, sem duplicar regras semânticas.
  • Nenhuma gerência de estado exigida; all_observer é apenas uma integração opcional demonstrada no app de exemplo.

Onde usar #

  • Cadastros de pessoas e empresas.
  • Checkout, cobrança e dados de cartão.
  • Endereços, contatos e documentos brasileiros.
  • Veículos, produtos fiscais e processos administrativos.
  • Campos de data, hora, moeda e medidas.

Catálogo das 26 máscaras #

Categoria Máscaras
Documentos CpfMask, CnpjMask, CnpjAlfaMask, CpfOuCnpjMask, CpfOuCnpjAlfaMask, CnsMask, CertNascimentoMask
Contato e endereço PhoneMask, CepMask
Pagamentos e valores PixKeyMask, CardMask, CardExpiryMask, CurrencyMask, CentavosMask, IofMask
Datas e tempo DateMask, TimeMask, ExpiryMask
Veículos, produtos e processos PlacaMask, NcmMask, CestMask, NupMask
Medidas AlturaMask, PesoMask, TemperaturaMask, KmMask

A referência completa informa limite, formato final e comportamento de cada classe.

Instalação #

dependencies:
  all_br_forms: ^1.0.1
import 'package:all_br_forms/all_br_forms.dart';

Se a aplicação também fizer validação semântica diretamente, declare e importe o core explicitamente:

dependencies:
  all_br_forms: ^1.0.1
  all_br_validations: ^1.0.2
import 'package:all_br_forms/all_br_forms.dart';
import 'package:all_br_validations/all_br_validations.dart';

Flutter puro #

As máscaras são TextInputFormatter; não exigem controller ou pacote de estado:

TextField(
  keyboardType: TextInputType.number,
  inputFormatters: const [CpfMask()],
  decoration: const InputDecoration(labelText: 'CPF'),
)

Chave PIX automática #

PixKeyMask alterna automaticamente entre CPF, CNPJ numérico ou alfanumérico, celular, e-mail e chave aleatória EVP/GUID:

Entrada Apresentação
52998224725 529.982.247-25
11222333000181 11.222.333/0001-81
00000000E08G12 00.000.000/E08G-12
21999998877 (21) 99999-8877
Pix@Bcb.gov.br pix@bcb.gov.br
123e4567e12b02d10456426655440000 123e4567-e12b-02d1-0456-426655440000
TextFormField(
  keyboardType: TextInputType.text,
  inputFormatters: const [PixKeyMask()],
  decoration: const InputDecoration(labelText: 'Chave PIX'),
  validator: (value) => AllValidations.validatePixKey(
    PixKeyMask.normalize(value ?? ''),
  ).fold(
    (error) => error.message,
    (type) => null,
  ),
)

A normalização é necessária porque o DICT espera celular com +55 e CNPJ alfanumérico sem pontuação. O mesmo resultado informa qual tipo foi detectado:

final normalized = PixKeyMask.normalize(pixController.text);
final validation = AllValidations.validatePixKey(normalized);

validation.fold(
  (error) => print(error.message),
  (type) => print(type), // cpf, cnpj, phone, email ou random
);

O PixKeyType.cnpj representa tanto o CNPJ numérico quanto o alfanumérico. Quando essa distinção for necessária:

final isCnpjAlfanumerico =
    validation.successValue == PixKeyType.cnpj &&
    RegExp(r'[A-Z]').hasMatch(normalized);

CPF válido tem prioridade sobre celular quando ambos possuem 11 dígitos, seguindo a ordem de validatePixKey. No modo automático, o e-mail é detectado ao digitar @; quando o campo aceitar somente e-mail e precisar preservar pontuação antes do @, use const PixKeyMask.email().

Máscara com validação automática por BrZod #

A máscara cuida da edição; o BrZod valida o valor. Com AutovalidateMode.onUserInteraction, o campo apresenta o erro depois que o usuário começa a interagir:

TextFormField(
  keyboardType: TextInputType.phone,
  inputFormatters: const [PhoneMask()],
  decoration: const InputDecoration(labelText: 'Celular'),
  autovalidateMode: AutovalidateMode.onUserInteraction,
  validator: BrZod().required().phone().build,
)

O mesmo padrão atende às principais máscaras:

Máscara Validador
CpfMask BrZod().required().cpf().build
CnpjMask BrZod().required().cnpj().build
CnpjAlfaMask BrZod().required().cnpjAlfa().build
CpfOuCnpjMask BrZod().required().cpfOuCnpj().build
CepMask BrZod().required().cep().build
PhoneMask BrZod().required().phone().build
CnsMask remova os espaços com BrInputMask.digits antes de .cns()
PlacaMask remova o hífen antes de .placa()

Para máscaras sem método equivalente no BrZod, use uma regra direta de AllValidations no validator.

validator: (value) => BrZod()
    .required()
    .placa()
    .build((value ?? '').replaceAll('-', '')),

Outros usos comuns:

const cpfOuCnpj = TextField(
  inputFormatters: [CpfOuCnpjMask()], // muda de formato automaticamente
);

const documentoCompleto = TextField(
  keyboardType: TextInputType.text,
  textCapitalization: TextCapitalization.characters,
  inputFormatters: [CpfOuCnpjAlfaMask()], // CPF, CNPJ ou CNPJ alfanumérico
);

const valor = TextField(
  keyboardType: TextInputType.number,
  inputFormatters: [CurrencyMask()], // 123456 → R$ 1.234,56
);

const empresa = TextField(
  textCapitalization: TextCapitalization.characters,
  inputFormatters: [CnpjAlfaMask()], // 12ABC34501DE35 → máscara oficial
);

Integração opcional #

As máscaras não exigem gerenciador de estado. O app de exemplo também mostra uma integração opcional com all_observer para feedback reativo enquanto o usuário digita.

Máscara não é validação #

Uma máscara controla apresentação e caracteres aceitos. Ela não comprova dígitos verificadores, datas reais, titularidade ou existência oficial.

Necessidade Use
Formatar enquanto digita all_br_forms
Validar documentos e formatos all_br_validations
Fazer as duas coisas máscara no inputFormatters e regra no validator

Contrato de edição #

Os formatadores removem caracteres incompatíveis, respeitam o limite de cada campo e reformatam o valor completo recebido. A suíte cobre entrada incremental, deleção, colagem crua ou formatada, seleção, vazio e reaplicação da máscara.

Na versão 1.0.0, o cursor é colapsado no final do texto após a formatação. Aplicações que precisam preservar seleção ou edição no meio do valor devem considerar esse comportamento de experiência do usuário.

Exemplo executável #

O app demonstra um formulário Flutter puro e, separadamente, uma integração opcional com all_observer:

cd example
flutter pub get
flutter run

Compatibilidade e documentação #

O pacote não armazena nem transmite o texto digitado. Proteja CPF, CNPJ, cartão, telefone e demais dados pessoais na aplicação e use somente dados sintéticos em testes e issues.

Licença MIT.

0
likes
160
points
182
downloads

Documentation

API reference

Publisher

verified publisheropensource.tatamemaster.com.br

Weekly Downloads

Flutter input masks and form formatters for Brazilian documents, contact details, dates, currency, vehicles, and measurements.

Repository (GitHub)
View/report issues
Contributing

Topics

#formatter #brazil #mask #form #cpf

License

MIT (license)

Dependencies

all_br_validations, flutter

More

Packages that depend on all_br_forms