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 |
dependências: 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 |
classe CounterBlock se estende Bloco<CounterBlock, int> com Fluttercouch { classe FrogColor se estende InheritedWidget com Fluttercouch { classe CounterModel se estende Modelo com Fluttercouch { classe MyModel se estende Objeto com 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() assíncrono { aguardar initDatabaseWithName('myDatabase'); Documento meuDocumento = aguardar getDocumentWithId('hello::world'); Cordas helloWorld = meuDocumento.getString('greetings' (saudações)); MutableDocument myMutableDocument = meuDocumento.toMutable(); myMutableDocument.setString('helloKey', 'worldValue'); salvarDocumento(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 |
// Fornece o endereço do banco de dados replicado pelo servidor Sync Gateway. // Caso deseje ativar a criptografia SSL, use wss:// em vez de ws://. // Para se conectar a uma instância local do Sync Gateway, use localhost como nome de host para o simulador iOs e 10.0.2.2 para o simulador Android. setReplicatorEndpoint("ws://your-server-address:4984/yourReplicationDatabaseName"); // Define o tipo de replicação como PULL, PUSH ou PUSH_AND_PULL setReplicatorType("PUSH_AND_PULL"); // Define a replicação como contínua setReplicatorContinuous(verdadeiro); // Define um BasicAuthenticator para a replicação. Os métodos aceitam um parâmetro do tipo Map // com duas chaves denominadas "username" e "password". setReplicatorBasicAuthentication(<Cordas, Cordas>{ "nome de usuário": "yourUsername" (seu nome de usuário), "senha": "yourPassword" (sua senha) }); // Define um SessionAuthenticator para a replicação. O SessionID é recuperado por meio de consulta à API REST pública de seu Sync Gateway setReplicatorSessionAuthentication(ID da sessão); // Antes de iniciar a replicação, você deve inicializar o objeto replicador initReplicator(); // Inicia a replicação startReplicator(); // Interrompe a replicação 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((dinâmico evento) { interruptor(evento) { caso ("BUSY" (OCUPADO)): // executado quando o status do replicador muda para BUSY (ocupado) caso ("IDLE"): // executado quando o status do replicador muda para IDLE caso ("OFFLINE"): // executado quando o status do replicador muda para OFFLINE caso ("STOPPED" (PARADO)): // executado quando o status do replicador muda para STOPPED caso ("CONECTANDO"): // executado quando o status do replicador muda para 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?