Base de dados equivalente ao Room para Flutter

Tempo de leitura: 2 minutes

O Floor fornece uma abstração de SQLite para seus aplicativos Flutter inspirados na biblioteca de persistência Room. Ele vem com mapeamento automático entre objetos na memória e linhas do banco de dados, enquanto ainda oferece controle total do banco de dados com o uso de SQL

Você pode salvar, consultar e deletar seus objetos de forma simples e direta com o banco de dados do Floor!

 

Começar

Para começar com o Floor, vamos adicionar essas dependências ao pubspec.yaml

dependencies:
   flutter:
     sdk: flutter
   floor: ^1.3.0

 dev_dependencies:
   floor_generator: ^1.3.0
   build_runner: ^2.1.2

 

Classes de entidade

A classe de entidade representará uma tabela de banco de dados Columns. A @entity marca a classe como uma classe persistente e você precisa adicionar uma primaryKey

// entity/student.dart

 import 'package:floor/floor.dart';

 @Entity(tableName: 'students')
 class Student {
   @primaryKey(autoGenerate: true) 
   final int id;

   final String name;
   final Float grade;
   Person(this.id, this.name, this.grade);
 }

 

DAO (objeto de acesso a dados)

Este componente é responsável por gerenciar o acesso ao banco de dados SQLite subjacente.

Você pode usar o SQLite normal @Query ou @insert , @delete e @update

// dao/student_dao.dart

 import 'package:floor/floor.dart';

 @dao
 abstract class StudentDao {
   @Query('SELECT * FROM students')
   Future<List<Student>> findAllStudents();

   @Query('SELECT * FROM students WHERE id = :id')
   Stream<Student> findStudentById(int id);

   @insert
   Future<void> insertStudent(Student student);
   @Query('DELETE FROM students WHERE id = :id')
   Future<void> delete(int id);
 }

 

Base de dados

Tem que ser uma classe abstrata que estende FloorDatabase

// database.dart

 // required package imports
 import 'dart:async';
 import 'package:floor/floor.dart';
 import 'package:sqflite/sqflite.dart' as sqflite;

 import 'dao/student_dao.dart';
 import 'entity/student.dart';

 part 'database.g.dart'; // the generated code will be there

 @Database(version: 1, entities: [Student])
 abstract class AppDatabase extends FloorDatabase {
   StudentDao get studentDao;
 }

 

part 'database.g.dart'; — certifique-se de adicionar esta linha e ela deve ser igual ao nome do seu arquivo de banco de dados, que no nosso caso é database.dart.

 

Construir o banco de dados

Depois disso, vá para o terminal e execute flutter packages pub run build_runner build, certifique-se de adicionar flutter às suas variáveis de ambiente.

Finalmente!

Agora você pode simplesmente acessar seu banco de dados usando $Floor + seu nome de classe de banco de dados que no nosso caso é AppDatabase

final database = await $FloorAppDatabase.databaseBuilder('app_database.db').build();
 final studentDao = database.studentDao;

 final student= Student(1, 'Frank', 99);
 await studentDao.insertStudent(student);

 final result = await personDao.findPersonById(1);

 

Se você deseja gerar o Id automaticamente, basta passar null em vez de Id no objeto de entidade, ou seja:

final student= Student(null, 'Frank', 99);
await studentDao.insertStudent(student);

 

Espero que você tenha gostado deste banco de dados agradável e simples.