2
respostas

Erro type int

Na pesquisa final ChatBot, 1 e 2, esta dando o erro que estava esperando double e esta vindo o valor int.

{id: ID001, name: Ricarth, lastName: Lima, balance: 113.0}
{id: ID002, name: Ana, lastName: Silva, balance: 250.0}
{id: ID003, name: Bruno, lastName: Santos, balance: 75.0}
{id: ID004, name: Carla, lastName: Oliveira, balance: 500.0}
{id: ID005, name: Daniel, lastName: Ferreira, balance: 180.0}
{id: ID006, name: Elisa, lastName: Costa, balance: 320.0}
{id: ID007, name: Fábio, lastName: Pereira, balance: 60.0}
{id: ID008, name: Gabriela, lastName: Rodrigues, balance: 200.0}
{id: ID009, name: Henrique, lastName: Martins, balance: 450.0}
{id: ID010, name: Isabela, lastName: Almeida, balance: 210.0}
Unhandled exception:
type 'int' is not a subtype of type 'double' in type cast
#0      new Account.fromMap (package:dart_application/models/Account.dart:21:32)
#1      AccountService.getAll (package:dart_application/services/account_service.dart:29:38)
<asynchronous suspension>
#2      AccountScreen._getAllAccounts (package:dart_application/screens/account_screen.dart:58:34)
<asynchronous suspension>
#3      AccountScreen.runChatBot (package:dart_application/screens/account_screen.dart:34:15)
2 respostas

Olá, Anderson, como vai?

Pelo erro, o problema parece estar no mapeamento do campo balance, que está sendo tratado como int em vez de double. É importante revisar como os dados estão sendo recebidos e convertidos na classe Account ou na origem dos dados. Se possível, compartilhe o link do seu código no GitHub para que possamos analisar melhor a implementação e identificar o que está causando esse comportamento.

Fico no aguardo e à disposição

Hello, Vamos Lá resolver isso de maneira organizada e definitiva! O erro acontece porque o campo balance está vindo como int em algumas entradas, mas a sua aplicação espera que ele seja um double. Esse tipo de problema é comum em linguagens fortemente tipadas como Dart, mas podemos corrigi-lo facilmente.

Passo 1: Entenda a Origem do Problema Erro Principal:

O mapeamento está tentando converter um valor de int para double, mas Dart é rigoroso com tipos. Por exemplo: balance vindo como 113 (int) em vez de 113.0 (double). A exceção ocorre na classe Account, especificamente no método fromMap. Provável Causa:

A origem dos dados (banco de dados ou API) está retornando valores int quando o saldo é um número inteiro (sem casas decimais). O método fromMap da classe Account não está lidando corretamente com essa variação. Passo 2: Solução Podemos corrigir o problema ajustando o mapeamento no método fromMap para converter sempre para double, independentemente de o valor original ser int ou double.

Código Corrigido da Classe Account: dart Copiar Editar class Account { final String id; final String name; final String lastName; final double balance;

Account({ required this.id, required this.name, required this.lastName, required this.balance, });

// Método fromMap corrigido factory Account.fromMap(Map<String, dynamic> map) { return Account( id: map['id'] as String, name: map['name'] as String, lastName: map['lastName'] as String, balance: (map['balance'] is int) ? (map['balance'] as int).toDouble() : map['balance'] as double, ); } } O que foi feito: No campo balance, verificamos se o valor é int:

dart Copiar Editar (map['balance'] is int) ? (map['balance'] as int).toDouble() : map['balance'] as double Se for int, convertemos para double com .toDouble(). Se já for double, usamos diretamente. Isso garante que balance seja sempre tratado como double, resolvendo o erro de type cast.

Passo 3: Reforçar a Validação dos Dados Se os dados vêm de uma API ou banco de dados, pode ser útil validar e ajustar o formato antes de passar para o método fromMap. Um exemplo seria normalizar os valores antes de criar os objetos Account.

Passo 4: Teste o Código Teste com diferentes tipos de valores para balance:

Inteiros (113, 250). Decimais (113.5, 250.75). Certifique-se de que nenhum erro ocorre.

Passo 5: Melhorar a Resposta do ChatBot A mensagem de erro deve ser mais amigável, caso ocorra algo inesperado. Por exemplo:

Modifique o Método runChatBot: dart Copiar Editar void runChatBot() async { try { await _getAllAccounts(); print("Todos os dados foram carregados com sucesso!"); } catch (e) { print("Desculpe, ocorreu um problema ao carregar os dados: $e"); } } Resumo Corrigimos o mapeamento no método fromMap para lidar com int e double no campo balance. Reforçamos a validação dos dados. Garantimos que erros sejam tratados de forma amigável no ChatBot. Agora o código deve estar funcionando perfeitamente! Se precisar de mais ajustes ou explicações, é só chamar!