Esta é uma postagem de convidado escrita por Luca Christille. Luca é um desenvolvedor autodidata e criador do Fluttercouch. Ele escreveu sua primeira linha de código quando tinha oito anos de idade, e sua paixão pelo desenvolvimento só cresceu desde então. Ele é um desenvolvedor Android certificado pelo Google e trabalha em tempo integral como engenheiro de pilha completa. Passa a maior parte de seu tempo livre trabalhando como freelancer de desenvolvimento móvel.

Luca não é estranho aos bancos de dados NoSQL, tendo passado algum tempo trabalhando e avaliando várias soluções. Por fim, ele foi atraído pelo Couchbase por seus recursos de sincronização de dados, pois um dos principais requisitos de muitos aplicativos móveis é ter a funcionalidade "offline-first".
No início, Luca se concentrava estritamente na criação de aplicativos totalmente nativos. No entanto, ele acabou se deparando com um cliente que exigia uma solução multiplataforma e, depois de pesquisar as diversas opções disponíveis, optou por usar o Flutter.
Flutter: Crie aplicativos bonitos
Dando um passo atrás, você pode estar se perguntando: o que é Flutuação? Em poucas palavras, O Flutter é um SDK de código aberto para criar aplicativos móveis de alto desempenho e alta fidelidade para iOS e Android. A estrutura Flutter facilita a criação de interfaces de usuário que reagem suavemente em seu aplicativo, reduzindo a quantidade de código necessária para sincronizar e atualizar a visualização do aplicativo.
Como muitos outros ecossistemas de desenvolvimento, o Flutter oferece a capacidade de integração com projetos de código componentizado conhecidos como Pacotes do Flutter. Os pacotes do Flutter ajudam os desenvolvedores a integrar funcionalidades complexas em seus aplicativos móveis. Os pacotes podem ser qualquer coisa, desde Dardo-bibliotecas baseadas em Flutter que estendem os recursos padrão da estrutura do Flutter para soluções que interagem diretamente com as camadas nativas e permitem novas funcionalidades baseadas em SDKs do Android e do iOS.
Apresentando o Fluttercouch
Fluttercouch é um pacote que integra perfeitamente o Couchbase Mobile em seus aplicativos Flutter, gerenciando as camadas nativas do Android e do iOS. O pacote evita que você tenha que criar um código padrão para configurar o banco de dados, usar documentos e executar a replicação. Em última análise, o Fluttercouch permite que você se concentre na criação da lógica do aplicativo, usando Dart, em vez de criar código específico da plataforma com os SDKs nativos do Couchbase Mobile.
Primeiros passos
Para começar a usar Fluttercouch você precisará adicionar uma diretiva de dependência ao pubspec.yaml arquivo.
|
1 2 |
dependencies: fluttercouch: ^0.5.0 |
Depois de adicionar a diretiva de dependência, você pode usar Fluttercouch em qualquer classe de modelo que você já tenha, ou simplesmente comece com uma nova. Você pode estender as classes de modelo de InheritedWidget, Scoped Model ou Bloc. Uma vez estendida, a classe Fluttercouch os superpoderes estão liberados!
|
1 2 3 4 5 6 7 |
class CounterBlock extends Bloc<CounterBlock, int> with Fluttercouch { class FrogColor extends InheritedWidget with Fluttercouch { class CounterModel extends Model with Fluttercouch { class MyModel extends Object with Fluttercouch { |
Operações básicas
A partir desse ponto, você pode buscar uma instância de um banco de dados criado anteriormente ou instanciar um novo banco de dados diretamente da sua classe. Quando um banco de dados é inicializado, ele se torna o escolha padrãoe qualquer outra invocação de método fará referência a ele. Depois de criar uma instância de banco de dados, você poderá executar facilmente todas as operações CRUD que já espera dos bancos de dados do Couchbase Lite.
Por exemplo, você pode recuperar um documento pelo seu id e obter uma string da propriedade myProperty. Em seguida, converta o documento em um documento mutável, modifique-o e salve-o novamente.
|
1 2 3 4 5 6 7 |
helloCouchbase() async { await initDatabaseWithName('myDatabase'); Document myDocument = await getDocumentWithId('hello::world'); String helloWorld = myDocument.getString('greetings'); MutableDocument myMutableDocument = myDocument.toMutable(); myMutableDocument.setString('helloKey', 'worldValue'); saveDocument(myMutableDocument); |
Trabalhando com replicadores
A replicação de dados também é possível com o Fluttercouch. Usando o Dart, você pode criar e configurar facilmente os replicadores.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// Supplies the address of the database replicated by the Sync Gateway server. // In case you want to enable SSL encryption, use wss:// insted of ws://. // To connect to a local Sync Gateway instance, use localhost as hostname for iOs simulator, and 10.0.2.2 for Android simulator. setReplicatorEndpoint("ws://your-server-address:4984/yourReplicationDatabaseName"); // Sets the replication type as PULL, PUSH or PUSH_AND_PULL setReplicatorType("PUSH_AND_PULL"); // Sets the replication as continuous setReplicatorContinuous(true); // Sets a BasicAuthenticator for the replication. The methods accept a parameter of type Map<String, String> // with two keys named "username" and "password". setReplicatorBasicAuthentication(<String, String>{ "username": "yourUsername", "password": "yourPassword" }); // Sets a SessionAuthenticator for the replication. SessionID is retrieved querying the public REST API of your Sync Gateway setReplicatorSessionAuthentication(sessionID); // Before starting the replication, you must init the replicator object initReplicator(); // Starts the replication startReplicator(); // Stops the replication stopReplicator(); |
Você também pode ouvir os eventos de replicação passando uma função para o método listenReplicatorEvents. O listenReplicatorEvents chama a função com um parâmetro que contém o tipo de evento.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
listenReplicationEvents((dynamic event) { switch(event) { case ("BUSY"): // executed when the replicator status changes to BUSY case ("IDLE"): // executed when the replicator status changes to IDLE case ("OFFLINE"): // executed when the replicator status changes to OFFLINE case ("STOPPED"): // executed when the replicator status changes to STOPPED case ("CONNECTING"): // executed when the replicator status changes to CONNECTING } } ); |
Próximas etapas
Agora você está pronto para liberar o potencial do Couchbase em seu próximo aplicativo Flutter! Faça o download do Fluttercouch no site repositório públicoe uma documentação mais detalhada, você pode visitar a página do projeto em GitHub para obter uma referência completa sobre como interagir com seu banco de dados.
O Fluttercouch é um projeto de código aberto que atualmente mantenho e adiciono durante meu tempo livre. Em um futuro próximo, estou ansioso para concluir a camada de abstração de consulta N1QL para Dart, adicionando suporte para Blob e Subdocumento e muitos outros recursos que existem nos SDKs do CouchbaseMobile. O projeto se beneficiaria muito com as contribuições da comunidade, e todos os comentários, problemas e/ou solicitações de pull serão apreciados!
Oi, isso é um banco de dados do lado do cliente ou do lado do servidor?
Isso é para o banco de dados incorporado do Couchbase Lite (não para o Couchbase Server)
Como isso seria sincronizado com um banco de dados do Couchbase Server em constante mudança e ativo (CRUD)?
Por exemplo, digamos que você tenha 1 milhão de documentos em seu servidor CB, que mudam constantemente - alguns são excluídos, outros atualizados, novos são criados, ... e tudo isso possivelmente várias vezes a cada minuto ou mesmo segundo - mas obviamente você não gostaria de sincronizar todo o banco de dados do servidor com o cliente o tempo todo, em vez disso, apenas os documentos relevantes (digamos, 10 de cada vez)... isso é possível? Ou isso exigiria uma conexão direta com o banco de dados do servidor a partir do cliente, e como isso funcionaria por meio do Dart?