Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Formatar chave Pix #82

Open
andrerochaubistart opened this issue Jan 19, 2023 · 11 comments
Open

Formatar chave Pix #82

andrerochaubistart opened this issue Jan 19, 2023 · 11 comments
Labels
enhancement New feature or request

Comments

@andrerochaubistart
Copy link

Pessoal estou tentando fazer algo pareceido com o Nubank ao digitar a chave Pix que detecta enquanto digita qual o tipo da chave e aplica a formatação adequada, como passo fazer isso?

@andrerochaubistart
Copy link
Author

andrerochaubistart commented Jan 19, 2023

Tentei algo assim:

  List<TextInputFormatter>? formatterPixOrPhone;
  List<TextInputFormatter> formatterCpfOrCnpj = [
    FilteringTextInputFormatter.digitsOnly,
    CpfOuCnpjFormatter(),
  ];
  List<TextInputFormatter> formatterPhone = [
    FilteringTextInputFormatter.digitsOnly,
    TelefoneInputFormatter(),
  ];

  void checkIfPixOrPhone(String value){
    List<TextInputFormatter>? newFormatter;

    if(value.isCpf || value.isCnpj)
      newFormatter = formatterCpfOrCnpj;
    else if(value.isPhoneNumber)
      newFormatter = formatterPhone;

    if(newFormatter != formatterPixOrPhone) {
      setState(() => formatterPixOrPhone = newFormatter);
      focusNodePhoneNumber.requestFocus();
    }
  }



  TextFormField(
        controller: phoneNumer,
        decoration: InputDecoration(
          labelText: transactionType == TransactionType.pix
            ? TransactionType.pix.toValueName().tr
            : 'Phone number'.tr,
          hintText: transactionType == TransactionType.pix
            ? 'e-mail, CPF, CNPJ, phone, random key'.tr
            : '(00) 00000-0000'
        ),
        validator: defaultValidator,
        inputFormatters: formatterPixOrPhone,
        onChanged: checkIfPixOrPhone,
        focusNode: focusNodePhoneNumber,
    )

Mas ao aplicar a formatação do telefone não permite que continue digitando e não se transforma em CPF

@rubensdemelo
Copy link
Collaborator

Vou pensar numa forma de criar o formatter dinamico para o pix.

@rubensdemelo rubensdemelo added the enhancement New feature or request label Jan 23, 2023
@rubensdemelo
Copy link
Collaborator

@andrerochaubistart o tamanho dos campos telefone e cif são iguais: 11. Não tem como diferenciar-los. Pode compartilhar como está no app do nubank ?

Eu uso o app do Banco do Brasil e ao digitar a chave PIX (digitando 11 caracteres), é necessário confirmar qual o tipo da chave (CPF ou telefone).

@robsonsilv4
Copy link

@rubensdemelo no app do Nubank quando uma chave é identificada como telefone e CPF (ao mesmo tempo), ele pergunta ao usuário qual é o tipo da chave.

@rubensdemelo
Copy link
Collaborator

@robsonsilv4 Então é igual no app do BB. Não dá para diferenciar qual o tipo de chave, pois ambas possuem o mesmo tamanho.

😢

@robsonsilv4
Copy link

Infelizmente sim @rubensdemelo. O que dá para fazer é ter os formatadores e validadores das chaves e deixar a cargo do implementador lidar quando houver colisão de tipos. Acredito que isso já resolve a maioria dos casos.

@rubensdemelo
Copy link
Collaborator

Ja existem os formatadores para todas as chaves possiveis. Qual seria a sua sugestao neste caso ?

@andrerochaubistart
Copy link
Author

andrerochaubistart commented Feb 8, 2023 via email

@rubensdemelo
Copy link
Collaborator

@andrerochaubistart Então este cálculo deveria ser feito a cada vez que o usuário insere um novo numero e a mascara ir mudando dinamicamente. Tornando inviável a implementação, pq o formatter não é dinamico e nao é interativo.

E validar o CPF não é uma atribuição do formatter.

@jradelmo
Copy link
Contributor

jradelmo commented Feb 24, 2023

Existe um claculo que da pra fazer e detectar se o número é um CPF, esse calculo é o mesmo que valida se o CPF é válido, então uma boa formar seria usar o prória função desse pacote .isCPF e detectar se ele é um CPF válido, se não for é um telefone

On Tue, Jan 24, 2023 at 6:12 PM Rubens de Melo @.> wrote: @andrerochaubistart https://github.com/andrerochaubistart o tamanho dos campos telefone e cif são iguais: 11. Não tem como diferenciar-los. Pode compartilhar como está no app do nubank ? Eu uso o app do Banco do Brasil e ao digitar a chave PIX (digitando 11 caracteres), é necessário confirmar qual o tipo da chave (CPF ou telefone). — Reply to this email directly, view it on GitHub <#82 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/A4ZGCHJNZQYVQDQJ3YU7OATWUBASVANCNFSM6AAAAAAUAIY6LI . You are receiving this because you were mentioned.Message ID: @.>

Mesmo que implemente essa regra, ainda teria problemas pois há número de telefone válido e CPF válido
Exemplo:
CPF Válido: 249.989.788-02
Número: (24) 99897-8802

A única forma de diferenciar um do outro é validar se existe o ponto
Pelo que notei dos bancos que tenho contato com o aplicativo, o Nubank valida se existe um ".", e direciona a formatação para o CPF caso não tenha ele não formata como celular, mas sugere que seja um número. Já para o c6 ele adiciona dois botões para que o usuário escolha se é CPF ou número.

@andrerochaubistart
Copy link
Author

andrerochaubistart commented Mar 1, 2023 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants