Flutter Dart5

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 9

Trabalhando com Banco de dados no Flutter

Existem muitas opções disponíveis hoje quando se trata de bancos de dados em seu aplicativo. Eles normalmente se
encaixam nessas três categorias:

● Relacional – estes são os bancos de dados no sentido tradicional. Eles não


apenas armazenam dados, mas também os relacionamentos entre os dados. SQLite é um exemplo de banco de dados
relacional.
● NoSQL – esses bancos de dados armazenam dados como documentos . Um
esquema não é imposto como é o caso de um banco de dados relacional. Eles são extremamente rápidos e lidam muito
bem com grandes pedaços de dados não estruturados. MongoDB é um exemplo de banco de dados NoSQL.

SQflite (banco de dados local)

SQflite é uma implementação do SQLite para Flutter. Ele oferece controle total sobre seu banco de dados, consultas,
relacionamentos, tudo o que você deseja.

De início a um novo projeto Flutter e altere o código padrão para criar uma nova conexão com o banco ou resgatar uma
conexão existente.

Primeiramente adicionaremos a dependência para trabalhar com o SQFlite:


https://pub.dev/packages/sqflite

Acesse o link acima e inclua a dependência no seu arquivo pubspec.yaml

Depois importe para o arquivo principal (main) a classe para usarmos os recursos da biblioteca:

Criando o caminho para o BD:


Criaremos uma função para criar ou recuperar o banco de dados.
No método _HomeState crie a função abaixo:
A função _recuperarBD() precisa ser do tipo assíncrona pois nem sempre teremos a resposta de imediato da operação..
Veja que a linha possui o parâmetro await na declaração para
aguardar até que o método getDatabasesPath() seja retornado.

Vamos precisar de instanciar o método openDatabase() com 3 parâmetros:


● path (onde colocamos a variável que contém o caminho do banco, no nosso
caso localDB;
● version (onde pode inserir a versão do Bd, no exemplo usei 1 como versão;
● onCreate() (para definir os parâmetros da criação do BD) que precisa ser
informado dois parâmetros, db (tipo Database), para manipularmos o banco de dados e um dbVersao (tipo int) somente
com a versão do banco de dados.
○ String sql que vai receber a SQL para criação do BD
○ db.execute que é o método que irá criar ou recuperar o BD

A variável bd será retornada com o status da função (true/false) caso tenha conseguido ou não criar/abrir o banco de
dados.

Obs.: Somente será criado o banco de dados uma vez, nas demais vezes ele apenas será aberto para uso e manipulação.

Salvando dados no Banco de Dados

Criaremos uma função para instanciar o banco de dados e inserir um registro na tabela usuários. (veja os comentário de
cada linha)

Recuperando dados no Banco de Dados

Após terem inseridos alguns registros no banco de dados, vamos ver como recupera-los.
Faremos para isso uma simples função que resgatará o(s) registros(s).
Utilize a query sql para filtrar os registros com o uso do SQL.

Excluindo dados no Banco de Dados

Na exclusão de dados faremos uma leve alteração passando o Id do usuário que queremos fazer a exclusão.
Em uma situação real podemos listar os usuários e selecionar o usuário que queremos eliminar, assim teremos o id deste
usuário. Lembrando que o id é chave primária na tabela.

Veja que neste caso a função recebe uma parâmetro do tipo Int (id) para proceder com a eliminação.
Os parâmetros do db.delete()

● table: String com o nome da tabela


● where: campo(s) da tabela que será pesquisado para a exclusão
● whereArgs: variável que contém o valor para o parâmetro da exclusão:

Ao chamar a função, lembre de passar o id como parâmetro:

_deletarUsuario(9); //registro do id 9 será eliminado

Alterando dados no Banco de Dados


Para completar as alterações básicas em um banco de dados (insert, select, delete e update), veremos agora como ficará
a função que altera os dados de um determinado registro. A função é bem parecida com a função deletar.

Veja que sempre devemos instanciar o banco de dados (bd); depois criamos um objeto Map com os dados do registro que
iremos alterar, lembre-se que numa situação real esses dados virão de um TextField widget.
O objeto db, além dos outros métodos tem o método update com o seguintes parâmetros:

● table: String com o nome da tabela


● Map: Map com os dados do registro a ser alterado
● where: campo(s) da tabela que será pesquisado para a alteração
● whereArgs: variável que contém o valor para o parâmetro da alteração:

Ao chamar a função, lembre de passar o id como parâmetro:

_atualizarUsuario(22); //registro do id 22 será atualizado

Projeto completo - Notas diárias - CRUD com SQFlite

Primeiramente vamos montar nossa interface padrão. Um Container contendo um AppBar e um floatActionButton.
Vamos criar uma função chamada _exibirTelaCadastro(). Vamos usar o widget showDialog() para mostrar um diálogo
personalizado tanto para inclusão de um registro quanto para a alteração de um registro.

Veja o código da showDialog():

_exibirTelaCadastro( ){
showDialog(
context: context,
builder: (context){
return AlertDialog(
title: Text("anotação"),
content: Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
TextField(
controller: _tituloController,
autofocus: true,
decoration: InputDecoration(
labelText: "Título",
hintText: "Digite título..."
),
),
TextField(
controller: _descricaoController,
decoration: InputDecoration(
labelText: "Descrição",
hintText: "Digite descrição..."
),
)
],
),
actions: <Widget>[
ElevatedButton(
onPressed: () => Navigator.pop(context),
child: Text("Cancelar")
),
ElevatedButton(
onPressed: (){
Navigator.pop(context);
},
child: Text("Salvar")
)
],
);
}
);

Logo antes da criação da função, não esqueça de adicionar os controllers para os campos(TextFields) que serão
preenchidos.

TextEditingController _tituloController = TextEditingController();


TextEditingController _descricaoController = TextEditingController();
Ao final deste template, teste sua aplicação e veja se obteve o layout próximo do abaixo:

Inicializando o Banco de Dados.

Primeiramente, confira se já foi feita a inclusão da dependência do pacote sqFlite. Lembre-se que já fizemos em aulas
anteriores.
https://pub.dev/packages/sqflite

Para essa aplicação foi usado a versão sqflite: ^2.3.3


Referências

https://flutterparainiciantes.com.br/stateful-stateless
https://developer.android.com/?hl=pt-br
http://flutter.dev
https://dart.dev/

Você também pode gostar