More
Como otimizar operações assíncronas no Flutter com Future.wait e Back4app
7 min
introdução a programação assíncrona é essencial no desenvolvimento moderno de aplicativos, especialmente ao lidar com tarefas como buscar dados de várias fontes ou realizar várias requisições de rede no entanto, lidar com várias chamadas assíncronas de forma eficiente pode ser desafiador no flutter, o future wait método fornece uma maneira poderosa de gerenciar múltiplos futures , permitindo que seu aplicativo aguarde várias operações assíncronas de forma concorrente e eficiente neste tutorial, você aprenderá como usar future wait no flutter para otimizar o desempenho do seu aplicativo ao lidar com várias tarefas assíncronas vamos integrar essa técnica com o back4app, onde você pode realizar buscas de dados concorrentes do seu backend, armazenar os resultados e reduzir significativamente o tempo de espera para seus usuários pré requisitos para completar este tutorial, você precisará uma conta no back4app inscreva se para uma conta gratuita em back4app com https //www back4app com ambiente de desenvolvimento flutter configurado na sua máquina local siga o guia de instalação do flutter https //flutter dev/docs/get started/install se você ainda não o configurou conhecimento básico de programação assíncrona no flutter e como usar o back4app como um serviço de backend se você é novo no back4app, confira o guia de introdução ao back4app https //www back4app com/docs/get started/welcome passo 1 – configurando seu backend back4app crie um projeto back4app faça login na sua conta back4app https //dashboard back4app com/ e crie um novo projeto crie classes parse no seu projeto back4app, crie duas novas classes parse chamadas task e project a classe task deve ter os campos name (string) e completed (boolean) a classe project deve ter os campos title (string) e description (string) adicione dados de exemplo preencha essas classes com dados de exemplo que iremos buscar simultaneamente usando future wait no nosso aplicativo flutter obtenha suas credenciais back4app navegue até as configurações do seu projeto para recuperar seu id de aplicação e chave do cliente, que você precisará para conectar seu aplicativo flutter ao back4app passo 2 – configurando seu projeto flutter crie um novo projeto flutter abra seu terminal ou prompt de comando e execute adicione dependências abra pubspec yaml e adicione as seguintes dependências inicialize o parse no seu app em lib/main dart , importe o sdk do parse e inicialize o na função main 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()); substitua 'your back4app app id' e 'your back4app client key' pelas suas credenciais reais do back4app passo 3 – buscando dados concorrentemente com future wait crie o widget taskprojectscreen em lib/main dart , adicione um novo widget que buscará dados tanto da classe task quanto da classe project concorrentemente class taskprojectscreen extends statefulwidget { @override taskprojectscreenstate createstate() => taskprojectscreenstate(); } class taskprojectscreenstate extends state\<taskprojectscreen> { list\<parseobject>? tasks; list\<parseobject>? projects; string? errormessage; @override void initstate() { super initstate(); fetchdata(); } future\<void> fetchdata() async { try { // fetch tasks and projects concurrently final futures = \[ gettasks(), getprojects(), ]; final results = await future wait(futures); setstate(() { tasks = results\[0] as list\<parseobject>; projects = results\[1] as list\<parseobject>; }); } catch (e) { setstate(() { errormessage = e tostring(); }); } } future\<list\<parseobject>> gettasks() async { final query = querybuilder\<parseobject>(parseobject('task')); final response = await query query(); if (response success && response results != null) { return response results as list\<parseobject>; } else { throw exception('failed to load tasks'); } } future\<list\<parseobject>> getprojects() async { final query = querybuilder\<parseobject>(parseobject('project')); final response = await query query(); if (response success && response results != null) { return response results as list\<parseobject>; } else { throw exception('failed to load projects'); } } @override widget build(buildcontext context) { if (errormessage != null) { return center(child text('error $errormessage')); } if (tasks == null || projects == null) { return center(child circularprogressindicator()); } return listview( children \[ listtile(title text('tasks')), tasks! map((task) => listtile( title text(task get\<string>('name') ?? 'no name'), subtitle text('completed ${task get\<bool>('completed') ? 'yes' 'no'}'), )), listtile(title text('projects')), projects! map((project) => listtile( title text(project get\<string>('title') ?? 'no title'), subtitle text(project get\<string>('description') ?? 'no description'), )), ], ); } } este widget busca tarefas e projetos concorrentemente usando future wait , reduzindo o tempo total de espera ao lidar com ambas as requisições simultaneamente passo 4 – testando e executando seu app execute seu app usando flutter run você deve ver uma lista de tarefas e projetos exibidos na tela ambos os conjuntos de dados são buscados simultaneamente, tornando o processo de recuperação de dados mais rápido e eficiente conclusão neste tutorial, você aprendeu como usar future wait para otimizar operações assíncronas em seu app flutter ao buscar dados de várias fontes simultaneamente e integrar com o back4app, você tornou seu app mais responsivo e reduziu o tempo de espera geral para seus usuários usar future wait em combinação com um backend robusto como o back4app permite que você gerencie eficientemente várias tarefas assíncronas e melhore o desempenho de suas aplicações flutter para mais detalhes sobre como usar o back4app com flutter, confira a documentação do back4app flutter https //www back4app com/docs/flutter/overview boa codificação!