jacobaraujo7 / flutter-cielo

Other
26 stars 16 forks source link

Error: type 'String' is not a subtype of type 'List<dynamic>' in type cast #2

Open RBSoftwareBR opened 5 years ago

RBSoftwareBR commented 5 years ago

Quando executo o codigo abaixo recebo o erro: Error: type 'String' is not a subtype of type 'List' in type cast

        Sale sale = Sale(
            merchantOrderId: "123", // id único de sua venda
            customer: Customer(
              //objeto de dados do usuário
                name: "Comprador crédito simples"),
            payment: Payment(
              // objeto para de pagamento
                type: TypePayment.creditCard,
                //tipo de pagamento
                amount: 7777,
                // valor da compra em centavos
                installments: 1,
                // número de parcelas
                softDescriptor:
                "Cielo",
                //descrição que aparecerá no extrato do usuário. Apenas 15 caracteres
                creditCard: CreditCard(
                  //objeto de Cartão de crédito
                  cardNumber: "1234123412341231",
                  //número do cartão
                  holder: "Teste Holder",
                  //nome do usuário impresso no cartão
                  expirationDate: "12/2030",
                  // data de expiração
                  securityCode: "123",
                  // código de segurança
                  brand: "Visa", // bandeira
                )));

        var response = await Helper.cielo.createSale(sale);
        print(response.payment.paymentId);
      }catch(err){
        print('Error: ${e.toString()}');
      }
RBSoftwareBR commented 5 years ago

Resolvido, foi só colocar a variavel da cielo dentro que deu certo

final CieloEcommerce cielo = CieloEcommerce(
        environment: Environment.SANDBOX, // ambiente de desenvolvimento
        merchant: Merchant(
          merchantId: "--------------------",
          merchantKey: "------------------",
        ));
iam-alan-abreu commented 4 years ago

Estou tento o mesmo problema e não tô conseguindo fazer funcionar.

Adriel-Auth commented 4 years ago

Estou tendo o mesmo erro, como vocês conseguiram resolver?

rodriigovieira commented 4 years ago

Também tive o mesmo problema. O interessante é que o problema ocorre somente quando a função tokenizeCard é executada.

Atualização

Pelo que eu entendi, esse erro ocorre no arquivo cielo_ecommerce.dart, na linha 62, porque o e.response.data está recebendo, por algum motivo, uma String vazia, e por isso está retornando esse erro de tipagem.

Para que o package não retorne esse erro de tipagem, basta fazer uma verificação se a resposta é uma String vazia (atualmente, só é verificado se é null).

Nesse caso, o que está ocorrendo mesmo é um erro na comunicação com a API do Cielo que está retornando algum erro.

gustavofurtadoo commented 4 years ago

Oi, fiz o import do package no seu github @rodriigovieira mas ainda tenho os mesmos erros, seja ao tentar tokenizar o cartão, ou com o pagamento normal. Tem alguma ideia do que pode ser?

rodriigovieira commented 4 years ago

Esse erro é provavelmente alguma chamada API que não está sendo feita corretamente. Talvez você tenha esquecido algum parâmetro ou algo do tipo. Se você me disser qual chamada você está fazendo e com quais argumentos, eu posso tentar te ajudar.

O erro de casting é simplesmente porque o package não está processando bem uma resposta vazia do servidor da Cielo. Acho que eu esqueci alguma verificação.

gustavofurtadoo commented 4 years ago

Oi, eu apenas copiei o exemplo da compra com ou sem o token e joguei dentro de um onTap de um InkWell. Abaixo estão as imagens do meu código.

Cielo Error Cielo Token Pubspec Cielo Error 2

rodriigovieira commented 4 years ago

Para tokenizar um cartão, você precisa passar um cartão de crédito válido. Você pode usar qualquer gerador de número de cartão de crédito para conseguir um número válido.

Eu passei exatamente pelo mesmo problema: https://github.com/DeveloperCielo/developercielo.github.io/issues/272

gustavofurtadoo commented 4 years ago

Mas mesmo sem usar o token, eu obtenho os mesmos erros. Abaixo ta o teste com a compra simple sem o token. Desculpa o incomodo, sou novo na programação.

Cielo

rodriigovieira commented 4 years ago

Olha, acho que não consigo te ajudar mais, não sei o que está causando os erros. Olhei de novo o seu código e percebi que o erro que você está tendo não é o mesmo da issue aberta aqui, é um erro depois da verificação.

Eu tenho uma teoria, mas infelizmente não tenho como investigar pois já fazem meses que não utilizo esse package. Talvez esses erros estejam ocorrendo porque a API do Dio mudou, e talvez o tipo das coisas que o package tentava converter a lista mudou com a nova versão do Dio.

Os contribuidores aqui do projeto lançaram algumas PRs com essa atualização da versão do Dio, você já tentou alguma delas?

Você pode olhar a #9 ou a #6.