Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Exception gerada ao criar tabela no banco

Quando tento criar a tabela no banco de dados é retornado esse erro no flutter e gostaria de saber como resolver

Meu código no github: https://github.com/FelipeSBG14/ByteBank

Erro:

import 'package:sqflite/src/services_impl.dart';
import 'package:sqflite/src/sqflite_import.dart';

/// Wrap any exception to a [DatabaseException]
Future<T> wrapDatabaseException<T>(Future<T> Function() action) async {
  try {
    final result = await action();
    return result;
  } on PlatformException catch (e) {
    if (e.code == sqliteErrorCode) {
      throw SqfliteDatabaseException(e.message!, e.details);
      //rethro
    } else {
      rethrow;
    }
  }
}
1 resposta
solução!

Olá Felipe, tudo bem?

Existem dois problemas na sua aplicação:

O primeiro (que é a sua pergunta):

No arquivo app_database.dart no momento em que você cria a tabela, você cria a coluna com o nome de account_number. Mas na função de salvar no banco, você passa o nome da coluna como accountNumber.

O segundo problema:

Nesta mesma função de salvar, você passa o id como parâmetro. O próprio banco de dados cria um id automático para novas entradas, ou seja, não precisamos passar o valor id. Para inserts deixamos o campo de id vazio, mas para updates precisamos passar o id para identificar a entrada a ser atualizada. Toda vez que você roda a aplicação, ela tenta fazer um insert, mas se já existe uma entrada com o mesmo id, o insert falha. Por isso também que não passamos um id e deixamos o banco se virar para criar um id único.

A solução única para seus dois problemas:

Future<int> save(Contact contact) {
  return createDatabase().then((db) {
    final Map<String, dynamic> contactMap = Map();
    contactMap['name'] = contact.name;
    contactMap['account_number'] = contact.accountNumber;
    return db.insert('contacts', contactMap);
  });
}

(eu só removi o contactMap['id'] e troquei o contactMap['accountNumber'] para contactMap['account_number'])

Espero ter ajudado!