Flutter
...
Data Objects
Implementar Relações 1:N no Flutter com Parse
16 min
relação um para muitos no flutter introdução usando o parse, você pode armazenar objetos de dados estabelecendo relações entre eles para modelar esse comportamento, qualquer parseobject parseobject pode ser usado como um valor em outros parseobject parseobject internamente, o framework parse armazenará o objeto referenciado em apenas um lugar, para manter a consistência isso pode lhe dar um poder extra ao construir e executar consultas complexas existem três tipos principais de relação um para um um para um , estabelecendo relações diretas entre dois objetos e apenas eles; um para muitos um para muitos , onde um objeto pode estar relacionado a muitos outros objetos; muitos para muitos muitos para muitos , que pode criar muitas relações complexas entre muitos objetos neste guia, detalharemos como a relação um para muitos relação um para muitos funciona usando um exemplo prático de aplicativo existem duas maneiras de criar uma relação um para muitos relação um para muitos no parse a primeira é usando os ponteiros ponteiros em classe filha classe filha , que é a mais rápida em tempo de criação e consulta a segunda é usando arrays arrays de ponteiros ponteiros na classe pai, o que pode levar a tempos de consulta lentos dependendo do tamanho deles por causa desse problema de desempenho, usaremos apenas exemplos de ponteiros você implementará um aplicativo de registro de livros em flutter e criará e consultará objetos relacionados usando os ponteiros ponteiros relação como um para um um para um não é comum e não vamos abordar em nossos guias como exemplo, uma relação entre a classe usuário e outra classe que conterá dados sensíveis do usuário por razões de segurança https //blog back4app com/parse server best practices/ ( 1 4 não deixe os usuários terem acesso a dados sensíveis de outros ) pré requisitos versão do flutter 2 2 x ou posterior https //flutter dev/docs/get started/install android studio https //developer android com/studio ou vs code instalado (com plugins dart e flutter) um app criado no back4app nota siga o tutorial de novo app parse para aprender como criar um app parse no back4app um app flutter conectado ao back4app nota siga o instalar o sdk parse no projeto flutter para criar um projeto flutter conectado ao back4app um dispositivo (ou dispositivo virtual) executando android ou ios entendendo o app do livro a classe principal de objeto que você usará é a livro livro , armazenando cada entrada de livro no registro além disso, estas são as outras três classes de objeto editora editora nome da editora do livro, relação de um para muitos com livro livro ; gênero gênero gênero do livro, relação de um para muitos com livro livro note que para este exemplo consideraremos que um livro pode ter apenas um gênero; autor autor autor do livro, relação de muitos para muitos com livro livro , uma vez que um livro pode ter mais de um autor e um autor pode ter mais de um livro também; uma representação visual deste modelo de dados vamos assumir que cada classe de objeto ( editora editora , gênero gênero ) tem apenas um tipo de string nome nome atributo e livro livro tem título título e ano ano , além de qualquer atributo relacional adicional nos guias anteriores, já vimos como salvar e ler parseobject parseobject então, neste guia, não cobriremos como salvar e ler gênero gênero e editora editora objetos você encontrará as seguintes telas no aplicativo de livros registro e listagem de gênero registro e lista de editoras registro de livros lista de editoras e livros detalhes do livro não vamos explicar o código do aplicativo flutter, uma vez que o foco principal deste guia é usar o flutter com parse utilizando relações 1 criar modelo de aplicativo de livro vamos primeiro executar o modelo do projeto do aplicativo de livro abra seu projeto flutter do guia anterior flutter plugin for parse server o aplicativo flutter de livro https //github com/templates back4app/flutter associations está disponível para você clonar e executar o projeto copie o main dart https //github com/templates back4app/flutter associations/blob/master/lib/main dart e substitua seu código atual dos guias anteriores nota quando debug debug o parâmetro na função parse() initialize parse() initialize é true true , permite exibir chamadas da api parse no console esta configuração pode ajudar na depuração do código é aconselhável desativar o debug na versão de lançamento passo 2 conectar o template ao projeto back4app encontre suas credenciais de application id e client key navegando até o dashboard do seu app em back4app dashboard >app settings >security & keys https //www back4app com/docs/parse dashboard/app settings atualize seu código em main dart main dart com os valores de applicationid e clientkey do seu projeto no back4app keyapplicationid = app id keyclientkey = client key execute o projeto, e o app será carregado como mostrado na imagem clique em adicionar gênero adicionar gênero para registrar e visualizar a lista de gêneros gêneros que serão usados no registro de livros clique em adicionar editor adicionar editor para registrar e visualizar a lista de editores editores que serão usados no registro de livros clique em adicionar livro adicionar livro para registrar um novo livro livro usando relações com gênero gênero e editor editor clique em lista de editor/livro lista de editor/livro para visualizar a lista de editores editores e livros livros 3 salvar um objeto livro e suas relações esta função irá criar um novo livro no banco de dados back4app com relações procure pela função dosavebook dosavebook no arquivo main dart main dart , e insira o código abaixo dentro da future\<void> dosavebook() future\<void> dosavebook() função 1 final book = parseobject('book') 2 set('title', controllertitle text trim()) 3 set('year', int parse(controlleryear text trim())) 4 //the objectid will be converted to a pointer on the save() method 5 set('genre', parseobject('genre') objectid = genre objectid) 6 //you can also convert to a pointer object before the saving using the topointer() method 7 set( 8 'publisher', 9 (parseobject('publisher') objectid = publisher objectid) 10 topointer()); 11 12 await book save(); para construir esta função, siga estas etapas 1\ crie uma nova instância da classe parse book book com o comando parseobject('book') parseobject('book') 2 use a função set set para definir os campos para este objeto 2 1 título título é um atributo de texto que recebe valor do controlador de texto 2 2 gênero gênero recebe o valor definindo um parseobject parseobject com o objectid objectid do gênero gênero ( o parse converterá para ponteiro ao salvar ) 2 3 editora editora recebe o valor definindo um parseobject parseobject com o objectid objectid da editora editora ( observe que podemos especificar para o parse que queremos salvar como um ponteiro ponteiro usando o topointer() topointer() método ) 3 chame a função save save em parseobject parseobject , que efetivamente registrará o objeto no seu banco de dados no painel do back4app execute o aplicativo e teste a nova função clique no adicionar livro adicionar livro botão preencha as informações do livro o aplicativo requer a seleção dos autores, mas o código para eles será abordado apenas no próximo guia clique em salvar livro salvar livro botão para confirmar que o novo objeto está salvo no banco de dados com relações, você pode acessar o back4app dashboard back4app dashboard e acessar a classe livro classe livro se você acessar sua classe livro usando o dashboard, pode clicar no valor do ponteiro do objeto e será redirecionado para o objeto referenciado pode parecer um recurso inofensivo, mas isso torna a depuração e o rastreamento de erros muito mais rápidos do que procurá los manualmente 4 consultar a lista de livros e seus objetos relacionados esta função irá consultar livros no banco de dados back4app utilizando relações com o editor através do editor, obteremos a lista de livros procure pela função getbooklist getbooklist no arquivo main dart main dart , então substitua o código abaixo dentro da future\<list\<parseobject>> getbooklist(string publisherid) future\<list\<parseobject>> getbooklist(string publisherid) função 1 querybuilder\<parseobject> querybook = 2 querybuilder\<parseobject>(parseobject('book')) 3 whereequalto('publisher', 4 (parseobject('publisher') objectid = publisherid) topointer()) 5 orderbyascending('title'); 6 final parseresponse apiresponse = await querybook query(); 7 8 if (apiresponse success && apiresponse results != null) { 9 return apiresponse results; 10 } else { 11 return \[]; 12 } para construir esta função, siga estas etapas crie uma instância de parsequery parsequery objeto para book book classe insira uma condição na consulta, para buscar books books onde publisher publisher campo é igual a pointer pointer de publisher parseobject publisher parseobject ordenamos o resultado em ordem crescente de nome nome faça um método de busca da query usando query() query() método se as operações forem bem sucedidas, os objetos em book book serão retornados execute o aplicativo e teste a nova consulta primeiro, clique no botão list publisher/book list publisher/book está feito! neste ponto, você aprendeu como criar e consultar relações de um para muitos no parse em flutter flutter no próximo guia, vamos mostrar como fazer relações de muitos para muitos e como realizar consultas retornando dados de objetos relacionados