[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"navigation":3,"url-settings":86,"blog-\u002Fblog\u002Fflutter-getx-restapi-tutorial":663,"blog-author-\u002Fblog\u002Fflutter-getx-restapi-tutorial":952,"i-material-symbols:arrow-back-rounded":967},{"id":4,"extension":5,"footer":6,"header":73,"meta":83,"stem":84,"__hash__":85},"navigation\u002Fdata\u002Fshared\u002Fnavigation.yml","yml",{"brand":7,"columns":13,"legal":63},{"name":8,"tagline":9,"downloadCta":10},"Pieces","The memory layer for modern work.",{"label":11,"href":12},"All downloads","\u002Fdownloads",[14,26,39,51],{"title":15,"links":16},"Product",[17,20,23],{"label":18,"href":19},"Pieces Desktop","\u002F",{"label":21,"href":22},"Pieces Enterprise","\u002Fenterprise",{"label":24,"href":25},"Pieces MCP","\u002Fmcp",{"title":27,"links":28},"Resources",[29,33,36],{"label":30,"href":31,"external":32},"Documentation","url:docs.home",true,{"label":34,"href":35},"Blog","\u002Fblog",{"label":37,"href":38,"external":32},"GitHub","url:github.org",{"title":40,"links":41},"Community",[42,45,48],{"label":43,"href":44,"external":32},"Discord","url:social.discord",{"label":46,"href":47,"external":32},"X \u002F Twitter","url:social.x",{"label":49,"href":50,"external":32},"LinkedIn","url:social.linkedin",{"title":52,"links":53},"Company",[54,57,60],{"label":55,"href":56},"About","\u002Fabout",{"label":58,"href":59},"Updates","\u002Fupdates",{"label":61,"href":62},"Contact","\u002Fcontact",[64,67,70],{"label":65,"href":66},"Privacy Policy","\u002Flegal\u002Fprivacy",{"label":68,"href":69},"Refund Policy","\u002Flegal\u002Frefund",{"label":71,"href":72},"Terms of Service","\u002Flegal\u002Fterms",{"links":74,"signIn":75,"contact":78,"cta":80},[],{"label":76,"href":77},"Sign in","url:portal.home",{"label":79,"href":62},"Get in touch",{"label":81,"href":82},"Download","url:routes.downloads",{},"data\u002Fshared\u002Fnavigation","VdirGIa8cUm6xLprbBeTKcw914JfyJjWfF-9hSVOX5Y",{"id":87,"extension":5,"links":88,"meta":660,"stem":661,"__hash__":662},"urlSettings\u002Fdata\u002Fshared\u002Furls.yml",[89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,295,299,303,306,310,314,318,322,326,330,334,338,342,346,350,354,358,362,366,370,374,378,382,386,390,394,398,402,406,410,414,418,422,426,430,434,438,442,446,450,453,457,461,465,469,473,477,480,483,486,489,493,497,500,504,508,512,516,520,524,528,532,536,540,544,548,551,555,559,563,567,571,574,577,580,584,587,591,595,599,603,606,610,614,617,620,623,627,631,635,638,641,644,648,652,656],{"key":90,"label":91,"href":92},"downloads.desktop","Desktop download page","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fdownload",{"key":94,"label":95,"href":96},"downloads.macOS.dmgArm64","macOS DMG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fdmg-arm64\u002Fdownload",{"key":98,"label":99,"href":100},"downloads.macOS.dmgIntel","macOS DMG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fdmg\u002Fdownload",{"key":102,"label":103,"href":104},"downloads.macOS.pkg","macOS PKG","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg\u002Fdownload",{"key":106,"label":107,"href":108},"downloads.macOS.universal","Desktop macOS Universal","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fmacos-universal\u002Fdownload",{"key":110,"label":111,"href":112},"downloads.macOS.pkgArm64","Desktop macOS PKG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pfd-arm64\u002Fdownload",{"key":114,"label":115,"href":116},"downloads.macOS.pkgIntel","Desktop macOS PKG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pfd\u002Fdownload",{"key":118,"label":119,"href":120},"downloads.windows.appinstaller","Windows App Installer","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fappinstaller\u002Fpieces_for_x.appinstaller",{"key":122,"label":123,"href":124},"downloads.windows.exe","Windows EXE","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fwindows-exe\u002Fdownload",{"key":126,"label":127,"href":128},"downloads.windows.msix","Windows MSIX","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fwindows-msix\u002Fdownload",{"key":130,"label":131,"href":132},"downloads.windows.suiteManager","Windows Suite Manager","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_suite_windows\u002Fappinstaller\u002Fdownload",{"key":134,"label":135,"href":136},"downloads.linux.flatpakRepo","Linux Flatpak repository","https:\u002F\u002Fbuilds.pieces.app\u002Fpieces-flatpak-repo\u002Fpieces-flatpak.flatpakrepo",{"key":138,"label":139,"href":140},"downloads.linux.snapDesktop","Linux Snap Desktop","https:\u002F\u002Fsnapcraft.io\u002Fpieces-for-developers",{"key":142,"label":143,"href":144},"downloads.linux.snapPiecesOS","Linux Snap PiecesOS","https:\u002F\u002Fsnapcraft.io\u002Fpieces-os",{"key":146,"label":147,"href":148},"downloads.linux.snap","Desktop Linux Snap package","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fpieces_for_x\u002Fsnap\u002Fdownload",{"key":150,"label":151,"href":152},"downloads.piecesOS.macOS.dmgArm64","PiecesOS macOS DMG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fdmg-arm64\u002Fdownload",{"key":154,"label":155,"href":156},"downloads.piecesOS.macOS.dmgIntel","PiecesOS macOS DMG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fdmg\u002Fdownload",{"key":158,"label":159,"href":160},"downloads.piecesOS.macOS.universal","PiecesOS macOS Universal","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fmacos-universal\u002Fdownload",{"key":162,"label":163,"href":164},"downloads.piecesOS.macOS.pkgArm64","PiecesOS macOS PKG Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pos-launch-only-arm64\u002Fdownload",{"key":166,"label":167,"href":168},"downloads.piecesOS.macOS.pkgIntel","PiecesOS macOS PKG Intel","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-pos-launch-only\u002Fdownload",{"key":170,"label":171,"href":172},"downloads.piecesOS.windows.appinstaller","PiecesOS Windows App Installer","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fappinstaller\u002Fos_server.appinstaller",{"key":174,"label":175,"href":176},"downloads.piecesOS.windows.exe","PiecesOS Windows EXE","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fwindows-exe\u002Fdownload",{"key":178,"label":179,"href":180},"downloads.piecesOS.windows.msix","PiecesOS Windows MSIX","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fwindows-msix\u002Fdownload",{"key":182,"label":183,"href":184},"downloads.piecesOS.linux.snap","PiecesOS Linux Snap package","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fos_server\u002Fsnap\u002Fdownload",{"key":186,"label":187,"href":188},"downloads.combined.macOS.appleSilicon","Combined macOS installer Apple Silicon","https:\u002F\u002Fbuilds.pieces.app\u002Fstages\u002Fproduction\u002Fmacos_packaging\u002Fpkg-arm64\u002Fdownload",{"key":190,"label":191,"href":104},"downloads.combined.macOS.intel","Combined macOS installer Intel",{"key":193,"label":194,"href":195},"downloads.guides.macOS","macOS installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Fmacos-installation-guide",{"key":197,"label":198,"href":199},"downloads.guides.windows","Windows installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Fwindows-installation-guide",{"key":201,"label":202,"href":203},"downloads.guides.linux","Linux installation guide","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Flinux-installation-guide",{"key":205,"label":206,"href":207},"downloads.guides.piecesOS","PiecesOS manual installation","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os\u002Fmanual-installation",{"key":209,"label":210,"href":211},"extensions.chrome","Chrome extension","https:\u002F\u002Fchrome.google.com\u002Fwebstore\u002Fdetail\u002Fpieces-save-code-snippets\u002Figbgibhbfonhmjlechmeefimncpekepm",{"key":213,"label":214,"href":215},"extensions.firefox","Firefox add-on","https:\u002F\u002Faddons.mozilla.org\u002Fen-US\u002Ffirefox\u002Faddon\u002Fpieces-save-code-from-the-web\u002F",{"key":217,"label":218,"href":219},"extensions.edge","Edge add-on","https:\u002F\u002Fmicrosoftedge.microsoft.com\u002Faddons\u002Fdetail\u002Fpieces-save-code-snippet\u002Fhglfimcdgonaeeobjckfdabcldfidmim",{"key":221,"label":222,"href":223},"extensions.vscode","VS Code extension","https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=MeshIntelligentTechnologiesInc.pieces-vscode",{"key":225,"label":226,"href":227},"extensions.visualStudio","Visual Studio extension","https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=MeshIntelligentTechnologiesInc.PiecesVisualStudio",{"key":229,"label":230,"href":231},"extensions.jetbrains","JetBrains plugin","https:\u002F\u002Fplugins.jetbrains.com\u002Fplugin\u002F17328-pieces--save-search-share--reuse-code-snippets",{"key":233,"label":234,"href":235},"extensions.obsidian","Obsidian plugin","https:\u002F\u002Fobsidian.md\u002Fplugins?id=pieces-for-developers",{"key":237,"label":238,"href":239},"extensions.sublime","Sublime package","https:\u002F\u002Fpackagecontrol.io\u002Fpackages\u002FPieces",{"key":241,"label":242,"href":243},"extensions.neovim","Neovim plugin","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fplugin_neo_vim",{"key":245,"label":246,"href":247},"extensions.jupyterlab","JupyterLab plugin","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fjupyterlab-pieces",{"key":249,"label":250,"href":251},"extensions.cli","Pieces CLI","https:\u002F\u002Fpypi.org\u002Fproject\u002Fpieces-cli\u002F",{"key":253,"label":254,"href":255},"docs.home","Documentation home","https:\u002F\u002Fdocs.pieces.app",{"key":257,"label":258,"href":259},"docs.getStarted","Get started docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces",{"key":261,"label":262,"href":263},"docs.api","API docs","https:\u002F\u002Fdocs.pieces.app\u002Fapi",{"key":265,"label":266,"href":267},"docs.desktop.overview","Desktop overview","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop",{"key":269,"label":270,"href":271},"docs.desktop.onboarding","Desktop onboarding","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fonboarding",{"key":273,"label":274,"href":275},"docs.desktop.timeline","Desktop timeline docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Ftimeline",{"key":277,"label":278,"href":279},"docs.desktop.summaries","Desktop summaries docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fsingle-click-summaries",{"key":281,"label":282,"href":283},"docs.desktop.search","Desktop conversational search docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fconversational-search",{"key":285,"label":286,"href":287},"docs.desktop.drive","Desktop drive docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fdrive",{"key":289,"label":290,"href":291},"docs.desktop.account","Desktop account settings docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fdesktop\u002Fconfiguration\u002Faccount",{"key":293,"label":294,"href":92},"docs.desktop.download","Desktop download docs",{"key":296,"label":297,"href":298},"docs.piecesOS.overview","PiecesOS overview docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies",{"key":300,"label":301,"href":302},"docs.piecesOS.details","PiecesOS details docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os",{"key":304,"label":305,"href":207},"docs.piecesOS.install","PiecesOS install docs",{"key":307,"label":308,"href":309},"docs.piecesOS.quickMenu","PiecesOS quick menu docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os\u002Fquick-menu",{"key":311,"label":312,"href":313},"docs.piecesOS.storage","On-device storage docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fon-device-storage",{"key":315,"label":316,"href":317},"docs.piecesOS.troubleshooting","PiecesOS troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fcore-dependencies\u002Fpieces-os\u002Ftroubleshooting",{"key":319,"label":320,"href":321},"docs.mcp.overview","MCP overview docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp",{"key":323,"label":324,"href":325},"docs.mcp.cursor","MCP Cursor docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fcursor",{"key":327,"label":328,"href":329},"docs.mcp.vscode","MCP VS Code docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fvs-code",{"key":331,"label":332,"href":333},"docs.mcp.claudeDesktop","MCP Claude Desktop docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fclaude-desktop",{"key":335,"label":336,"href":337},"docs.mcp.claudeCode","MCP Claude Code docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fclaude-code",{"key":339,"label":340,"href":341},"docs.mcp.claudeCowork","MCP Claude Cowork docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fclaude-cowork",{"key":343,"label":344,"href":345},"docs.mcp.githubCopilot","MCP GitHub Copilot docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fgithub-copilot",{"key":347,"label":348,"href":349},"docs.mcp.goose","MCP Goose docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fgoose",{"key":351,"label":352,"href":353},"docs.mcp.windsurf","MCP Windsurf docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fwindsurf",{"key":355,"label":356,"href":357},"docs.mcp.zed","MCP Zed docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fzed",{"key":359,"label":360,"href":361},"docs.mcp.jetbrains","MCP JetBrains docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fjetbrains-ides",{"key":363,"label":364,"href":365},"docs.mcp.continueDev","MCP Continue docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fcontinue-dev",{"key":367,"label":368,"href":369},"docs.mcp.cline","MCP Cline docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fcline",{"key":371,"label":372,"href":373},"docs.mcp.raycast","MCP Raycast docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fraycast",{"key":375,"label":376,"href":377},"docs.mcp.rovoDevCli","MCP Rovo Dev CLI docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Frovo-dev-cli",{"key":379,"label":380,"href":381},"docs.mcp.openaiCodexCli","MCP OpenAI Codex CLI docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fopenai-codex-cli",{"key":383,"label":384,"href":385},"docs.mcp.googleGeminiCli","MCP Google Gemini CLI docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fgoogle-gemini-cli",{"key":387,"label":388,"href":389},"docs.mcp.amazonQ","MCP Amazon Q docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Famazon-q-developer",{"key":391,"label":392,"href":393},"docs.mcp.chatgptDev","MCP ChatGPT Developer Mode docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fchatgpt-developer-mode",{"key":395,"label":396,"href":397},"docs.mcp.openclaw","MCP OpenClaw docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fopenclaw",{"key":399,"label":400,"href":401},"docs.mcp.mcpRemote","MCP Remote docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fmcp-remote",{"key":403,"label":404,"href":405},"docs.mcp.ngrok","MCP ngrok docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmcp\u002Fngrok-setup",{"key":407,"label":408,"href":409},"docs.troubleshooting.macOS","macOS troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Ftroubleshooting\u002Fmacos",{"key":411,"label":412,"href":413},"docs.troubleshooting.windows","Windows troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Ftroubleshooting\u002Fwindows",{"key":415,"label":416,"href":417},"docs.troubleshooting.linux","Linux troubleshooting docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fmeet-pieces\u002Ftroubleshooting\u002Flinux",{"key":419,"label":420,"href":421},"docs.privacy","Privacy and security docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fprivacy-security-your-data",{"key":423,"label":424,"href":425},"docs.support","Support docs","https:\u002F\u002Fdocs.pieces.app\u002Fproducts\u002Fsupport",{"key":427,"label":428,"href":429},"portal.home","Pieces portal","https:\u002F\u002Fportal.pieces.app",{"key":431,"label":432,"href":433},"site.home","Website home","https:\u002F\u002Fpieces.app",{"key":435,"label":436,"href":437},"site.about","About page","https:\u002F\u002Fpieces.app\u002Fabout",{"key":439,"label":440,"href":441},"site.features","Features page","https:\u002F\u002Fpieces.app\u002Ffeatures",{"key":443,"label":444,"href":445},"site.plugins","Plugins page","https:\u002F\u002Fpieces.app\u002Fplugins",{"key":447,"label":448,"href":449},"site.contact","Contact page","https:\u002F\u002Fpieces.app\u002Fcontact",{"key":451,"label":58,"href":452},"site.updates","https:\u002F\u002Fpieces.app\u002Fupdates",{"key":454,"label":455,"href":456},"site.news","News","https:\u002F\u002Fpieces.app\u002Fnews",{"key":458,"label":459,"href":460},"site.events","Community events","https:\u002F\u002Fpieces.app\u002Fcommunity\u002Fevents",{"key":462,"label":463,"href":464},"site.userStories","User stories","https:\u002F\u002Fpieces.app\u002Fuser-stories",{"key":466,"label":467,"href":468},"site.academy","Academy","https:\u002F\u002Fpieces.app\u002Flearn\u002Facademy",{"key":470,"label":471,"href":472},"site.support","Website support","https:\u002F\u002Fpieces.app\u002Fsupport",{"key":474,"label":475,"href":476},"site.standup","Standup","https:\u002F\u002Fpieces.app\u002Fstandup",{"key":478,"label":34,"href":479},"site.blog","https:\u002F\u002Fcode.pieces.app\u002Fblog",{"key":481,"label":43,"href":482},"social.discord","https:\u002F\u002Fdiscord.gg\u002Fgetpieces",{"key":484,"label":46,"href":485},"social.x","https:\u002F\u002Fx.com\u002Fgetpieces",{"key":487,"label":488,"href":485},"social.twitter","Twitter",{"key":490,"label":491,"href":492},"social.instagram","Instagram","https:\u002F\u002Fwww.instagram.com\u002Fgetpieces\u002F",{"key":494,"label":495,"href":496},"social.tiktok","TikTok","https:\u002F\u002Fwww.tiktok.com\u002F@getpieces",{"key":498,"label":49,"href":499},"social.linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fcompany\u002Fgetpieces\u002F",{"key":501,"label":502,"href":503},"social.youtube","YouTube","https:\u002F\u002Fyoutube.com\u002F@getpieces",{"key":505,"label":506,"href":507},"github.org","GitHub organization","https:\u002F\u002Fgithub.com\u002Fpieces-app",{"key":509,"label":510,"href":511},"github.support","GitHub support","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fsupport",{"key":513,"label":514,"href":515},"github.issues","GitHub issues","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fsupport\u002Fissues",{"key":517,"label":518,"href":519},"github.discussions","GitHub discussions","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fsupport\u002Fdiscussions",{"key":521,"label":522,"href":523},"github.documentation","GitHub documentation","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fdocumentation",{"key":525,"label":526,"href":527},"github.opensource","GitHub open source","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fopensource",{"key":529,"label":530,"href":531},"github.sdks.python","Python SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-python",{"key":533,"label":534,"href":535},"github.sdks.typescript","TypeScript SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-typescript",{"key":537,"label":538,"href":539},"github.sdks.dart","Dart SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-dart",{"key":541,"label":542,"href":543},"github.sdks.kotlin","Kotlin SDK","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fpieces-os-client-sdk-for-kotlin",{"key":545,"label":546,"href":547},"github.plugins.obsidian","Obsidian plugin repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fobsidian-pieces",{"key":549,"label":550,"href":247},"github.plugins.jupyterlab","JupyterLab plugin repository",{"key":552,"label":553,"href":554},"github.plugins.sublime","Sublime plugin repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fplugin_sublime",{"key":556,"label":557,"href":558},"github.plugins.neovim","Neovim plugin repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fplugin_neovim",{"key":560,"label":561,"href":562},"github.cliAgent","CLI agent repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fcli-agent",{"key":564,"label":565,"href":566},"github.mcpDart","MCP Dart repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fmcp_dart",{"key":568,"label":569,"href":570},"github.awesomePieces","Awesome Pieces repository","https:\u002F\u002Fgithub.com\u002Fpieces-app\u002Fawesome-pieces",{"key":572,"label":573,"href":66},"legal.privacyPolicy","Privacy policy",{"key":575,"label":576,"href":69},"legal.refundPolicy","Refund policy",{"key":578,"label":579,"href":72},"legal.terms","Terms",{"key":581,"label":582,"href":583},"legal.security","Legal security","https:\u002F\u002Fpieces.app\u002Flegal\u002Fsecurity",{"key":585,"label":586,"href":503},"videos.youtubeChannel","YouTube channel",{"key":588,"label":589,"href":590},"videos.gettingStartedDesktop","Getting started desktop video","https:\u002F\u002Fyoutu.be\u002FdUr1lRM_TYk",{"key":592,"label":593,"href":594},"videos.snippetDiscoveryxR","Snippet discovery video","https:\u002F\u002Fyoutu.be\u002FG6vb1USw-30",{"key":596,"label":597,"href":598},"sales.bookACall","Book a sales call","https:\u002F\u002Fcalendar.app.google\u002FWVUDtUfNy5Vst3sH7",{"key":600,"label":601,"href":602},"sales.enterprise","Enterprise form","https:\u002F\u002Fgetpieces.typeform.com\u002Fto\u002FaVQFTvpE",{"key":604,"label":605,"href":519},"sales.feedback","Feedback discussions",{"key":607,"label":608,"href":609},"sales.earlyAccess","Early access form","https:\u002F\u002Fgetpieces.typeform.com\u002Fearlyaccess",{"key":611,"label":612,"href":613},"sales.supportEmail","Support email","mailto:support@pieces.app",{"key":615,"label":616,"href":19},"routes.home","Home route",{"key":618,"label":619,"href":56},"routes.about","About route",{"key":621,"label":622,"href":12},"routes.downloads","Downloads route",{"key":624,"label":625,"href":626},"routes.thanks","Post-install thanks route","\u002Finstall\u002Fthanks",{"key":628,"label":629,"href":630},"routes.pricing","Pricing route","\u002Fpricing",{"key":632,"label":633,"href":634},"cta.freeTrial","Start free trial CTA (Pieces Pro) — used by \u002Fcampaigns\u002F* landing pages","https:\u002F\u002Fcampaigns.pieces.app\u002F",{"key":636,"label":637,"href":22},"routes.enterprise","Enterprise route",{"key":639,"label":640,"href":62},"routes.contact","Contact route",{"key":642,"label":643,"href":59},"routes.updates","Updates route",{"key":645,"label":646,"href":647},"routes.migrationError","Migration error route","\u002Fmigration\u002Ferror",{"key":649,"label":650,"href":651},"routes.authenticated","Post-login authenticated route","\u002Fauth\u002Fsigned-in",{"key":653,"label":654,"href":655},"routes.signed-out","Signed out route","\u002Fauth\u002Fsigned-out",{"key":657,"label":658,"href":659},"routes.authentication-error","Authentication error route","\u002Fauth\u002Ferror",{},"data\u002Fshared\u002Furls","NLkVE1lIUws518K-1QsSB6T-GvlXYIzcRL1HDhqarGQ",{"id":664,"title":665,"author":666,"authorPhoto":667,"authorPhotoAlt":668,"authorSlug":669,"body":670,"buttonText":939,"buttonUrl":939,"category":940,"date":941,"description":942,"draft":943,"editorsPick":943,"extension":944,"featured":943,"image":945,"imageAlt":946,"meta":947,"navigation":32,"ogImage":939,"ogImageAlt":939,"path":948,"seo":949,"stem":950,"tags":939,"__hash__":951},"blog\u002Fblog\u002Fflutter-getx-restapi-tutorial.md","Flutter Getx Rest API Tutorial - Registration & Login","Amanullah Bahram","https:\u002F\u002Fstorage.googleapis.com\u002Fpieces-marketing-website\u002Fimages\u002Fblog\u002Fflutter-getx-restapi-tutorial\u002Fauthor.png","Amanullah Bahram.","amanullah-bahram",{"type":671,"value":672,"toc":921},"minimark",[673,677,682,685,695,700,715,719,742,746,749,752,759,762,766,777,784,788,794,800,804,810,816,819,823,830,836,842,846,852,858,862,868,874,877,883,889,893,896,903,910,914],[674,675,676],"p",{},"Welcome to a beginner-friendly guide on how to create a registration and login system in Flutter using the Getx library. This guide will take you through the process step-by-step, making it easy for you to understand and follow along. To make it even easier, there's a YouTube tutorial that you can follow along with. So, whether you're new to Flutter or just looking to improve your skills, this guide is perfect for you!",[678,679,681],"h2",{"id":680},"what-is-flutter-getx","What is Flutter Getx?",[674,683,684],{},"Flutter Getx is a Flutter framework that provides a convenient and efficient way to handle the state management of your Flutter applications. It is built on top of the Flutter framework and provides a simple and intuitive API for managing the state of your app. Getx also integrates with Flutter's existing widgets, making it easy to use and integrate into your existing projects. The library provides a robust set of tools for managing the state of your app, making it easier to build and maintain large and complex applications.",[674,686,687,694],{},[688,689,693],"a",{"href":690,"rel":691},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=h-D_kvXYmDo",[692],"nofollow","You can find the tutorial for this article on YouTube",".",[696,697,699],"h3",{"id":698},"prerequisites","Prerequisites",[701,702,703,712],"ul",{},[704,705,706,707,694],"li",{},"Basic knowledge of ",[688,708,711],{"href":709,"rel":710},"https:\u002F\u002Fbit.ly\u002F3SvGY4c",[692],"Getx State Management & Navigation Management",[704,713,714],{},"Basic knowledge of Flutter UI Design.",[696,716,718],{"id":717},"packages-used","Packages Used",[701,720,721,728,735],{},[704,722,723],{},[688,724,727],{"href":725,"rel":726},"https:\u002F\u002Fpub.dev\u002Fpackages\u002Fget",[692],"Flutter Getx on Pub.Dev",[704,729,730],{},[688,731,734],{"href":732,"rel":733},"https:\u002F\u002Fpub.dev\u002Fpackages\u002Fhttp",[692],"Flutter HTTP",[704,736,737],{},[688,738,741],{"href":739,"rel":740},"https:\u002F\u002Fpub.dev\u002Fpackages\u002Fshared_preferences",[692],"Flutter Sharedprefs",[678,743,745],{"id":744},"get-started","Get Started",[674,747,748],{},"Let's get started! We will first create three screens for our app: a registration screen, a login screen, and a home screen. The registration and login screens will allow users to create an account or sign in, while the home screen will serve as the landing page for users who have successfully registered or logged in. Next, we will use Getx Controllers and HTTP Requests to add the logic behind our registration and login process. We will create two separate controllers, one for registration and one for login, to manage the process and ensure a smooth user experience.",[674,750,751],{},"The directory structure that you should have is as follows:",[674,753,754],{},[755,756],"img",{"alt":757,"src":758},"The directory structure.","https:\u002F\u002Fstorage.googleapis.com\u002Fpieces-marketing-website\u002Fimages\u002Fblog\u002Fflutter-getx-restapi-tutorial\u002Fimg-001.png",[674,760,761],{},"Let's now write the user interface code for our registration and login screens.",[678,763,765],{"id":764},"auth-screen","Auth Screen",[767,768,773],"pre",{"className":769,"code":771,"language":772},[770],"language-text","\u002F\u002F ignore_for_file: avoid_unnecessary_containers, prefer_const_constructors\nimport 'package:api_app\u002Fcontrollers\u002Flogin_controller.dart';\nimport 'package:api_app\u002Fcontrollers\u002Fregisteration_controller.dart';\nimport 'package:api_app\u002Fscreens\u002Fauth\u002Fwidgets\u002Finput_fields.dart';\nimport 'package:api_app\u002Fscreens\u002Fauth\u002Fwidgets\u002Fsubmit_button.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:get\u002Fget.dart';\nclass AuthScreen extends StatefulWidget {\n  @override\n  State createState() => _AuthScreenState();\n}\nclass _AuthScreenState extends State {\n  RegisterationController registerationController =\n      Get.put(RegisterationController());\n  LoginController loginController = Get.put(LoginController());\n  var isLogin = false.obs;\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: SingleChildScrollView(\n        child: Padding(\n          padding: EdgeInsets.all(36),\n          child: Center(\n            child: Obx(\n              () => Column(\n                  crossAxisAlignment: CrossAxisAlignment.center,\n                  mainAxisAlignment: MainAxisAlignment.center,\n                  children: [\n                    SizedBox(\n                      height: 30,\n                    ),\n                    Container(\n                      child: Text(\n                        'WELCOME',\n                        style: TextStyle(\n                            fontSize: 30,\n                            color: Colors.black,\n                            fontWeight: FontWeight.w400),\n                      ),\n                    ),\n                    SizedBox(\n                      height: 20,\n                    ),\n                    Row(\n                      mainAxisAlignment: MainAxisAlignment.center,\n                      children: [\n                        MaterialButton(\n                          color: !isLogin.value ? Colors.white : Colors.amber,\n                          onPressed: () {\n                            isLogin.value = false;\n                          },\n                          child: Text('Register'),\n                        ),\n                        MaterialButton(\n                          color: isLogin.value ? Colors.white : Colors.amber,\n                          onPressed: () {\n                            isLogin.value = true;\n                          },\n                          child: Text('Login'),\n                        ),\n                      ],\n                    ),\n                    SizedBox(\n                      height: 80,\n                    ),\n                    isLogin.value ? loginWidget() : registerWidget()\n                  ]),\n            ),\n          ),\n        ),\n      ),\n    );\n  }\n  Widget registerWidget() {\n    return Column(\n      children: [\n        InputTextFieldWidget(registerationController.nameController, 'name'),\n        SizedBox(\n          height: 20,\n        ),\n        InputTextFieldWidget(\n            registerationController.emailController, 'email address'),\n        SizedBox(\n          height: 20,\n        ),\n        InputTextFieldWidget(\n            registerationController.passwordController, 'password'),\n        SizedBox(\n          height: 20,\n        ),\n        SubmitButton(\n          onPressed: () => registerationController.registerWithEmail(),\n          title: 'Register',\n        )\n      ],\n    );\n  }\n  Widget loginWidget() {\n    return Column(\n      children: [\n        SizedBox(\n          height: 20,\n        ),\n        InputTextFieldWidget(loginController.emailController, 'email address'),\n        SizedBox(\n          height: 20,\n        ),\n        InputTextFieldWidget(loginController.passwordController, 'password'),\n        SizedBox(\n          height: 20,\n        ),\n        SubmitButton(\n          onPressed: () => loginController.loginWithEmail(),\n          title: 'Login',\n        )\n      ],\n    );\n  }\n}\n","text",[774,775,771],"code",{"__ignoreMap":776},"",[674,778,779],{},[688,780,783],{"href":781,"rel":782},"https:\u002F\u002Famanullah.pieces.cloud\u002F?p=fa4d4f8bc0",[692],"Save this code",[678,785,787],{"id":786},"text-field-design-flutter-getx","Text Field Design | Flutter Getx",[767,789,792],{"className":790,"code":791,"language":772},[770],"\u002F\u002F ignore_for_file: prefer_const_constructors\nimport 'package:flutter\u002Fmaterial.dart';\nclass InputTextFieldWidget extends StatelessWidget {\n  final TextEditingController textEditingController;\n  final String hintText;\n  InputTextFieldWidget(this.textEditingController, this.hintText);\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      height: 46,\n      child: TextField(\n        controller: textEditingController,\n        decoration: InputDecoration(\n            alignLabelWithHint: true,\n            focusedBorder: UnderlineInputBorder(\n                borderSide: BorderSide(color: Colors.black)),\n            fillColor: Colors.white54,\n            hintText: hintText,\n            hintStyle: TextStyle(color: Colors.grey),\n            contentPadding: EdgeInsets.only(bottom: 15),\n            focusColor: Colors.white60),\n      ),\n    );\n  }\n}\n",[774,793,791],{"__ignoreMap":776},[674,795,796],{},[688,797,783],{"href":798,"rel":799},"https:\u002F\u002Famanullah.pieces.cloud\u002F?p=696e44a3a5",[692],[678,801,803],{"id":802},"submit-button-design-flutter-getx","Submit Button Design | Flutter Getx",[767,805,808],{"className":806,"code":807,"language":772},[770],"\u002F\u002F ignore_for_file: prefer_const_constructors\nimport 'package:flutter\u002Fmaterial.dart';\nclass SubmitButton extends StatelessWidget {\n  final VoidCallback onPressed;\n  final String title;\n  const SubmitButton({Key? key, required this.onPressed, required this.title})\n      : super(key: key);\n  @override\n  Widget build(BuildContext context) {\n    return Container(\n      width: 180,\n      height: 50,\n      decoration:\n          BoxDecoration(borderRadius: BorderRadius.circular(20), boxShadow: [\n        BoxShadow(\n            color: Colors.white.withOpacity(0.25),\n            offset: Offset(0, 0),\n            blurRadius: 2,\n            spreadRadius: 1)\n      ]),\n      child: ElevatedButton(\n          style: ButtonStyle(\n              shape: MaterialStateProperty.all(\n                  RoundedRectangleBorder(\n                      borderRadius: BorderRadius.circular(10),\n                      side: BorderSide.none)),\n              backgroundColor: MaterialStateProperty.all(\n                Colors.pinkAccent,\n              )),\n          onPressed: onPressed,\n          child: Text(title,\n              style: TextStyle(\n                fontSize: 24,\n                color: Colors.white,\n                fontWeight: FontWeight.w600,\n              ))),\n    );\n  }\n}\n",[774,809,807],{"__ignoreMap":776},[674,811,812],{},[688,813,783],{"href":814,"rel":815},"https:\u002F\u002Famanullah.pieces.cloud\u002F?p=fa72468f1f",[692],[674,817,818],{},"We can now start writing the logic for our registration and login controllers.",[678,820,822],{"id":821},"registration-controller-flutter-getx","Registration Controller | Flutter Getx",[674,824,825,826,829],{},"To make our API call, I created three TextEditingControllers for the required fields. You can create more or fewer controllers depending on your API's requirements. After sending the request, if the status code is 200, it means that our API call was successful. To confirm that the user is registered, I checked for a response of ",[774,827,828],{},"json['code']==0"," from the API. Finally, I saved the user's token in the device's local storage using Shared Preferences, so that they stay logged in even after they close the app.",[767,831,834],{"className":832,"code":833,"language":772},[770],"import 'dart:convert';\nimport 'dart:io';\nimport 'package:api_app\u002Fscreens\u002Fhome.dart';\nimport 'package:api_app\u002Futils\u002Fapi_endpoints.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:get\u002Fget.dart';\nimport 'package:shared_preferences\u002Fshared_preferences.dart';\nimport 'package:http\u002Fhttp.dart' as http;\nclass RegisterationController extends GetxController {\n  TextEditingController nameController = TextEditingController();\n  TextEditingController emailController = TextEditingController();\n  TextEditingController passwordController = TextEditingController();\n  final Future _prefs = SharedPreferences.getInstance();  Future registerWithEmail() async {\n    try {\n      var headers = {'Content-Type': 'application\u002Fjson'};\n      var url = Uri.parse(\n          ApiEndPoints.baseUrl + ApiEndPoints.authEndpoints.registerEmail);\n      Map body = {\n        'name': nameController.text,\n        'email': emailController.text.trim(),\n        'password': passwordController.text\n      };\n      http.Response response =\n          await http.post(url, body: jsonEncode(body), headers: headers);\n      if (response.statusCode == 200) {\n        final json = jsonDecode(response.body);\n        if (json['code'] == 0) {\n          var token = json['data']['Token'];\n          print(token);\n          final SharedPreferences? prefs = await _prefs;\n          await prefs?.setString('token', token);\n          nameController.clear();\n          emailController.clear();\n          passwordController.clear();\n          Get.offAll(HomeScreen());\n        } else {\n          throw jsonDecode(response.body)[\"Message\"] ?? \"Unknown Error Occured\";\n        }\n      } else {\n        throw jsonDecode(response.body)[\"Message\"] ?? \"Unknown Error Occured\";\n      }\n    } catch (e) {\n      Get.back();\n      showDialog(\n          context: Get.context!,\n          builder: (context) {\n            return SimpleDialog(\n              title: Text('Error'),\n              contentPadding: EdgeInsets.all(20),\n              children: [Text(e.toString())],\n            );\n          });\n    }\n  }\n}\n",[774,835,833],{"__ignoreMap":776},[674,837,838],{},[688,839,783],{"href":840,"rel":841},"https:\u002F\u002Famanullah.pieces.cloud\u002F?p=24184fa563",[692],[678,843,845],{"id":844},"login-controller-flutter-getx","Login Controller | Flutter Getx",[767,847,850],{"className":848,"code":849,"language":772},[770],"import 'dart:convert';\nimport 'package:api_app\u002Fscreens\u002Fhome.dart';\nimport 'package:flutter\u002Fmaterial.dart';\nimport 'package:get\u002Fget.dart';\nimport 'package:api_app\u002Futils\u002Fapi_endpoints.dart';\nimport 'package:http\u002Fhttp.dart' as http;\nimport 'package:shared_preferences\u002Fshared_preferences.dart';\nclass LoginController extends GetxController {\n  TextEditingController emailController = TextEditingController();\n  TextEditingController passwordController = TextEditingController();\n  final Future _prefs = SharedPreferences.getInstance();  Future loginWithEmail() async {\n    var headers = {'Content-Type': 'application\u002Fjson'};\n    try {\n      var url = Uri.parse(\n          ApiEndPoints.baseUrl + ApiEndPoints.authEndpoints.loginEmail);\n      Map body = {\n        'email': emailController.text.trim(),\n        'password': passwordController.text\n      };\n      http.Response response =\n          await http.post(url, body: jsonEncode(body), headers: headers);\n      if (response.statusCode == 200) {\n        final json = jsonDecode(response.body);\n        if (json['code'] == 0) {\n          var token = json['data']['Token'];\n          final SharedPreferences? prefs = await _prefs;\n          await prefs?.setString('token', token);\n          emailController.clear();\n          passwordController.clear();\n          Get.offAll(HomeScreen());\n        } else if (json['code'] == 1) {\n          throw jsonDecode(response.body)['message'];\n        }\n      } else {\n        throw jsonDecode(response.body)[\"Message\"] ?? \"Unknown Error Occured\";\n      }\n    } catch (error) {\n      Get.back();\n      showDialog(\n          context: Get.context!,\n          builder: (context) {\n            return SimpleDialog(\n              title: Text('Error'),\n              contentPadding: EdgeInsets.all(20),\n              children: [Text(error.toString())],\n            );\n          });\n    }\n  }\n}\n",[774,851,849],{"__ignoreMap":776},[674,853,854],{},[688,855,783],{"href":856,"rel":857},"https:\u002F\u002Famanullah.pieces.cloud\u002F?p=42f04fb615",[692],[678,859,861],{"id":860},"api-endpoints-flutter-getx","API Endpoints | Flutter Getx",[767,863,866],{"className":864,"code":865,"language":772},[770],"class ApiEndPoints {\n  static final String baseUrl = 'http:\u002F\u002Fbase_url\u002Fapi\u002F';\n  static _AuthEndPoints authEndpoints = _AuthEndPoints();\n}\nclass _AuthEndPoints {\n  final String registerEmail = 'authaccount\u002Fregistration';\n  final String loginEmail = 'authaccount\u002Flogin';\n}\n",[774,867,865],{"__ignoreMap":776},[674,869,870],{},[688,871,783],{"href":872,"rel":873},"https:\u002F\u002Famanullah.pieces.cloud\u002F?p=057e4f983b",[692],[674,875,876],{},"Make sure to update the API base URL and endpoints with your own. To log out, just clear the saved user data in Shared Preferences and send the user back to the login screen.",[767,878,881],{"className":879,"code":880,"language":772},[770],"TextButton(\n            onPressed: () async {\n              final SharedPreferences? prefs = await _prefs;\n              prefs?.clear();\n              Get.offAll(AuthScreen());\n            },\n            child: Text(\n              'logout',\n              style: TextStyle(color: Colors.white),\n            ));\n",[774,882,880],{"__ignoreMap":776},[674,884,885],{},[688,886,783],{"href":887,"rel":888},"https:\u002F\u002Famanullah.pieces.cloud\u002F?p=9c00488b2b",[692],[678,890,892],{"id":891},"conclusion","Conclusion",[674,894,895],{},"In this article, you learned how to create a login and registration system in Flutter using Getx. We first built the user interface for the registration and login screens. Then, we added the functionality to register users through an API and keep their session active by saving their tokens using Shared Preferences. With these steps, you now have a basic understanding of how to implement flutter getx authentication\u002Fflutter token based authentication.",[674,897,898],{},[688,899,902],{"href":900,"rel":901},"https:\u002F\u002Fbit.ly\u002F3Dcq9FA",[692],"Full Source Code",[674,904,905],{},[688,906,909],{"href":907,"rel":908},"https:\u002F\u002Fbit.ly\u002F3VM30Rw",[692],"Video Tutorial",[696,911,913],{"id":912},"bonus-tip","Bonus Tip",[674,915,916,917,920],{},"Streamline your workflow with ",[688,918,8],{"href":445,"rel":919},[692],". It's a tool that helps you save and organize code snippets in one click. You can grab code from any website or your own text editor, automatically save your frequently used code, get suggestions for code that follows best practices, and even save code from screenshots. Give Pieces a try for a more productive coding experience.",{"title":776,"searchDepth":922,"depth":922,"links":923},2,[924,929,930,931,932,933,934,935,936],{"id":680,"depth":922,"text":681,"children":925},[926,928],{"id":698,"depth":927,"text":699},3,{"id":717,"depth":927,"text":718},{"id":744,"depth":922,"text":745},{"id":764,"depth":922,"text":765},{"id":786,"depth":922,"text":787},{"id":802,"depth":922,"text":803},{"id":821,"depth":922,"text":822},{"id":844,"depth":922,"text":845},{"id":860,"depth":922,"text":861},{"id":891,"depth":922,"text":892,"children":937},[938],{"id":912,"depth":927,"text":913},null,"Software Development","2022-10-20T00:00:00.000Z","Learn to easily implement registration and login with Flutter and GetX in this step-by-step tutorial. It's a great additon to any Flutter app.",false,"md","https:\u002F\u002Fstorage.googleapis.com\u002Fpieces-marketing-website\u002Fimages\u002Fblog\u002Fflutter-getx-restapi-tutorial\u002Fhero.jpeg","Flutter GetX REST API Post Method (Registration & Login).",{},"\u002Fblog\u002Fflutter-getx-restapi-tutorial",{"title":665,"description":942},"blog\u002Fflutter-getx-restapi-tutorial","Bx-Ikwjm84im8zAH_gjQTzxgYuMyQAOEEb_VprNvNvg",{"id":953,"title":666,"body":954,"description":958,"draft":943,"extension":944,"meta":961,"navigation":32,"path":962,"photo":963,"photoAlt":939,"seo":964,"stem":965,"__hash__":966},"authors\u002Fauthors\u002Famanullah-bahram.md",{"type":671,"value":955,"toc":959},[956],[674,957,958],{},"Amanullah is a developer with a passion for teaching. He has built and published over ten apps using Flutter and has gained experience through two internships and a role as a senior Flutter developer. Currently working as a freelancer, Amanullah has been sharing programming tutorials on his YouTube channel since 2020, focusing on Flutter.",{"title":776,"searchDepth":922,"depth":922,"links":960},[],{},"\u002Fauthors\u002Famanullah-bahram","https:\u002F\u002Fstorage.googleapis.com\u002Fpieces-marketing-website\u002Fimages\u002Fauthors\u002Famanullah-bahram.jpg",{"title":666,"description":958},"authors\u002Famanullah-bahram","Pal5WIjLjWELzDiBs1jlvaCt3PIhtrtvrMioH4a2BzQ",{"left":968,"top":968,"width":969,"height":969,"rotate":968,"vFlip":943,"hFlip":943,"body":970},0,24,"\u003Cpath fill=\"currentColor\" d=\"m7.825 13l4.9 4.9q.3.3.288.7t-.313.7q-.3.275-.7.288t-.7-.288l-6.6-6.6q-.15-.15-.213-.325T4.426 12t.063-.375t.212-.325l6.6-6.6q.275-.275.688-.275t.712.275q.3.3.3.713t-.3.712L7.825 11H19q.425 0 .713.288T20 12t-.288.713T19 13z\"\u002F>"]