Flutter
Parse SDK (REST)
CRUD em Flutter com Parse Server no Back4App: Guia Técnico
10 min
este guia demonstra como gerenciar objetos parse no back4app usando o plugin flutter para parse server você aprenderá as operações básicas de crud criar, ler, atualizar e deletar este tutorial usa um aplicativo simples de todo para ilustrar essas operações o armazenamento de dados do back4app gira em torno do parseobject , que contém pares de chave valor de dados compatíveis com json o armazenamento de dados do back4app acomoda uma ampla gama de tipos de dados comuns, incluindo strings, números, booleanos, datetime, geopoints, pointers, relações, bem como listas e objetos essencialmente, ele suporta qualquer dado que possa ser codificado em formato json, fornecendo uma solução flexível e robusta para várias necessidades de armazenamento de dados pré requisitos para completar este tutorial, você precisará flutter versão 3 x x ou posterior android studio https //developer android com/studio ou vs code instalado (com plugins dart e flutter) um aplicativo criado no back4app nota siga o tutorial de novo aplicativo parse para aprender como criar um aplicativo parse no back4app um aplicativo flutter conectado ao back4app nota siga o instalar o sdk parse no projeto flutter para criar um projeto flutter conectado ao back4app um dispositivo (ou dispositivo virtual) executando android ou ios 1\ criar objeto o savetodo função cria uma nova tarefa com um título e um done status definido como falso veja como funciona inicializar o objeto parse definindo seus atributos crie uma instância de parseobject para sua classe (por exemplo, 'todo') use o set método para definir os pares chave valor salvar o objeto chame o save método para armazenar o objeto no banco de dados future\<void> savetodo(string title) async { final todo = parseobject('todo') set('title', title) set('done', false); await todo save(); } 2\ ler objeto a gettodo função consulta o banco de dados e retorna uma lista de tarefas veja como funciona inicializar a consulta crie uma instância de querybuilder para sua classe executar a consulta use o query método para recuperar dados tratar a resposta verifique se a consulta foi bem sucedida e processe os resultados future\<list\<parseobject>> gettodo() async { querybuilder\<parseobject> querytodo = querybuilder\<parseobject>(parseobject('todo')); final parseresponse apiresponse = await querytodo query(); if (apiresponse success && apiresponse results != null) { return apiresponse results as list\<parseobject>; } else { return \[]; } } atualize a listview\ builder função para extrair e exibir os valores do objeto parse // get parse object values final vartodo = snapshot data!\[index]; final vartitle = vartodo get\<string>('title')!; final vardone = vartodo get\<bool>('done')!; 3\ atualizar objeto a updatetodo função atualiza o status de uma tarefa existente veja como funciona inicialize o objeto parse e defina atributos crie uma instância de parseobject e defina seu objectid use o set método para atualizar pares chave valor salve o objeto chame o save método para atualizar o objeto no banco de dados future\<void> updatetodo(string id, bool done) async { var todo = parseobject('todo') objectid = id set('done', done); await todo save(); } 4\ excluir objeto a deletetodo função remove uma tarefa existente do banco de dados veja como funciona inicialize o objeto parse crie uma instância de parseobject e defina seu objectid excluir o objeto chame o delete método para remover o objeto do banco de dados future\<void> deletetodo(string id) async { var todo = parseobject('todo') objectid = id; await todo delete(); } código de exemplo completo aqui está o código completo para um aplicativo simples de todo integrado com o back4app backend import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your app id here'; const keyclientkey = 'your client key here'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(const materialapp(home todoapp())); } class todoapp extends statefulwidget { const todoapp({super key}); @override // ignore library private types in public api todoappstate createstate() => todoappstate(); } class todoappstate extends state\<todoapp> { list\<parseobject> tasks = \[]; texteditingcontroller taskcontroller = texteditingcontroller(); @override void initstate() { super initstate(); gettodo(); } @override widget build(buildcontext context) { return materialapp( debugshowcheckedmodebanner false, theme themedata( primarycolor colors white, hintcolor colors black, scaffoldbackgroundcolor colors white, appbartheme appbartheme(backgroundcolor color fromargb(255, 68, 122, 246))), home scaffold( appbar appbar( title const text('todo list'), ), body container( decoration boxdecoration( border border all(color colors black), ), child column( children \[ const sizedbox(height 20), buildtaskinput(), const sizedbox(height 20), expanded(child buildtasklist()), ], ), ), ), ); } widget buildtaskinput() { return padding( padding const edgeinsets symmetric(horizontal 20), child row( children \[ expanded( child textfield( controller taskcontroller, decoration inputdecoration( hinttext 'enter tasks', filled true, fillcolor colors grey\[200], border outlineinputborder( borderradius borderradius circular(8), borderside borderside none, ), ), ), ), const sizedbox(width 10), elevatedbutton( onpressed addtodo, style buttonstyle( foregroundcolor materialstateproperty all\<color>(colors black)), child const text('add'), ), ], ), ); } widget buildtasklist() { return listview\ builder( itemcount tasks length, itembuilder (context, index) { final vartodo = tasks\[index]; final vartitle = vartodo get\<string>('title') ?? ''; bool done = vartodo get\<bool>('done') ?? false; return listtile( title row( children \[ checkbox( value done, onchanged (newvalue) { updatetodo(index, newvalue!); }, ), expanded(child text(vartitle)), ], ), trailing iconbutton( icon const icon(icons delete), onpressed () { deletetodo(index, vartodo objectid!); }, ), ); }, ); } future\<void> addtodo() async { string task = taskcontroller text trim(); if (task isnotempty) { var todo = parseobject('todo') set('title', task) set('done', false); var response = await todo save(); if (response success) { setstate(() { tasks add(todo); }); taskcontroller clear(); } else { // handle error } } } future\<void> updatetodo(int index, bool done) async { final vartodo = tasks\[index]; final string id = vartodo objectid tostring(); var todo = parseobject('todo') objectid = id set('done', done); var response = await todo save(); if (response success) { setstate(() { tasks\[index] = todo; }); } else { // handle error } } future\<void> gettodo() async { var querybuilder = querybuilder\<parseobject>(parseobject('todo')); var apiresponse = await querybuilder query(); if (apiresponse success && apiresponse results != null) { setstate(() { tasks = apiresponse results as list\<parseobject>; }); } else { // handle error } } future\<void> deletetodo(int index, string id) async { var todo = parseobject('todo') objectid = id; var response = await todo delete(); if (response success) { setstate(() { tasks removeat(index); }); } else { // handle error } } } seu aplicativo deve parecer assim conclusão agora você implementou as operações básicas de crud em um aplicativo flutter usando parse no back4app este tutorial demonstrou como adicionar, recuperar, atualizar e excluir tarefas em um aplicativo todo