Flutter
Parse SDK (REST)
Основы CRUD в приложениях Flutter с Parse на Back4App
10 мин
этот гид демонстрирует, как управлять объектами parse на back4app с использованием плагина flutter для parse server вы узнаете основные операции crud создание, чтение, обновление и удаление этот учебник использует простое приложение todo для иллюстрации этих операций хранение данных на back4app основано на parseobject , который содержит пары ключ значение совместимых с json данных хранение данных back4app поддерживает широкий спектр общих типов данных, включая строки, числа, логические значения, datetime, geopoints, pointers, relations, а также списки и объекты по сути, оно поддерживает любые данные, которые могут быть закодированы в формате json, предоставляя гибкое и надежное решение для различных потребностей в хранении данных предварительные требования чтобы завершить этот учебник, вам потребуется версия flutter 3 x x или новее android studio https //developer android com/studio или установленный vs code (с плагинами dart и flutter) приложение созданное на back4app примечание следуйте учебнику по созданию нового parse app чтобы узнать, как создать parse app на back4app flutter приложение, подключенное к back4app примечание следуйте установите parse sdk в проект flutter чтобы создать проект flutter, подключенный к back4app устройство (или виртуальное устройство), работающее на android или ios 1\ создать объект функция savetodo создает новую задачу с заголовком и статусом done установленным на false вот как это работает инициализируйте объект parse, установив его атрибуты создайте экземпляр parseobject для вашего класса (например, 'todo') используйте метод set для определения пар ключ значение сохраните объект вызовите метод save для сохранения объекта в базе данных future\<void> savetodo(string title) async { final todo = parseobject('todo') set('title', title) set('done', false); await todo save(); } 2\ прочитать объект функция gettodo запрашивает базу данных и возвращает список задач вот как это работает инициализировать запрос создайте экземпляр querybuilder для вашего класса выполнить запрос используйте метод query для получения данных обработать ответ проверьте, был ли запрос успешным, и обработайте результаты 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 \[]; } } обновите функцию listview\ builder , чтобы извлечь и отобразить значения объектов parse // get parse object values final vartodo = snapshot data!\[index]; final vartitle = vartodo get\<string>('title')!; final vardone = vartodo get\<bool>('done')!; 3\ обновить объект обновление updatetodo функции обновляет статус существующей задачи вот как это работает инициализируйте объект parse и установите атрибуты создайте экземпляр parseobject и установите его objectid используйте метод set для обновления пар ключ значение сохраните объект вызовите метод save для обновления объекта в базе данных future\<void> updatetodo(string id, bool done) async { var todo = parseobject('todo') objectid = id set('done', done); await todo save(); } 4\ удалить объект функция deletetodo удаляет существующую задачу из базы данных вот как это работает инициализируйте объект parse создайте экземпляр parseobject и установите его objectid удалите объект вызовите метод delete для удаления объекта из базы данных future\<void> deletetodo(string id) async { var todo = parseobject('todo') objectid = id; await todo delete(); } полный пример кода вот полный код для простого приложения todo, интегрированного с 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 } } } ваше приложение должно выглядеть так заключение теперь вы реализовали основные операции crud в приложении flutter, используя parse на back4app этот учебник продемонстрировал, как добавлять, извлекать, обновлять и удалять задачи в приложении todo