Skip to content

Formatar chave Pix #82

Open
Open

Description

@andrerochaubistart

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?

Activity

  1. andrerochaubistart commented on Jan 19, 2023

    @andrerochaubistart
    Author

    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

  2. rubensdemelo commented on Jan 23, 2023

    @rubensdemelo
    Collaborator

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

  3. rubensdemelo commented on Jan 24, 2023

    @rubensdemelo
    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).

  4. robsonsilv4 commented on Feb 2, 2023

    @robsonsilv4

    @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.

  5. rubensdemelo commented on Feb 2, 2023

    @rubensdemelo
    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.

    😢

  6. robsonsilv4 commented on Feb 7, 2023

    @robsonsilv4

    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.

  7. rubensdemelo commented on Feb 7, 2023

    @rubensdemelo
    Collaborator

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

  8. andrerochaubistart commented on Feb 8, 2023

    @andrerochaubistart
    Author
  9. rubensdemelo commented on Feb 8, 2023

    @rubensdemelo
    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.

  10. jradelmo commented on Feb 24, 2023

    @jradelmo
    Contributor

    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.

  11. andrerochaubistart commented on Mar 1, 2023

    @andrerochaubistart
    Author
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions