Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

No futuro

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeNo momento 'getDatabase()' retorna apenas a tabela de Contatos, no futuro se tivéssemos outras tabelas, como seria feito?

A função 'getDatabase() receberia um argumento com o tipo a ser buscado? Ou nome da Tabela? Ou faria uma função para cada? (getDatabaseContados(), getDatabaseMensagens() )

Att

5 respostas

Bom dia, getDatabase te da uma referencia ao banco de dados que foi aberto/criado. Este codigo por si só tem apenas a criação de uma tabela, se tivessem mais tabelas criadas você conseguiria acessa-las sem problema algum usando esta referencia.

Mas como eu refatoro isso para se tornar mais flexível?

Oi Marcelo, então vamos dar uma destrinchada no código?

Future<Database> getDatabase() async {
  final String dbPath = await getDatabasesPath();
  final String path = join(dbPath, 'bytebank.db');
  return openDatabase(
    path,
    onCreate: (db, version) {
      db.execute(ContactDao.tableSql);
    },
    version: 1,
  );
}
  1. O final String dbPath = await getDatabasesPath(); indica que ele está procurando o local onde o banco de dados vai ser salvo ( tipo a pasta o caminho da pasta ) [ isso é automatico ].

  2. O final String path = join(dbPath, 'bytebank.db'); indica o nome da tabela que você vai criar, então se mudar o nome bytebank para bytebank1 você ta criando um novo banco de dados.

  3. return openDatabase( path, onCreate: (db, version) { db.execute(ContactDao.tableSql); }, version: 1, ); significa que você está abrindo a tabela com o nome que criou e o caminho que definiu.

    Então se quiser criar abrir outras tabelas basta definir novos nomes e executar o db(execute) com esses caminhos diferentes.

Espero ter ajudado c:

Entendi, então eu poderia fazer a função receber dois argumentos para ser reutilizável sempre:

Future<Database> getDatabase({ String tableName, String execute }) async {

Ou tem alguma boa prática padrão para desacoplar o que não é constante?

solução!

O primeiro argumento faz sentido ser uma String com o nome da tabela que você quer, mas o segundo argumento já não serve uma string pois é um comando para executar e abrir a tabela, vc vai precisar de um pouco mais de trabalho de lógica para abrir dois bancos de dados com uma função só.

Em questão de boas práticas a melhor coisa que você pode fazer é criar um arquivo que abre o banco de dados 1, outro arquivo que abre o banco de dados 2 e assim vai. E ai quando você quiser abrir dois bancos de dados ao mesmo tempo, você chama o getDatabase1 e o getDatabase2.

Querer abrir muitos bancos de dados com uma função só não é uma boa ideia, pois te impossibilita refatorações e impossibilita reutilizações.