More
Cómo usar Aisladores en Flutter con Back4app para manejar el procesamiento de datos pesados
13 min
introducción flutter es un marco poderoso para construir aplicaciones multiplataforma, pero como muchos marcos móviles, ejecuta todo el código en un solo hilo por defecto este hilo, conocido como el hilo de la interfaz de usuario, es responsable de renderizar la interfaz de tu aplicación cuando tareas pesadas como el procesamiento de datos o el manejo de archivos ocurren en el hilo de la interfaz de usuario, pueden hacer que la aplicación se retrase o "jankee", lo que lleva a una mala experiencia de usuario para abordar esto, dart proporciona una característica llamada isolates los isolates te permiten ejecutar cálculos costosos en un hilo separado, manteniendo tu interfaz de usuario receptiva en este tutorial, exploraremos cómo usar isolates en una aplicación flutter para manejar tareas pesadas de procesamiento de datos, como deserializar grandes archivos json obtenidos de un backend de back4app 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 un 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, widgets de flutter y programación asíncrona paso 1 – configurando tu backend de back4app crea un proyecto de back4app inicia sesión en tu cuenta de back4app https //www back4app com/ y crea un nuevo proyecto crea clases de parse para este tutorial, crea una clase de parse llamada registro que almacene grandes cantidades de datos título (string) el título del registro descripción (string) una descripción del registro metadatos (json) contenido de metadatos grande asociado con el registro poblar la clase con datos de ejemplo agrega varios registros a la clase de registro con grandes objetos json en el campo de metadatos esto simulará el tipo de procesamiento de datos que podría causar retrasos en una aplicación real obtén tus credenciales de back4app navega a la configuración de tu proyecto para recuperar tu id de aplicación y clave de cliente, que necesitarás para conectar tu aplicación flutter a back4app paso 2 – configurando tu proyecto flutter crea un nuevo proyecto flutter abre tu terminal o símbolo del sistema y ejecuta flutter create isolate example agregar dependencias abre pubspec yaml y agrega las siguientes dependencias dependencies flutter sdk flutter parse server sdk flutter latest version ejecuta flutter pub get para instalar estas dependencias inicializa parse en tu aplicación en lib/main dart , importa el sdk de parse y inicialízalo en la función import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); } class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home recordscreen(), ); } } reemplace 'your back4app app id' y 'your back4app client key' con sus credenciales reales de back4app paso 3 – recuperando datos de back4app cree el widget recordscreen en lib/main dart , cree una nueva pantalla que recupere datos de back4app class recordscreen extends statefulwidget { @override recordscreenstate createstate() => recordscreenstate(); } class recordscreenstate extends state\<recordscreen> { list\<parseobject>? records; bool isloading = true; @override void initstate() { super initstate(); fetchrecords(); } future\<void> fetchrecords() async { final query = querybuilder\<parseobject>(parseobject('record')); final response = await query query(); if (response success && response results != null) { setstate(() { records = response results as list\<parseobject>; isloading = false; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('records')), body isloading ? center(child circularprogressindicator()) listview\ builder( itemcount records! length, itembuilder (context, index) { final record = records!\[index]; return listtile( title text(record get\<string>('title') ?? 'no title'), subtitle text(record get\<string>('description') ?? 'no description'), ); }, ), ); } } este código recupera todos los registros de la record clase en back4app y los muestra en una lista paso 4 – descargando el procesamiento pesado de datos a un aislado usando aislado para deserializar json grande suponga que el metadata campo en cada registro contiene un gran objeto json que necesita ser deserializado para evitar bloquear el hilo de la interfaz de usuario, utilizaremos un aislado para realizar esta tarea import 'dart\ isolate'; import 'dart\ convert'; future\<map\<string, dynamic>> deserializejsoninisolate(string jsonstring) async { // spawning an isolate to perform json decoding final result = await isolate run(() { return jsondecode(jsonstring) as map\<string, dynamic>; }); return result; } future\<void> processrecord(parseobject record) async { string metadata = record get\<string>('metadata') ?? '{}'; // offload json deserialization to an isolate map\<string, dynamic> decodeddata = await deserializejsoninisolate(metadata); // do something with the decoded data print('processed metadata for ${record get\<string>('title')}'); } integrar el procesamiento aislado en la aplicación actualizar el recordscreen widget para procesar los metadatos de cada registro utilizando el aislado class recordscreenstate extends state\<recordscreen> { list\<parseobject>? records; bool isloading = true; @override void initstate() { super initstate(); fetchandprocessrecords(); } future\<void> fetchandprocessrecords() async { final query = querybuilder\<parseobject>(parseobject('record')); final response = await query query(); if (response success && response results != null) { list\<parseobject> fetchedrecords = response results as list\<parseobject>; // process each record's metadata using an isolate for (var record in fetchedrecords) { await processrecord(record); } setstate(() { records = fetchedrecords; isloading = false; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('records')), body isloading ? center(child circularprogressindicator()) listview\ builder( itemcount records! length, itembuilder (context, index) { final record = records!\[index]; return listtile( title text(record get\<string>('title') ?? 'no title'), subtitle text(record get\<string>('description') ?? 'no description'), ); }, ), ); } } esta implementación obtiene registros de back4app, descarga la pesada tarea de deserialización de json a un aislado y actualiza la interfaz de usuario una vez que el procesamiento se completa paso 5 – pruebas y ejecución de tu aplicación ejecuta tu aplicación usando flutter run deberías ver una lista de registros obtenidos de back4app los metadatos de cada registro se procesan en un isolate separado, asegurando que la interfaz de usuario se mantenga fluida y receptiva verifica el rendimiento probando con archivos json grandes en el campo de metadatos observa cómo el uso de isolates previene el retraso y mantiene la interfaz de usuario receptiva conclusión en este tutorial, aprendiste cómo usar isolates en flutter para manejar tareas de procesamiento de datos pesados, como deserializar archivos json grandes al descargar estas tareas a un isolate, mantienes el hilo de la interfaz de usuario libre para manejar el renderizado, lo que resulta en una aplicación más fluida y receptiva integrar back4app como el backend te permite gestionar y recuperar datos de manera eficiente, mientras que el modelo de isolate de dart asegura que tu aplicación siga siendo eficiente incluso al manejar operaciones complejas para más información sobre cómo usar flutter con back4app, consulta la documentación de back4app https //www back4app com/docs y documentación de flutter https //flutter dev/docs ¡feliz codificación!