1
resposta

Problema ao salvar tarefa no BD

Ao inserir uma tarefa no app, a tela atualiza vazia, lendo no log, o problema está com um campo do BD, o código está igual ao da aula....

Este é o erro: E/SQLiteLog(15923): (1) table taskTable has no column named difficulty in "INSERT INTO taskTable (name, difficulty, image) VALUES (?, ?, ?)" E/flutter (15923): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DatabaseException(table taskTable has no column named difficulty (code 1 SQLITE_ERROR): , while compiling: INSERT INTO taskTable (name, difficulty, image) VALUES (?, ?, ?)) sql 'INSERT INTO taskTable (name, difficulty, image) VALUES (?, ?, ?)' args [Fabiano, 5, https://i.pinimg.com/originals/cd/bd/a5/cdbda5394e...]

Abaixo meu código "task_dao"

import 'package:sqflite/sqflite.dart';
import 'package:untitled/components/task.dart';
import 'package:untitled/data/database.dart';

class TaskDao {
  static const String tableSql = 'CREATE TABLE $_tablename('
      '$_name TEXT, '
      '$_difficulty INTEGER, '
      '$_image TEXT)';

  static const String _tablename = 'taskTable';
  static const String _name = 'name';
  static const String _difficulty = 'difficulty';
  static const String _image = 'image';

  save(Task tarefa) async {
    print('Iniciando o save: ');
    final Database bancoDeDados = await getDatabase();
    var itemExists = await find(tarefa.nome);
    Map<String, dynamic> taskMap = toMap(tarefa);
    if (itemExists.isEmpty) {
      print('a Tarefa não Existia.');
      return await bancoDeDados.insert(_tablename, taskMap);
    } else {
      print('a Tarefa existia!');
      return await bancoDeDados.update(
        _tablename,
        taskMap,
        where: '$_name = ?',
        whereArgs: [tarefa.nome],
      );
    }
  }

  Map<String, dynamic> toMap(Task tarefa) {
    print('Convertendo to Map: ');
    final Map<String, dynamic> mapaDeTarefas = Map();
    mapaDeTarefas[_name] = tarefa.nome;
    mapaDeTarefas[_difficulty] = tarefa.dificuldade;
    mapaDeTarefas[_image] = tarefa.foto;
    print('Mapa de Tarefas: $mapaDeTarefas');
    return mapaDeTarefas;
  }

  Future<List<Task>> findAll() async {
    print('Acessando o findAll: ');
    final Database bancoDeDados = await getDatabase();
    final List<Map<String, dynamic>> result =
    await bancoDeDados.query(_tablename);
    print('Procurando dados no banco de dados... encontrado: $result');
    return toList(result);
  }

  List<Task> toList(List<Map<String, dynamic>> mapaDeTarefas) {
    print('Convertendo to List:');
    final List<Task> tarefas = [];
    for (Map<String, dynamic> linha in mapaDeTarefas) {
      final Task tarefa = Task(
        linha[_name],
        linha[_image],
        linha[_difficulty],
      );
      tarefas.add(tarefa);
    }
    print('Lista de Tarefas: ${tarefas.toString()}');
    return tarefas;
  }

  Future<List<Task>> find(String nomeDaTarefa) async {
    print('Acessando find: ');
    final Database bancoDeDados = await getDatabase();
    print('Procurando tarefa com o nome: ${nomeDaTarefa}');
    final List<Map<String, dynamic>> result = await bancoDeDados
        .query(_tablename, where: '$_name = ?', whereArgs: [nomeDaTarefa]);
    print('Tarefa encontrada: ${toList(result)}');

    return toList(result);
  }

  delete(String nomeDaTarefa) async {
    print('Deletando tarefa: $nomeDaTarefa');
    final Database bancoDeDados = await getDatabase();
    return await bancoDeDados.delete(
      _tablename,
      where: '$_name = ?',
      whereArgs: [nomeDaTarefa],
    );
  }
}
1 resposta

Opa Fabiano, tudo certo? Espero que sim!

O erro em questão indica que a sua tabela não possui uma coluna chamada difficulty, ou seja, o problema provavelmente está sendo causado por não ser possível identificar a coluna.

Uma possível solução é verificar:

  • Nome da tabela/coluna: certifique que não há erros de digitação e diferença entre os nomes utilizados;
  • Atualização: certifique de que o código foi executado incluindo a coluna "difficulty" no onCreate do banco de dados.

Fico à disposição.

Tenha um bom dia e bons estudos.