More
Como usar Manipulação de Dados no Flutter Usando List.generate com Back4app
10 min
introdução no flutter, a maneira mais simples de criar listas dinâmicas é usando list generate isso ajuda, especialmente ao lidar com dados obtidos através de um serviço de back end como o back4app seja para elementos de ui dinâmicos, lidando com várias entradas de dados, ou otimização de requisições de rede, list generate pelo menos facilitará seu código e aumentará o desempenho neste tutorial, vamos ver como lidar de forma eficiente com os dados do backend usando list generate no flutter neste exemplo, você verá como criar um aplicativo flutter simples com o back4app para buscar e exibir avaliações de usuários dinamicamente, classificando as no processo você aprenderá sobre o processamento de dados do backend, otimização de requisições de rede e operações em lote com list generate pré requisitos para completar este tutorial, você precisará uma conta back4app inscreva se para uma conta gratuita em back4app com https //www back4app com um ambiente de desenvolvimento flutter configurado em 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 dart, widgets flutter e programação assíncrona passo 1 – configurando seu backend back4app crie um projeto back4app faça login em sua conta back4app https //dashboard back4app com/ e crie um novo projeto crie uma classe parse em seu projeto back4app, crie uma nova classe parse chamada review esta classe armazenará avaliações de usuários para diferentes itens (por exemplo, produtos, filmes, etc ) adicione os seguintes campos nome de usuário (string) o nome do usuário que enviou a avaliação avaliação (número) a avaliação dada pelo usuário, tipicamente um valor entre 1 e 5 comentário (string) o texto ou comentário da avaliação adicionar dados de exemplo preencha a review classe com dados de exemplo para usar em seu 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 criar um novo projeto flutter abra seu terminal ou prompt de comando e execute adicionar dependências abra pubspec yaml e adicione as seguintes dependências inicializar o parse em seu app em lib/main dart , importe o sdk do parse e inicialize o na função main 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 reviewscreen(), ); } } substitua 'your back4app app id' e 'your back4app client key' pelas suas credenciais reais do back4app passo 3 – buscando e exibindo dados usando list generate crie o widget reviewscreen em lib/main dart , adicione um novo widget que buscará avaliações do back4app e as exibirá usando list generate class reviewscreen extends statefulwidget { @override reviewscreenstate createstate() => reviewscreenstate(); } class reviewscreenstate extends state\<reviewscreen> { list\<parseobject>? reviews; @override void initstate() { super initstate(); fetchreviews(); } future\<void> fetchreviews() async { final query = querybuilder\<parseobject>(parseobject('review')); final response = await query query(); if (response success && response results != null) { setstate(() { reviews = response results as list\<parseobject>; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('user reviews')), body reviews == null ? center(child circularprogressindicator()) listview\ builder( itemcount reviews! length, itembuilder (context, index) { final review = reviews!\[index]; return reviewtile( username review\ get\<string>('username') ?? 'anonymous', rating review\ get\<int>('rating') ?? 0, comment review\ get\<string>('comment') ?? '', ); }, ), ); } } class reviewtile extends statelesswidget { final string username; final int rating; final string comment; reviewtile({required this username, required this rating, required this comment}); @override widget build(buildcontext context) { return card( margin edgeinsets symmetric(vertical 10, horizontal 15), child padding( padding const edgeinsets all(15 0), child column( crossaxisalignment crossaxisalignment start, children \[ text( username, style textstyle(fontweight fontweight bold), ), sizedbox(height 5), row( children list generate(5, (index) { return icon( index < rating ? icons star icons star border, color colors amber, ); }), ), sizedbox(height 10), text(comment), ], ), ), ); } } neste exemplo, reviewtile é um widget personalizado que exibe a avaliação de um usuário a classificação em estrelas é gerada dinamicamente usando list generate , criando uma linha de ícones de estrelas com base no valor de rating recuperado do backend passo 4 – otimizando a busca de dados com list generate e future wait em casos onde você precisa buscar dados de múltiplos endpoints de backend simultaneamente, você pode usar list generate em combinação com future wait para otimizar o processo buscando múltiplos registros relacionados imagine que você tem outra classe chamada product e você quer buscar avaliações relacionadas para múltiplos produtos de uma vez você pode usar list generate para iniciar essas requisições de forma concorrente future\<void> fetchmultipleproductsreviews(list\<string> productids) async { list\<future\<list\<parseobject>>> requests = list generate(productids length, (index) { final query = querybuilder\<parseobject>(parseobject('review')) whereequalto('productid', productids\[index]); return query query() then((response) => response results as list\<parseobject>); }); list\<list\<parseobject>> allreviews = await future wait(requests); setstate(() { allproductreviews = allreviews; }); } essa abordagem reduz o tempo de espera geral ao buscar dados para todos os produtos simultaneamente passo 5 – realizando operações em lote usando list generate se você precisa realizar atualizações ou exclusões em lote em múltiplos registros buscados do backend, list generate pode simplificar o processo exemplo de atualização em lote aqui está como você pode atualizar o status de múltiplos registros de uma só vez future\<void> updatemultiplereviews(list\<string> reviewids, string newstatus) async { list\<future\<parseobject>> updaterequests = list generate(reviewids length, (index) { parseobject review = parseobject('review') objectid = reviewids\[index]; review\ set('status', newstatus); return review\ save(); }); await future wait(updaterequests); print('all reviews updated'); } usar list generate aqui permite que você execute operações de forma eficiente em um grande número de registros em uma única operação passo 6 – testando e executando seu app execute seu app usando flutter run você deve ver uma lista de avaliações de usuários, com cada avaliação mostrando uma classificação de estrelas gerada dinamicamente usando list generate se você implementou as operações em lote e o exemplo de múltipla recuperação, teste esses cenários também para garantir que tudo funcione corretamente conclusão neste tutorial, você aprendeu como usar list generate no flutter para lidar e exibir dados recuperados de um backend, como o back4app ao usar list generate , você pode criar elementos de ui dinâmicos, otimizar a recuperação de dados e realizar operações em lote de maneira limpa e manutenível essa abordagem não apenas melhora o desempenho do seu app, mas também mantém seu código organizado e fácil de gerenciar para mais informações sobre como usar o back4app com flutter, confira a documentação do back4app flutter https //www back4app com/docs/flutter/overview boa codificação!