Integre Parse Cloud Functions no Flutter via Back4App
18 min
usando funções em nuvem em um app flutter introdução para aplicativos complexos, às vezes você só precisa de um pouco de lógica que não está rodando em um dispositivo móvel o cloud code torna isso possível o cloud code é fácil de usar porque é construído sobre o mesmo sdk javascript do parse que alimenta milhares de aplicativos a única diferença é que esse código roda no seu servidor parse em vez de rodar no dispositivo móvel do usuário você pode usar o cloud code para descarregar o processamento para os servidores parse, aumentando assim o desempenho percebido do seu aplicativo você pode criar ganchos que são executados sempre que um objeto é salvo ou excluído isso é útil se você quiser validar ou sanitizar seus dados você também pode usar o cloud code para modificar objetos relacionados ou iniciar outros processos, como enviar uma notificação push quando você atualiza seu cloud code, ele se torna disponível para todos os ambientes móveis instantaneamente você não precisa esperar por um novo lançamento do seu aplicativo isso permite que você mude o comportamento do aplicativo rapidamente e adicione novos recursos mais rapidamente esta seção explica como criar e implantar o cloud code, seguido de como chamar uma função em nuvem em projetos flutter através do back4app neste guia, o foco é demonstrar o uso de funções em nuvem através do flutter você pode encontrar informações mais detalhadas em documentação oficial do cloud code do parse https //docs parseplatform org/cloudcode/guide/ pré requisitos para completar este tutorial, você precisará versão do flutter 2 2 x ou posterior https //flutter dev/docs/get started/install android studio https //developer android com/studio ou vs code instalado https //code visualstudio com/ (com plugins https //docs flutter dev/get started/editor dart e flutter) um app criado https //www back4app com/docs/get started/new parse app no back4app nota siga o tutorial de novo app parse https //www back4app com/docs/get started/new parse app para aprender como criar um app parse no back4app um app flutter conectado ao back4app nota siga o instalar o sdk parse no projeto flutter https //www back4app com/docs/flutter/parse sdk/parse flutter sdk para criar um projeto flutter conectado ao back4app um dispositivo (ou dispositivo virtual) executando android ou ios objetivo execute o código de nuvem parse no back4app a partir de um app flutter 1 crie um arquivo de código de nuvem vá para o seu app em site do back4app https //www back4app com/ e clique em configurações do servidor configurações do servidor encontre o código de nuvem código de nuvem e clique em funções e hospedagem na web funções e hospedagem na web ele se parece com isso 3\ faça upload ou crie um novo arquivo (você também pode editar o arquivo main js main js diretamente no navegador) em seguida, clique em implantar implantar como mostrado aqui seu main js main js deve parecer com isso 1 parse cloud define("hello", async (request) => { 2 console log("hello from cloud code!"); 3 return "hello from cloud code!"; 4 }); 5 6 parse cloud define("sumnumbers", async (request) => { 7 return (request params number1 + request params number2); 8 }); 9 10 parse cloud define("createtodo", async (request) => { 11 const title = request params title; 12 const done = request params done; 13 14 const todo = parse object extend('todo'); 15 const todo = new todo(); 16 todo set('title', title); 17 todo set('done', done); 18 19 try { 20 await todo save(); 21 return todo; 22 } catch (error) { 23 console log('todo create error ' + error code + ' ' + error message); 24 } 25 }); 26 27 parse cloud define("getlisttodo", async (request) => { 28 let query = new parse query("todo"); 29 query descending("done"); 30 return await query find(); 31 }); você passa parâmetros para sua função cloud a partir do seu aplicativo flutter e os acessa dentro do request params request params objeto 2 compreendendo a classe parsecloudfunction a parsecloudfunction parsecloudfunction classe define métodos para interagir com as funções de nuvem do parse uma função de nuvem pode ser chamada com parsecloudfunction execute({parameters params}) parsecloudfunction execute({parameters params}) que retorna um objeto de mapa ou parsecloudfunction executeobjectfunction<>({parameters params}) parsecloudfunction executeobjectfunction<>({parameters params}) que retorna um parseobject os parâmetros são opcionais e um objeto de mapa é esperado 3 chamar a função de nuvem do parse agora que você implantou as funções de nuvem, podemos chamar as funções usando flutter exemplo 1 chamar uma função de nuvem e obter o retorno 1 //executes a cloud function with no parameters that returns a map object 2 final parsecloudfunction function = parsecloudfunction('hello'); 3 final parseresponse parseresponse = await function execute(); 4 if (parseresponse success && parseresponse result != null) { 5 print(parseresponse result); 6 } o resultado exibido no console será 1 exemplo 2 chamar uma função em nuvem com parâmetros e obter o retorno 1 //executes a cloud function with parameters that returns a map object 2 final parsecloudfunction function = parsecloudfunction('sumnumbers'); 3 final map\<string, dynamic> params = \<string, dynamic>{ 4 'number1' 10, 5 'number2' 20 6 }; 7 final parseresponse parseresponse = 8 await function execute(parameters params); 9 if (parseresponse success) { 10 print(parseresponse result); 11 } o resultado exibido no console será flutter olá do cloud code ! exemplo 2 1 chamar uma função em nuvem com parâmetros e obter o retorno 1 //executes a cloud function with parameters that returns a map object 2 final parsecloudfunction function = parsecloudfunction('sumnumbers'); 3 final map\<string, dynamic> params = \<string, dynamic>{ 4 'number1' 10, 5 'number2' 20 6 }; 7 final parseresponse parseresponse = 8 await function execute(parameters params); 9 if (parseresponse success) { 10 print(parseresponse result); 11 } flutter 30 exemplo 3 chamar uma função em nuvem com parâmetros e obter parseobject como retorno 1 //executes a cloud function that returns a parseobject type 2 final parsecloudfunction function = parsecloudfunction('createtodo'); 3 final map\<string, dynamic> params = \<string, dynamic>{ 4 'title' 'task 1', 5 'done' false 6 }; 7 final parseresponse parseresponse = 8 await function executeobjectfunction\<parseobject>(parameters params); 9 if (parseresponse success && parseresponse result != null) { 10 if (parseresponse result\['result'] is parseobject) { 11 //transforms the return into a parseobject 12 final parseobject parseobject = parseresponse result\['result']; 13 print(parseobject objectid); 14 } 15 } o resultado exibido no console será flutter {"classname" "todo","objectid" "h0khsir6kt","createdat" "2021 06 25t00 21 10 023z","updatedat" "2021 06 25t00 21 10 023z","title" "tarefa 1","done" \ false } exemplo 4 chamar uma função em nuvem que retorna uma lista de mapas que podem ser convertidos em um parseobject 1 //executes a cloud function with parameters that returns a map object 2 final parsecloudfunction function = parsecloudfunction('getlisttodo'); 3 final parseresponse parseresponse = await function execute(); 4 if (parseresponse success) { 5 if (parseresponse result != null) { 6 for (final todo in parseresponse result) { 7 //use fromjson method to convert map in parseobject 8 print(parseobject('todo') fromjson(todo)); 9 } 10 } 11 } o resultado exibido no console será 1 flutter {"classname" "todo","objectid" "cr3g4rcct1","createdat" "2021 06 23t03 20 34 933z","updatedat" "2021 06 23t03 20 34 933z","title" "task 1","done"\ false} 2 flutter {"classname" "todo","objectid" "6barcicpke","createdat" "2021 06 23t03 20 54 294z","updatedat" "2021 06 23t03 20 54 294z","title" "task 1","done"\ false} 3 flutter {"classname" "todo","objectid" "tyza74l89q","createdat" "2021 06 23t03 39 42 049z","updatedat" "2021 06 23t03 39 42 049z","title" "task 1","done"\ false} 4 flutter {"classname" "todo","objectid" "arjm8q7h8d","createdat" "2021 06 24t03 33 27 925z","updatedat" "2021 06 24t03 33 27 925z","title" "task 1","done"\ false} 5 chamar função em nuvem do flutter vamos agora usar nossa chamada de exemplo da função em nuvem no aplicativo flutter, com uma interface simples abra seu projeto flutter, vá para o main dart main dart arquivo, limpe todo o código e substitua o por 1 import 'package\ flutter/cupertino dart'; 2 import 'package\ flutter/material dart'; 3 import 'package\ parse server sdk flutter/parse server sdk dart'; 4 5 void main() async { 6 widgetsflutterbinding ensureinitialized(); 7 8 final keyapplicationid = 'your app id here'; 9 final keyclientkey = 'your client key here'; 10 11 final keyparseserverurl = 'https //parseapi back4app com'; 12 13 await parse() initialize(keyapplicationid, keyparseserverurl, 14 clientkey keyclientkey, debug true); 15 16 runapp(materialapp( 17 title 'flutter geopoint', 18 debugshowcheckedmodebanner false, 19 home homepage(), 20 )); 21 } 22 23 class homepage extends statefulwidget { 24 @override 25 homepagestate createstate() => homepagestate(); 26 } 27 28 class homepagestate extends state\<homepage> { 29 30 void docallcloudcodehello() async { 31 //executes a cloud function with no parameters that returns a map object 32 final parsecloudfunction function = parsecloudfunction('hello'); 33 final parseresponse parseresponse = await function execute(); 34 if (parseresponse success && parseresponse result != null) { 35 print(parseresponse result); 36 } 37 } 38 39 void docallcloudcodesumnumbers() async { 40 //executes a cloud function with parameters that returns a map object 41 final parsecloudfunction function = parsecloudfunction('sumnumbers'); 42 final map\<string, dynamic> params = \<string, dynamic>{ 43 'number1' 10, 44 'number2' 20 45 }; 46 final parseresponse parseresponse = 47 await function execute(parameters params); 48 if (parseresponse success) { 49 print(parseresponse result); 50 } 51 } 52 53 void docallcloudcodecreatetodo() async { 54 //executes a cloud function that returns a parseobject type 55 final parsecloudfunction function = parsecloudfunction('createtodo'); 56 final map\<string, dynamic> params = \<string, dynamic>{ 57 'title' 'task 1', 58 'done' false 59 }; 60 final parseresponse parseresponse = 61 await function executeobjectfunction\<parseobject>(parameters params); 62 if (parseresponse success && parseresponse result != null) { 63 if (parseresponse result\['result'] is parseobject) { 64 //transforms the return into a parseobject 65 final parseobject parseobject = parseresponse result\['result']; 66 print(parseobject tostring()); 67 } 68 } 69 } 70 71 void docallcloudcodegetlisttodo() async { 72 //executes a cloud function with parameters that returns a map object 73 final parsecloudfunction function = parsecloudfunction('getlisttodo'); 74 final parseresponse parseresponse = await function execute(); 75 if (parseresponse success) { 76 if (parseresponse result != null) { 77 for (final todo in parseresponse result) { 78 //use fromjson method to convert map in parseobject 79 print(parseobject('todo') fromjson(todo)); 80 } 81 } 82 } 83 } 84 85 @override 86 widget build(buildcontext context) { 87 return scaffold( 88 body padding( 89 padding const edgeinsets all(16 0), 90 child column( 91 crossaxisalignment crossaxisalignment stretch, 92 children \[ 93 container( 94 height 200, 95 child image network( 96 'https //blog back4app com/wp content/uploads/2017/11/logo b4a 1 768x175 1 png'), 97 ), 98 center( 99 child const text('flutter on back4app call clode code', 100 style textstyle(fontsize 18, fontweight fontweight bold)), 101 ), 102 sizedbox( 103 height 8, 104 ), 105 container( 106 height 50, 107 child elevatedbutton( 108 onpressed docallcloudcodehello, 109 child text('cloud code hello'), 110 style elevatedbutton stylefrom(primary colors blue)), 111 ), 112 sizedbox( 113 height 8, 114 ), 115 container( 116 height 50, 117 child elevatedbutton( 118 onpressed docallcloudcodesumnumbers, 119 child text('cloud code sumnumber'), 120 style elevatedbutton stylefrom(primary colors blue)), 121 ), 122 sizedbox( 123 height 8, 124 ), 125 container( 126 height 50, 127 child elevatedbutton( 128 onpressed docallcloudcodecreatetodo, 129 child text('cloud code createtodo'), 130 style elevatedbutton stylefrom(primary colors blue)), 131 ), 132 sizedbox( 133 height 8, 134 ), 135 container( 136 height 50, 137 child elevatedbutton( 138 onpressed docallcloudcodegetlisttodo, 139 child text('cloud code getlisttodo'), 140 style elevatedbutton stylefrom(primary colors blue)), 141 ), 142 ], 143 ), 144 )); 145 } 146 } encontre suas credenciais de application id e client key navegando até o painel do seu aplicativo em site do back4app https //www back4app com/ atualize seu código em main dart main dart com os valores de applicationid e clientkey do seu projeto no back4app keyapplicationid = app id app id keyclientkey = client key client key execute o projeto, e o aplicativo será carregado como mostrado na imagem conclusão neste estágio, você é capaz de codificar e chamar seu próprio cloud code em seu aplicativo flutter usando os recursos principais do parse server através do back4app!