More
Cómo usar Completers de Flutter con un backend en Back4app
11 min
introducción los futuros y flujos son el camino a seguir en cualquier tipo de operación asíncrona sin embargo, a veces ambos no son suficientes si deseas un control más avanzado sobre los futuros , entonces utiliza un completer es una herramienta a través de la cual puedes completar un futuro programáticamente de alguna manera, esto proporciona un mejor control sobre las operaciones asíncronas este tutorial te ayudará a trabajar con completers en una aplicación que interactúa con un backend en back4app al final de este tutorial, habrás aprendido cómo usar completers en una aplicación flutter para gestionar tareas asíncronas e integrar estas tareas con un servicio backend proporcionado por back4app vamos a crear una aplicación muy simple que obtenga datos de un backend de back4app utilizando un completer para controlar el flujo de la aplicación requisitos previos para completar este tutorial, necesitarás una cuenta de back4app regístrate para obtener una cuenta gratuita en back4app com https //www back4app com entorno de desarrollo de flutter configurado en tu máquina local sigue la guía de instalación de flutter https //flutter dev/docs/get started/install si aún no lo has configurado conocimientos básicos de dart y programación asíncrona en flutter si necesitas un repaso, consulta la guía de programación asíncrona de flutter https //dart dev/codelabs/async await paso 1 – configurando tu backend de back4app primero, configuremos un backend simple en back4app con el que interactuará nuestra aplicación flutter inicia sesión en tu cuenta de back4app y crea un nuevo proyecto configura una nueva clase parse llamada task , que almacenará las tareas que nuestra aplicación flutter recuperará agrega las siguientes columnas a la task clase nombre (string) el nombre de la tarea estado (boolean) el estado de la tarea (completada o no) agrega algunas tareas de ejemplo en la base de datos de back4app para probar por ejemplo tarea 1 nombre = "completar tutorial de flutter", estado = true tarea 2 nombre = "iniciar nuevo proyecto", estado = false tu backend de back4app ahora está listo para ser accedido por la aplicación flutter paso 2 – creando un proyecto flutter a continuación, crearemos un nuevo proyecto de flutter abre tu terminal o símbolo del sistema ejecuta el siguiente comando para crear un nuevo proyecto de flutter flutter create completer demo navega al directorio del proyecto cd completer demo 2\ abre el proyecto en tu editor de código preferido (por ejemplo, vs code, android studio) paso 3 – agregar el sdk de parse y configurar la aplicación ahora, agreguemos las dependencias necesarias para interactuar con back4app abre pubspec yaml y agrega las siguientes dependencias dependencies flutter sdk flutter parse server sdk flutter ^3 0 0 2\ ejecuta flutter pub get para instalar las dependencias 3\ en lib/main dart , importa el sdk de parse import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; import 'dart\ async'; 4\ inicializa parse en la main función void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your app id'; const keyclientkey = 'your client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); } reemplaza 'your app id' y 'your client key' con tus credenciales reales de back4app paso 4 – usando completers para obtener datos asincrónicamente ahora, usemos un completer para obtener datos del backend de back4app y controlar cuándo los datos están disponibles para su uso en la interfaz de usuario en lib/main dart , crea una nueva clase que obtendrá tareas de back4app usando un completer class taskmanager { final completer\<list\<parseobject>> completer = completer(); future\<list\<parseobject>> get tasks => completer future; taskmanager() { fetchtasks(); } void fetchtasks() async { querybuilder\<parseobject> query = querybuilder\<parseobject>(parseobject('task')); final parseresponse response = await query query(); if (response success && response results != null) { completer complete(response results); } else { completer completeerror('failed to load tasks'); } } } esta clase inicializa un completer , comienza a buscar datos y completa el completer cuando los datos están disponibles 2\ en el myapp widget, usa el taskmanager para buscar y mostrar tareas class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home scaffold( appbar appbar(title text('flutter completer demo')), body futurebuilder\<list\<parseobject>>( future taskmanager() tasks, builder (context, snapshot) { if (snapshot connectionstate == connectionstate waiting) { return center(child circularprogressindicator()); } else if (snapshot haserror) { return center(child text('error ${snapshot error}')); } else if (!snapshot hasdata || snapshot data! isempty) { return center(child text('no tasks found ')); } else { return listview\ builder( itemcount snapshot data! length, itembuilder (context, index) { final task = snapshot data!\[index]; return listtile( title text(task get\<string>('name') ?? 'no name'), subtitle text('completed ${task get\<bool>('status') ? 'yes' 'no'}'), ); }, ); } }, ), ), ); } } 3\ ejecuta tu aplicación flutter deberías ver una lista de tareas obtenidas de tu backend de back4app, con sus nombres y estado de finalización conclusión en este tutorial, aprendiste cómo usar flutter completers para gestionar operaciones asíncronas y controlar el flujo de obtención de datos en tu aplicación al integrarte con back4app, creaste un backend simple pero poderoso para tu aplicación flutter, permitiéndote obtener y mostrar datos dinámicamente este enfoque se puede extender para manejar escenarios más complejos, como la autenticación de usuarios, la manipulación de datos y más para más información sobre cómo usar flutter con back4app, consulta la documentación de back4app flutter https //www back4app com/docs/flutter/overview ¡feliz codificación!