Relación Uno a Muchos en Flutter con Parse
16 min
relación uno a muchos en flutter introducción usando parse, puedes almacenar objetos de datos estableciendo relaciones entre ellos para modelar este comportamiento, cualquier \<font color="#2166ae">parseobject\</font> puede ser utilizado como un valor en otro \<font color="#2166ae">parseobject\</font> internamente, el marco de parse almacenará el objeto referido en un solo lugar, para mantener la consistencia eso puede darte un poder extra al construir y ejecutar consultas complejas hay tres tipos principales de relaciones \<font color="#2166ae">uno a uno\</font> , estableciendo relaciones directas entre dos objetos y solo ellos; \<font color="#2166ae">uno a muchos\</font> , donde un objeto puede estar relacionado con muchos otros objetos; \<font color="#2166ae">muchos a muchos\</font> , que puede crear muchas relaciones complejas entre muchos objetos en esta guía detallaremos cómo funciona la \<font color="#2166ae">relación uno a muchos\</font> utilizando un ejemplo práctico de aplicación hay dos formas de crear una \<font color="#2166ae">relación uno a muchos\</font> en parse la primera es usando los \<font color="#2166ae">punteros\</font> en \<font color="#2166ae">clase hija\</font> , que es la más rápida en tiempo de creación y consulta la segunda es usando \<font color="#2166ae">arreglos\</font> de \<font color="#2166ae">punteros\</font> en la clase padre, lo que puede llevar a tiempos de consulta lentos dependiendo de su tamaño debido a este problema de rendimiento, solo usaremos ejemplos de punteros implementarás una aplicación de registro de libros en flutter y crearás y consultarás objetos relacionados usando los \<font color="#2166ae">punteros\</font> de parse la relación como \<font color="#2166ae">uno a uno\</font> no es común y no vamos a cubrirla en nuestras guías como ejemplo, una relación entre la clase usuario y otra clase que contendrá datos sensibles del usuario por razones de seguridad https //blog back4app com/parse server best practices/ ( 1 4 no dejes que los usuarios tengan acceso a datos sensibles de otros ) requisitos previos flutter versión 2 2 x o posterior https //flutter dev/docs/get started/install android studio https //developer android com/studio o vs code instalado https //code visualstudio com/ (con plugins https //docs flutter dev/get started/editor dart y flutter) una aplicación creada https //www back4app com/docs/get started/new parse app en back4app nota sigue el tutorial de nueva aplicación parse https //www back4app com/docs/get started/new parse app para aprender a crear una aplicación parse en back4app una aplicación flutter conectada a back4app nota sigue el instalar parse sdk en el proyecto flutter https //www back4app com/docs/flutter/parse sdk/parse flutter sdk para crear un proyecto flutter conectado a back4app un dispositivo (o dispositivo virtual) que ejecute android o ios entendiendo la aplicación de libro la clase de objeto principal que utilizarás es la \<font color="#2166ae">libro\</font> , almacenando cada entrada de libro en el registro además, estas son las otras tres clases de objeto \<font color="#2166ae">editorial\</font> nombre de la editorial del libro, relación de uno a muchos con \<font color="#2166ae">libro\</font> ; \<font color="#2166ae">género\</font> género del libro, relación de uno a muchos con \<font color="#2166ae">libro\</font> ten en cuenta que para este ejemplo consideraremos que un libro solo puede tener un género; \<font color="#2166ae">autor\</font> autor del libro, relación de muchos a muchos con \<font color="#2166ae">libro\</font> , ya que un libro puede tener más de un autor y un autor puede tener más de un libro también; una representación visual de este modelo de datos asumiremos que cada clase de objeto ( \<font color="#2166ae">editor\</font> , \<font color="#2166ae">género\</font> ) tiene solo un tipo de cadena \<font color="#2166ae">nombre\</font> atributo y \<font color="#2166ae">libro\</font> tiene \<font color="#2166ae">título\</font> y \<font color="#2166ae">año\</font> , aparte de cualquier atributo relacional adicional en las guías anteriores ya hemos visto cómo guardar y leer \<font color="#2166ae">parseobject\</font> así que en esta guía, no cubriremos cómo guardar y leer \<font color="#2166ae">género\</font> y \<font color="#2166ae">editor\</font> objetos encontrarás las siguientes pantallas en la aplicación de libros registro y listado de géneros registro y lista de editores registro de libros lista de editores y libros detalles del libro no explicaremos el código de la aplicación flutter ya que el enfoque principal de esta guía es usar flutter con parse utilizando relaciones 1 crear plantilla de aplicación de libros primero, ejecutemos la plantilla del proyecto de la aplicación de libros abre tu proyecto de flutter de la guía anterior flutter plugin for parse server el repositorio de la aplicación flutter de libros https //github com/templates back4app/flutter associations también está disponible para que lo clones y ejecutes el proyecto copia el main dart https //github com/templates back4app/flutter associations/blob/master/lib/main dart y reemplaza tu código actual de guías anteriores nota cuando \<font color="#2166ae">debug\</font> el parámetro en la función \<font color="#2166ae">parse() initialize\</font> es \<font color="#2166ae">true\</font> , permite mostrar las llamadas a la api de parse en la consola esta configuración puede ayudar en la depuración del código se recomienda desactivar el modo de depuración en la versión de lanzamiento paso 2 conectar la plantilla al proyecto de back4app encuentra tu id de aplicación y las credenciales de clave de cliente navegando a tu panel de control de la aplicación en panel de control de back4app >configuración de la aplicación >seguridad y claves https //www back4app com/docs/parse dashboard/app settings actualiza tu código en \<font color="#2166ae">main dart\</font> con los valores de applicationid y clientkey de tu proyecto en back4app keyapplicationid = id de la aplicación keyclientkey = clave de cliente ejecuta el proyecto, y la aplicación se cargará como se muestra en la imagen haz clic en \<font color="#2166ae">agregar género\</font> para registrar y ver la lista de \<font color="#2166ae">géneros\</font> que se utilizarán en el registro de libros haga clic en \<font color="#2166ae">agregar editor\</font> para registrarse y ver la lista de \<font color="#2166ae">editores\</font> que se utilizarán en el registro de libros haga clic en \<font color="#2166ae">agregar libro\</font> para registrar un nuevo \<font color="#2166ae">libro\</font> utilizando relaciones con \<font color="#2166ae">género\</font> y \<font color="#2166ae">editor\</font> haga clic en \<font color="#2166ae">lista de editor/libro\</font> para ver la lista de \<font color="#2166ae">editores\</font> y \<font color="#2166ae">libros\</font> 3 guardar un objeto libro y sus relaciones esta función creará un nuevo libro en la base de datos de back4app con relaciones busque la función \<font color="#2166ae">dosavebook\</font> en el archivo \<font color="#2166ae">main dart\</font> , e inserte el código a continuación dentro de la \<font color="#2166ae">future\<void\> dosavebook()\</font> función 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 función, sigue estos pasos 1\ crea una nueva instancia de la \<font color="#2166ae">clase libro\</font> con el comando \<font color="#2166ae">parseobject('book')\</font> 2 usa la \<font color="#2166ae">función set\</font> para establecer los campos de este objeto 2 1 \<font color="#2166ae">título\</font> es un atributo de texto que recibe valor del controlador de texto 2 2 \<font color="#2166ae">género\</font> recibe el valor definiendo un \<font color="#2166ae">parseobject\</font> con el \<font color="#2166ae">objectid\</font> del \<font color="#2166ae">género\</font> ( parse convertirá en puntero al guardar ) 2 3 \<font color="#2166ae">editor\</font> recibe el valor definiendo un \<font color="#2166ae">parseobject\</font> con el \<font color="#2166ae">objectid\</font> del \<font color="#2166ae">editor\</font> ( ten en cuenta que podemos especificar para parse que queremos guardar como un \<font color="#2166ae">puntero\</font> usando el \<font color="#2166ae">topointer()\</font> método ) 3 llama a la \<font color="#2166ae">función save\</font> en \<font color="#2166ae">parseobject\</font> , que registrará efectivamente el objeto en tu base de datos en el panel de control de back4app ejecuta la aplicación y prueba la nueva función haz clic en el \<font color="#2166ae">agregar libro\</font> botón completa la información del libro la aplicación requiere la selección de los autores, pero el código para ellos se cubrirá solo en la próxima guía haz clic en \<font color="#2166ae">guardar libro\</font> botón para confirmar que el nuevo objeto se guarda en la base de datos con relaciones, puedes acceder al \<font color="#2166ae">back4app dashboard\</font> y acceder a la \<font color="#2166ae">clase book\</font> si accedes a tu clase book usando el dashboard, puedes hacer clic en el valor del puntero del objeto y serás redirigido al objeto referenciado puede parecer una función inofensiva, pero esto hace que la depuración y el rastreo de errores sean mucho más rápidos que buscarlos manualmente 4 consultar la lista de libros y sus objetos relacionados esta función consultará libros en la base de datos de back4app utilizando relaciones con el editor a través del editor, obtendremos la lista de libros busca la función \<font color="#2166ae">getbooklist\</font> en el archivo \<font color="#2166ae">main dart\</font> , luego reemplaza el código a continuación dentro de la \<font color="#2166ae">future\<list\<parseobject\>\> getbooklist(string publisherid)\</font> función 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 función, sigue estos pasos crea una instancia de \<font color="#2166ae">parsequery\</font> objeto para \<font color="#2166ae">book\</font> clase inserta una condición en la consulta, para buscar \<font color="#2166ae">books\</font> donde el campo \<font color="#2166ae">publisher\</font> es igual a \<font color="#2166ae">pointer\</font> de \<font color="#2166ae">publisher parseobject\</font> ordenamos el resultado en orden ascendente \<font color="#2166ae">name\</font> realiza un método de búsqueda de la consulta usando \<font color="#2166ae">query()\</font> método si las operaciones tienen éxito, se devolverán los objetos en \<font color="#2166ae">book\</font> ejecuta la aplicación y prueba la nueva consulta primero, haz clic en el \<font color="#2166ae">list publisher/book\</font> botón ¡está hecho! en este punto, aprendiste cómo crear y consultar relaciones de uno a muchos en parse en \<font color="#2166ae">flutter\</font> en la próxima guía, te mostraremos cómo hacer relaciones de muchos a muchos y cómo realizar consultas que devuelvan datos de objetos relacionados