1 of 40

Alavancando features offline-first� com o ObjectBox

2 of 40

class Bruno Bee Nahorny {}

3 of 40

class Bruno Bee Nahorny {

  final flutterDesde = 2019;�}

4 of 40

class Bruno Bee Nahorny {

  final flutterDesde = 2019;

  final atualmente = Granter();

}

5 of 40

class Bruno Bee Nahorny {

  final flutterDesde = 2019;

  final atualmente = Granter();

  final experiencia = ConectaCidasc();}

6 of 40

class Bruno Bee Nahorny {

  final flutterDesde = 2019;

  final atualmente = Gaudium();

  void contato() {

 

  

  }}

7 of 40

//O que é o ObjectBox?

🚀 - Alta performance

🔗 - Relações entre entidades

- NoSQL

🔍 - Queries

🧙 - Multi-thread

🪳 - Gestão do banco em debug

8 of 40

//O que é o ObjectBox?

🚀 - Alta performance

https://pub.dev/packages/objectbox

9 of 40

//O que é o ObjectBox?

- NoSQL

  void queryAlgo() {

    {...}

    final query = box

        .query(�          {...}

        )�  }

API totalmente em Dart

10 of 40

//O que é o ObjectBox?

- NoSQL

  void queryAlgo() {

    {...}

    final query = box

        .query(�          Person_�        )�  }

API totalmente em Dart

11 of 40

//O que é o ObjectBox?

- NoSQL

  void queryAlgo() {

    {...}

    final query = box

        .query(�          Person_.name�        )�  }

API totalmente em Dart

12 of 40

//O que é o ObjectBox?

- NoSQL

  void queryAlgo() {

    {...}

    final query = box

        .query(�          Person_.name.equals(

            'James Brown',

          ),�        )�  }

API totalmente em Dart

13 of 40

//O que é o ObjectBox?

- NoSQL

  void queryAlgo() {

    {...}

    final query = box

        .query(Person_.name.equals(

          'James Brown',

        ))�  }

API totalmente em Dart

14 of 40

//O que é o ObjectBox?

- NoSQL

  void queryAlgo() {

    {...}

    final query = box

        .query(Person_.name.equals(

          'James Brown',

        ))

        .order(Person_.name)

        .build();

  }

API totalmente em Dart

15 of 40

//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

16 of 40

//O que é o ObjectBox?

Suporta relações toOne e toMany

🔗 - Relações entre entidades

@Entity()

class Person {

  int id;

}

17 of 40

//O que é o ObjectBox?

Suporta relações toOne e toMany

🔗 - Relações entre entidades

@Entity()

class Person {

  int id;

}

@Entity()

class Dog {

  int id;

}

18 of 40

//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>();

}

19 of 40

//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>();

}

20 of 40

//O que é o ObjectBox?

Queries em objetos relacionados

🔍 - Queries

  void queryAlgoRelacionado() {

    {...}

    final builder = box.query(Person_.name.equals('James Brown'));

    builder

      ..link(

      )

  }

21 of 40

//O que é o ObjectBox?

Queries em objetos relacionados

🔍 - Queries

  void queryAlgoRelacionado() {

    {...}

    final builder = box.query(Person_.name.equals('James Brown'));

    builder

      ..link(

        Person_.dog,

      )

  }

22 of 40

//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),

      )

  }

23 of 40

//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);

  }

24 of 40

//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();

    {...}

  }

25 of 40

//O que é o ObjectBox?

Observe Queries com Streams

🔍 - Queries + Streams

  void queryAlgoStream() {

    {...}

    final query = box.query(Person_.name.equals('James Brown'));

  }

26 of 40

//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

  }

27 of 40

//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);

    {...}

  }

28 of 40

//O que é o ObjectBox?

Rode em vários isolates com a tranquilidade ACID

🧙 - Multi-threads

void operacaoAsync() {

    {...}

    final person = Person();

    {...}

}    

29 of 40

//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,

    );�    {...}

}    

30 of 40

//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,

    );�    {...}

}    

31 of 40

🕷️ - Gestão do banco em debug

//O que é o ObjectBox?

Facilidade em debugar o estado do banco

https://docs.objectbox.io/data-browser

32 of 40

//HANDS ON!

//TODO! Aqui mostrarei 1 exemplo do objectbox rodando o app com pesquisa dinâmica�ex:�

33 of 40

//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

34 of 40

//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

35 of 40

//HANDS ON!

Build o banco de dados

> flutter pub run build_runner build

36 of 40

//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);

  }

}

37 of 40

//HANDS ON!

Inicialize o ObjectBox

late ObjectBox objectbox;

Future<void> main() async {

  WidgetsFlutterBinding.ensureInitialized();

  objectbox = await ObjectBox.create();

  runApp(const MyApp());

}

38 of 40

//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();

    {...}

39 of 40

//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;

  }

40 of 40

//FIM

  print('OBRIGADO!');

//LINK TREE