1
resposta

_TypeError (type 'Null' is not a subtype of type 'int')

Boa tarde, depois que realizei a refatoração do código na aula, quando clico ou tento salvar um contato novo aparece este erro. Não sei o que possa estar errado. Tentei fazer alguns ajustes, porém nada funcionou. Insira aqui a descrição dessa imagem para ajudar na acessibilidadecontatacs_dao

import 'package:sqflite/sqflite.dart';
import '../../models/contacts.dart';
import '../app_database.dart';

class ContactDao {
  static const String tableSql = 'CREATE TABLE $_tableName ('
      '$_id NUMBER INTERGER,'
      '$_name TEXT, '
      '$_accountNumber INTERGER)';
  static const String _tableName = 'contacts';
  static const String _id = 'id';
  static const String _name = 'name';
  static const String _accountNumber = 'account_number';

  Future<int> save(Contact contact) async {
    final Database db = await createDataBase();
    Map<String, dynamic> contactMap = _toMap(contact);
    return db.insert(_tableName, contactMap);
  }

  Map<String, dynamic> _toMap(Contact contact) {
    final Map<String, dynamic> contactMap = Map();
    contactMap[_name] = contact.name;
    contactMap[_accountNumber] = contact.accountNumber;
    return contactMap;
  }

  Future<List<Contact>> findAll() async {
    final Database db = await createDataBase();
    final List<Map<String, dynamic>> result = await db.query(_tableName);
    List<Contact> contacts = _toList(result);
    return contacts;
  }

  List<Contact> _toList(List<Map<String, dynamic>> result) {
    final List<Contact> contacts = [];

    for (Map<String, dynamic> row in result) {
      final Contact contact = Contact(
        row[_id],
        row[_name],
        row[_accountNumber],
      );
      contacts.add(contact);
    }
    return contacts;
  }
}

app_database

import 'package:bytebank/database/DAO/contacts_dao.dart';
import 'package:path/path.dart';
import 'package:sqflite/sqflite.dart';

Future<Database> createDataBase() async {
  // Caminho para o banco de dados e o nome do banco
  final String path = join(await getDatabasesPath(), 'bytebank.db');
  return openDatabase(
    path,
    onCreate: (db, version) {
      // Vai executar a query do sqlite
      db.execute(ContactDao.tableSql);
    },
    version: 1,
    // limpar o banco (descer uma version e depois voltar para 1 com isso
    // descomentado)
    // onDowngrade: onDatabaseDowngradeDelete,
  );
}
1 resposta

Olá, Nathan! Como vai?

Pelo erro que você está recebendo, parece que o problema está na definição da tabela no arquivo contacts_dao.dart. Mais especificamente, na definição do campo _id.

Na sua tabela, você definiu o tipo desse campo como NUMBER INTERGER, mas o correto seria INTEGER. O mesmo acontece com o campo _accountNumber, que também está com o tipo INTERGER em vez de INTEGER.

Para corrigir o erro, você precisa alterar essas linhas no arquivo contacts_dao.dart:

static const String _id = 'id';
static const String _accountNumber = 'account_number';

Para:

static const String _id = 'id';
static const String _accountNumber = 'account_number';

Depois de fazer essa alteração, tente executar o código novamente e veja se o erro desaparece.

Espero ter ajudado e bons estudos!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software