Alavancando features offline-first� com o ObjectBox
class Bruno Bee Nahorny {�}
class Bruno Bee Nahorny {
final flutterDesde = 2019;�}
class Bruno Bee Nahorny {
final flutterDesde = 2019;
final atualmente = Granter();
}
class Bruno Bee Nahorny {
final flutterDesde = 2019;
final atualmente = Granter();
final experiencia = ConectaCidasc();�}
class Bruno Bee Nahorny {
final flutterDesde = 2019;
final atualmente = Gaudium();
� void contato() {
�
}�}
//O que é o ObjectBox?
🚀 - Alta performance
🔗 - Relações entre entidades
- NoSQL
🔍 - Queries
🧙 - Multi-thread
🪳 - Gestão do banco em debug
//O que é o ObjectBox?
🚀 - Alta performance
https://pub.dev/packages/objectbox
//O que é o ObjectBox?
- NoSQL
void queryAlgo() {
{...}
final query = box
.query(� {...}
)� }
API totalmente em Dart
//O que é o ObjectBox?
- NoSQL
void queryAlgo() {
{...}
final query = box
.query(� Person_� )� }
API totalmente em Dart
//O que é o ObjectBox?
- NoSQL
void queryAlgo() {
{...}
final query = box
.query(� Person_.name� )� }
API totalmente em Dart
//O que é o ObjectBox?
- NoSQL
void queryAlgo() {
{...}
final query = box
.query(� Person_.name.equals(
'James Brown',
),� )� }
API totalmente em Dart
//O que é o ObjectBox?
- NoSQL
void queryAlgo() {
{...}
final query = box
.query(Person_.name.equals(
'James Brown',
))� }
API totalmente em Dart
//O que é o ObjectBox?
- NoSQL
void queryAlgo() {
{...}
final query = box
.query(Person_.name.equals(
'James Brown',
))
.order(Person_.name)
.build();
}
API totalmente em Dart
//O que é o ObjectBox?
- NoSQL
void queryAlgo() {
{...}
final query = box
.query(Person_.name.equals(
'James Brown',
))
.order(Person_.name)
.build();
final people = query.find();
query.close();
{...}
}
API totalmente em Dart
//O que é o ObjectBox?
Suporta relações toOne e toMany
🔗 - Relações entre entidades
@Entity()
class Person {
int id;
}
//O que é o ObjectBox?
Suporta relações toOne e toMany
🔗 - Relações entre entidades
@Entity()
class Person {
int id;
}
�@Entity()
class Dog {
int id;
}
//O que é o ObjectBox?
Suporta relações toOne e toMany
🔗 - Relações entre entidades
@Entity()
class Person {
int id;
}
�@Entity()
class Dog {
int id;
� final owner = ToOne<Person>();
}
//O que é o ObjectBox?
Suporta relações toOne e toMany
🔗 - Relações entre entidades
@Entity()
class Person {
int id;
� @Backlink()
final dogs = ToMany<Dog>();
}
�@Entity()
class Dog {
int id;
� final owner = ToOne<Person>();
}
//O que é o ObjectBox?
Queries em objetos relacionados
🔍 - Queries
void queryAlgoRelacionado() {
{...}
final builder = box.query(Person_.name.equals('James Brown'));
� builder
..link(
)
}
//O que é o ObjectBox?
Queries em objetos relacionados
🔍 - Queries
void queryAlgoRelacionado() {
{...}
final builder = box.query(Person_.name.equals('James Brown'));
� builder
..link(
Person_.dog,
)
}
//O que é o ObjectBox?
Queries em objetos relacionados
🔍 - Queries
void queryAlgoRelacionado() {
{...}
final builder = box.query(Person_.name.equals('James Brown'));
� builder
..link(
Person_.dog,
Dog_.race.equals(DogRace.pug.name),
)
}
//O que é o ObjectBox?
Queries em objetos relacionados
🔍 - Queries
void queryAlgoRelacionado() {
{...}
final builder = box.query(Person_.name.equals('James Brown'));
� builder
..link(
Person_.dog,
Dog_.race.equals(DogRace.pug.name),
)
..order(Person_.name);
}
//O que é o ObjectBox?
Queries em objetos relacionados
🔍 - Queries
void queryAlgoRelacionado() {
{...}
final builder = box.query(Person_.name.equals('James Brown'));
� builder
..link(
Person_.dog,
Dog_.race.equals(DogRace.pug.name),
)
..order(Person_.name);
� final pessoasQueTemPugs = builder.build().find();
{...}
}
//O que é o ObjectBox?
Observe Queries com Streams
🔍 - Queries + Streams
� void queryAlgoStream() {
{...}
final query = box.query(Person_.name.equals('James Brown'));
}
//O que é o ObjectBox?
Observe Queries com Streams
🔍 - Queries + Streams
� void queryAlgoStream() {
{...}
final query = box.query(Person_.name.equals('James Brown'));
� final Stream<Query<Person>> queryStream =
query
}
//O que é o ObjectBox?
Observe Queries com Streams
🔍 - Queries + Streams
� void queryAlgoStream() {
{...}
final query = box.query(Person_.name.equals('James Brown'));
� final Stream<Query<Person>> queryStream =
query.watch(triggerImmediately: true);
{...}
}
//O que é o ObjectBox?
Rode em vários isolates com a tranquilidade ACID
🧙 - Multi-threads
void operacaoAsync() {
{...}
final person = Person();
{...}
}
//O que é o ObjectBox?
Rode em vários isolates com a tranquilidade ACID
🧙 - Multi-threads
void operacaoAsync() {
{...}
final person = Person();
store.runInTransactionAsync(
TxMode.write,
(store, parameter) {
//operações na store
},
person,
);� {...}
}
//O que é o ObjectBox?
Rode em vários isolates com a tranquilidade ACID
🧙 - Multi-threads
void operacaoAsync() {
{...}
final person = Person();
store.runInTransactionAsync(
TxMode.write,
(store, parameter) {
store.box<Person>().put(parameter);
},
person,
);� {...}
}
🕷️ - Gestão do banco em debug
//O que é o ObjectBox?
Facilidade em debugar o estado do banco
https://docs.objectbox.io/data-browser
//HANDS ON!
//TODO! Aqui mostrarei 1 exemplo do objectbox rodando o app com pesquisa dinâmica�ex:��
//HANDS ON!
Adicione as dependências
dependencies:
objectbox: ^2.0.0
objectbox_flutter_libs: any
path_provider: ^2.0.14
� dev_dependencies:
build_runner: ^2.0.0
objectbox_generator: any
@> pubspec.yaml
//HANDS ON!
Modele suas entidades
@> user.dart
@Entity()
class User {
@Id()
int id = 0;
� String? name;
� @Backlink()
final orders = ToMany<Order>();
}
@Entity()
class Order {
@Id()
int id = 0;
� final String? productName;
� final user = ToOne<User>();
� Order({
required this.id,
required this.productName,
});
}
@> order.dart
//HANDS ON!
Build o banco de dados
> flutter pub run build_runner build
//HANDS ON!
Crie a Store
class ObjectBox {
late final Store store;
� ObjectBox._create(this.store) {
// Add any additional setup code, e.g. build queries.
}
� static Future<ObjectBox> create() async {
final docsDir = await getApplicationDocumentsDirectory();
final dbPath = '${docsDir.path}${Platform.pathSeparator}objectbox';
final store = await openStore(directory: dbPath);
return ObjectBox._create(store);
}
}
//HANDS ON!
Inicialize o ObjectBox
late ObjectBox objectbox;
�Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
� objectbox = await ObjectBox.create();
runApp(const MyApp());
}
//HANDS ON!
Prepare suas operações CRUD
{...}
final box = objectbox.store.box<Pedido>();
//salva o registro
//se id == 0 ele cria um novo
//se id > 0 ele cria substitui um existente
box.put(pedido);
box.putMany([pedido1, pedido2, ...]);
box.get(id);
box.getMany([id1,id2, ...]);
box.getAll();
box.remove(id);
box.removeMany([id1,id2, ...]);
box.count();
{...}
//HANDS ON!
Prepare suas queries
List<Pedido> getPedidoByNomeProduto(String searchedText) {
final box = objectbox.store.box<Pedido>();
� final query = box
.query(
Pedido_.productName.contains(searchedText),
)
.build();
final pedidos = query.find();
� query.close();
� return pedidos;
}
//FIM
print('OBRIGADO!');
//LINK TREE