{"id":10021032,"date":"2025-10-14T23:27:21","date_gmt":"2025-10-14T15:27:21","guid":{"rendered":"https:\/\/itmax.cn\/?p=10021032"},"modified":"2025-10-14T23:27:21","modified_gmt":"2025-10-14T15:27:21","slug":"qoder-adb-supabase-%ef%bc%9a5%e5%88%86%e9%92%9fget%e8%b6%85%e7%81%abai%e6%89%8b%e5%8a%9e%e7%94%9f%e5%9b%beapp","status":"publish","type":"post","link":"https:\/\/itmax.cn\/?p=10021032","title":{"rendered":"Qoder + ADB Supabase \uff1a5\u5206\u949fGET\u8d85\u706bAI\u624b\u529e\u751f\u56feAPP"},"content":{"rendered":"<p>\u89c6\u9891\u6548\u679c\uff1a<\/p>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047319985\" alt=\"\u56fe\u7247\" title=\"\u56fe\u7247\"><\/p>\n<h2>\u4e00\u3001\u524d\u8a00<\/h2>\n<p>\u5728AI\u539f\u751f\u5e94\u7528\u5f00\u53d1\u7684\u65f6\u4ee3\uff0c\u4f20\u7edf\u7684\u540e\u7aef\u67b6\u6784\u6b63\u5728\u88ab\u91cd\u65b0\u5b9a\u4e49\u3002\u672c\u6587\u5c06\u5e26\u4f60\u4f53\u9a8c\u5982\u4f55\u4f7f\u7528 Qoder\u3001\u963f\u91cc\u4e91ADB Supabase \u548c\u901a\u4e49\u5343\u95ee\u56fe\u50cf\u7f16\u8f91\u6a21\u578b\uff08Qwen Image Edit\uff09\uff0c\u5feb\u901f\u642d\u5efa\u4e00\u4e2a\u5b8c\u6574\u7684 AI \u624b\u529e\u751f\u56fe Flutter \u79fb\u52a8\u7aef\u5e94\u7528\u3002\u5168\u7a0b\u65e0\u9700\u81ea\u5efa\u4f20\u7edf\u540e\u7aef\uff0c\u771f\u5b9e\u4f53\u9a8c\u4e00\u6b21 Vibe Coding \u7684\u6781\u901f\u5f00\u53d1\u3002<\/p>\n<h2>\u4e8c\u3001\u603b\u4f53\u601d\u8def<\/h2>\n<ul>\n<li>\u524d\u7aef\u7531 Qoder \u6839\u636e\u9700\u6c42\u81ea\u52a8\u751f\u6210 Flutter \u4ee3\u7801\uff0c\u8d1f\u8d23\u754c\u9762\u4e0e\u4ea4\u4e92\u3002<\/li>\n<li>\u6570\u636e\u4e0e\u5bf9\u8c61\u5b58\u50a8\u7531 ADB Supabase \u63d0\u4f9b\uff0c<strong>\u627f\u62c5 BaaS \u80fd\u529b<\/strong>\u3002<\/li>\n<li>AI \u80fd\u529b\u901a\u8fc7 ADB Supabase Edge Function \u63a5\u5165\u901a\u4e49\u5343\u95ee\u56fe\u50cf\u7f16\u8f91\u6a21\u578b\uff0c\u5b9e\u73b0\u56fe\u7247\u7f16\u8f91\u3002<\/li>\n<li>\u6574\u4f53\u67b6\u6784\u8f7b\u91cf\u3001\u8fed\u4ee3\u5feb\uff0c\u9002\u5408\u4ece\u539f\u578b\u5230\u4e0a\u7ebf\u7684\u5feb\u901f\u63a8\u8fdb\u3002    <br \/><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047319986\" alt=\"\u56fe\u7247\" title=\"\u56fe\u7247\" loading=\"lazy\"><\/li>\n<\/ul>\n<h2>\u4e09\u3001\u73af\u5883\u4e0e\u51c6\u5907<\/h2>\n<ol>\n<li>\u5f00\u901a\u963f\u91cc\u4e91\u00a0ADB Supabase[1]\u00a0\u5b9e\u4f8b\uff08\u9650\u65f6\u514d\u8d391C2G\uff09\uff0c\u4e3a\u4e86\u80fd\u591f\u8c03\u7528\u767e\u70bc API\uff0c\u60a8\u9700\u8981\u914d\u7f6eADB Supabase \u5b9e\u4f8b\u7684 vpc\u00a0\u901a\u8fc7\u7ec8\u7aef\u8282\u70b9\u79c1\u7f51\u8bbf\u95ee\u963f\u91cc\u4e91\u767e\u70bc\u5e73\u53f0[2]\uff08\u514d\u8d39\uff09\uff0c\u6216\u914d\u7f6e\u516c\u7f51NAT\u7f51\u5173[3]\uff08\u6536\u8d39\uff09\uff1b<\/li>\n<li>\u767e\u70bc\u00a0DashScope API Key[4]\uff08\u8c03\u7528\u901a\u4e49\u5343\u95ee\u56fe\u50cf\u7f16\u8f91\u6a21\u578b\uff09\uff1b<\/li>\n<li>\u5b89\u88c5\u00a0Qoder[5]\u00a0\u4e0e\u00a0Flutter[6]\u00a0\u63d2\u4ef6\uff0c\u5e76\u5b89\u88c5Flutter \u73af\u5883\uff08Android\/iOS SDK\uff09\uff0c\u5177\u4f53\u53ef\u53c2\u8003\u4f7f\u7528 VS Code \u5b89\u88c5 Flutter[7]\u3002<\/li>\n<\/ol>\n<h2>\u56db\u3001AI \u9a71\u52a8\u5f00\u53d1 &#8211; Qoder \u81ea\u52a8\u751f\u6210 Flutter \u4ee3\u7801<\/h2>\n<p>Qoder \u4f5c\u4e3aAI\u9a71\u52a8\u7684IDE Agent\uff0c\u80fd\u591f\u6839\u636e\u9700\u6c42\u81ea\u52a8\u751f\u6210\u9ad8\u8d28\u91cf\u7684 Flutter \u4ee3\u7801\u3002\u4f7f\u7528 Flutter \u63d2\u4ef6\u521b\u5efaEmpty Project \u540e\uff0c\u4f60\u53ea\u9700\u63cf\u8ff0\u6838\u5fc3\u529f\u80fd\uff0c\u914d\u5408\u51e0\u8f6e\u8c03\u8bd5\u4e0e Debug\uff0c\u5c31\u80fd\u5f97\u5230\u53ef\u8fd0\u884c\u7684\u79fb\u52a8\u7aef\u5e94\u7528\u3002<br \/><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047319987\" alt=\"\u56fe\u7247\" title=\"\u56fe\u7247\" loading=\"lazy\"><br \/>\u53ef\u4ee5\u53c2\u8003\u672c\u6587\u6e90\u4ee3\u7801[8]\uff0c\u5e76\u5728\u6b64\u57fa\u7840\u4e0a\u8fdb\u884c\u4e8c\u521b\uff01<\/p>\n<h2>\u4e94\u3001\u540e\u7aef\u5373\u670d\u52a1 &#8211; ADB Supabase \u914d\u7f6e<\/h2>\n<p><strong>5.1 \u83b7\u53d6 API \u914d\u7f6e<\/strong><\/p>\n<p>\u9996\u5148\uff0c\u6253\u5f00ADB Supabase\u7684dashboard\u9875\u9762\uff0c\u590d\u5236API_URL\u548cAPI_KEY\u3002\u901a\u8fc7 dotenv \u7684\u65b9\u5f0f\u5c06 ADB Supabase \u5b9e\u4f8b\u7684API_URL\u548cAPI_KEY\uff08Service Role Key\uff09\u914d\u7f6e\u5230\u9879\u76ee\u6839\u76ee\u5f55\u3002<\/p>\n<pre><code>SUPABASE_URL=https:\/\/sbp-xxxxx.supabase.opentrust.net\nSUPABASE_SERVICE_KEY=xxxxxxxx<\/code><\/pre>\n<p><strong>5.2 \u6570\u636e\u5e93\u8868\u7ed3\u6784\u8bbe\u8ba1<\/strong><\/p>\n<p>\u5728ADB Supabase dashboard \u4e2d\u521b\u5efa\u5982\u4e0b\u6240\u793a\u7684\u6570\u636e\u5e93\u8868\u6765\u5b58\u50a8\u5386\u53f2\u6570\u636e\uff0c\u6b64\u8868\u7528\u4e8e\u5b58\u50a8\u7528\u6237\u7f16\u8f91\u56fe\u7247\u7684\u8bb0\u5f55\uff0c\u5305\u62ec\u539f\u59cb\u56fe\u7247URL\u3001\u7f16\u8f91\u540e\u56fe\u7247URL\u3001\u7528\u6237\u8f93\u5165\u7684\u63d0\u793a\u8bcd\u7b49\u5173\u952e\u4fe1\u606f\u3002<\/p>\n<pre><code>CREATE TABLE public.edited_images (\n    id TEXT PRIMARY KEY,\n    prompt TEXT NOT NULL,\n    original_image_url TEXT NOT NULL,\n    edited_image_url TEXT NOT NULL,\n    created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()\n);<\/code><\/pre>\n<p><strong>5.3 \u5bf9\u8c61\u5b58\u50a8\u6876\u521b\u5efa<\/strong><\/p>\n<p>\u5728ADB Supabase dashboard\u4e0a\u7684 Storage\u9875\u9762\u521b\u5efa\u540d\u4e3a images \u7684\u5b58\u50a8\u6876\uff0c\u7528\u6765\u5b58\u50a8\u7528\u6237\u4e0a\u4f20\u7684\u56fe\u7247\u6570\u636e\u3002\u8fd9\u4e2a\u5b58\u50a8\u6876\u5c06\u4f5c\u4e3a\u56fe\u7247\u6587\u4ef6\u7684\u6301\u4e45\u5316\u5b58\u50a8\u89e3\u51b3\u65b9\u6848\u3002<\/p>\n<h2>\u516d\u3001AI\u670d\u52a1\u96c6\u6210 &#8211; Edge Function \u90e8\u7f72<\/h2>\n<p><strong>6.1 Edge Function\u6838\u5fc3\u903b\u8f91\u90e8\u7f72<\/strong><\/p>\n<p>\u6253\u5f00 ADB Supabase Dashboard\uff0c\u5728 Edge Functions \u9875\u9762\u70b9\u51fb &#8220;Via Editor Deploy a new function&#8221;\uff0c\u5728\u7f16\u8f91\u5668\u4e2d\u952e\u5165\u5982\u4e0b\u6240\u793a\u7684function\uff0c\u5c06function\u547d\u540d\u4e3awan\uff0c\u7136\u540e\u90e8\u7f72\u3002<\/p>\n<p>\u6ce8\u610f\uff1a\u5982\u679c\u60a8\u9009\u62e9\u901a\u8fc7\u7ec8\u7aef\u8282\u70b9\u79c1\u7f51\u8bbf\u95ee\u963f\u91cc\u4e91\u767e\u70bc\u5e73\u53f0[2]\uff08\u514d\u8d39\uff09\uff0cBASE_URL\u9700\u8981\u8bbe\u7f6e\u4e3a\u00a0<a href=\"https:\/\/link.segmentfault.com\/?enc=0v1tOkCEK6tje3gN0jpdyg%3D%3D.SSof4q6rGBpadk4BKFJUYTCD%2F0lzOsc948FXvwzNBh3bHI27afbdnkTMOC9MvzMgvBCcSdIL%2FkzAA9T%2FC44NmQ%3D%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/vpc-cn-beijing.dashscope.aliyuncs.com\/api\/v1<\/a>\uff0c\u82e5\u901a\u8fc7\u914d\u7f6e\u516c\u7f51NAT\u7f51\u5173[3]\uff08\u6536\u8d39\uff09\u8bbf\u95ee\uff0cBASE_URL \u9700\u8981\u8bbe\u7f6e\u4e3a\u00a0<a href=\"https:\/\/link.segmentfault.com\/?enc=JcmRZd6QAC2H7KaAj0qd3Q%3D%3D.P0bIPU8Mx3c6fqQxQ3q%2FWkkirUebepKgvriY2M1XibaX%2FPXYt5qNAUXtYqKWkU%2FU\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/dashscope.aliyuncs.com\/api\/v1<\/a>\u3002<\/p>\n<pre><code>const DASHSCOPE_API_KEY = Deno.env.get('BAILIAN_API_KEY');\nconst BASE_URL = 'https:\/\/vpc-cn-beijing.dashscope.aliyuncs.com\/api\/v1';\nasync function callImageEditAPI(image_url, prompt){\n  const messages = [\n    {\n      role: &quot;user&quot;,\n      content: [\n        {\n          image: image_url\n        },\n        {\n          text: prompt\n        }\n      ]\n    }\n  ];\n  const payload = {\n    model: &quot;qwen-image-edit&quot;,\n    input: {\n      messages\n    },\n    parameters: {\n      negative_prompt: &quot;&quot;,\n      watermark: false\n    }\n  };\n  try {\n    const response = await fetch(`${BASE_URL}\/services\/aigc\/multimodal-generation\/generation`, {\n      method: 'POST',\n      headers: {\n        'Authorization': `Bearer ${DASHSCOPE_API_KEY}`,\n        'Content-Type': 'application\/json'\n      },\n      body: JSON.stringify(payload)\n    });\n    if (!response.ok) {\n      console.error(`Request failed: ${response.status} ${response.statusText}`);\n      return null;\n    }\n    const data = await response.json();\n    return data.output?.choices?.[0]?.message?.content ?? null;\n  } catch (error) {\n    console.error(&quot;Request error:&quot;, error.message);\n    return null;\n  }\n}\nDeno.serve(async (req)=&gt;{\n  try {\n    const { image_url, prompt } = await req.json();\n    if (!image_url || !prompt) {\n      returnnew Response(JSON.stringify({\n        error: &quot;Missing image_url or prompt&quot;\n      }), {\n        status: 400,\n        headers: {\n          'Content-Type': 'application\/json'\n        }\n      });\n    }\n    const result = await callImageEditAPI(image_url, prompt);\n    returnnew Response(JSON.stringify({\n      message: result\n    }), {\n      headers: {\n        'Content-Type': 'application\/json',\n        'Connection': 'keep-alive'\n      }\n    });\n  } catch (error) {\n    console.error(&quot;Server error:&quot;, error);\n    returnnew Response(JSON.stringify({\n      error: &quot;Internal server error&quot;\n    }), {\n      status: 500,\n      headers: {\n        'Content-Type': 'application\/json'\n      }\n    });\n  }\n});\n<\/code><\/pre>\n<p>\u8be5\u51fd\u6570\u63a5\u6536\u56fe\u7247 URL \u4e0e\u63d0\u793a\u8bcd\uff0c\u8c03\u7528\u901a\u4e49\u5343\u95ee\u56fe\u50cf\u7f16\u8f91\u6a21\u578b\uff0c\u8fd4\u56de\u751f\u6210\u7ed3\u679c\u3002<\/p>\n<p><strong>6.2 \u5b89\u5168\u5bc6\u94a5\u7ba1\u7406\u914d\u7f6e<\/strong><\/p>\n<p>\u5728 ADB Supabase \u4e2d\uff0c\u6211\u4eec\u63d0\u4f9b\u539f\u751f\u7684 Edge Function\u00a0Secrets \u914d\u7f6e\u4e0e\u96c6\u4e2d\u7ba1\u7406\u80fd\u529b\uff0c\u53ef\u5c06 AI API Token\uff08\u5982 DashScope\/\u767e\u70bc\uff09\u5b89\u5168\u5730\u5b58\u653e\u5728\u51fd\u6570\u8fd0\u884c\u73af\u5883\u7684\u5bc6\u94a5\u5e93\u4e2d\uff0c\u901a\u8fc7 Deno.env.get \u8bfb\u53d6\uff0c\u7edd\u4e0d\u4e0b\u53d1\u5230\u5ba2\u6237\u7aef\uff0c\u4e5f\u4e0d\u8fdb\u5165\u4ee3\u7801\u4ed3\u5e93\u6216\u6784\u5efa\u4ea7\u7269\u3002<\/p>\n<ul>\n<li>\u5728 Edge Functions \u7684 Secrets \u9875\u9762\u914d\u7f6e\u00a0BAILIAN_API_KEY\u3002<\/li>\n<li>\u5728\u51fd\u6570\u4e2d\u4f7f\u7528\u00a0Deno.env.get(&#8216;BAILIAN_API_KEY&#8217;)\u00a0\u8bfb\u53d6\uff0c\u907f\u514d\u5c06\u5bc6\u94a5\u786c\u7f16\u7801\u6216\u66b4\u9732\u5230\u5ba2\u6237\u7aef\u3002<\/li>\n<\/ul>\n<h2>\u4e03\u3001\u603b\u4f53\u6d41\u7a0b\u53ca\u539f\u7406<\/h2>\n<p><img decoding=\"async\" width=\"723\" height=\"313\" referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/bVdmIfE\" alt=\"image.png\" title=\"image.png\" loading=\"lazy\"><\/p>\n<h2>\u516b\u3001\u6d4b\u8bd5\u4e0e\u9a8c\u8bc1<\/h2>\n<blockquote><p>\u63d0\u793a\u8bcd\u793a\u4f8b\uff1a\u7ed8\u5236\u56fe\u4e2d\u89d2\u8272\u76841\/7\u6bd4\u4f8b\u7684\u5546\u4e1a\u5316\u624b\u529e\uff0c\u5199\u5b9e\u98ce\u683c\uff0c\u771f\u5b9e\u73af\u5883\uff0c\u624b\u529e\u653e\u5728\u7535\u8111\u684c\u4e0a,\u7535\u8111\u5c4f\u5e55\u91cc\u7684\u5185\u5bb9\u4e3a\u8be5\u624b\u529e\u7684C4D\u5efa\u6a21\u8fc7\u7a0b\uff0c\u7535\u8111\u5c4f\u5e55\u65c1\u653e\u7740\u5370\u6709\u539f\u753b\u7684BANDAI\u98ce\u683c\u7684\u5851\u6599\u73a9\u5177\u5305\u88c5\u76d2\uff0c\u7535\u8111\u684c\u4e0a\u8fd8\u6709\u5236\u4f5c\u624b\u529e\u7684\u5de5\u5177\uff0c\u5982\u753b\u7b14\uff0c\u989c\u6599\uff0c\u5c0f\u5200\u7b49\u3002<\/p><\/blockquote>\n<p><img decoding=\"async\"   referrerpolicy=\"no-referrer\" src=\"https:\/\/segmentfault.com\/img\/remote\/1460000047319988\" alt=\"\u56fe\u7247\" title=\"\u56fe\u7247\" loading=\"lazy\"><\/p>\n<h2>\u4e5d\u3001\u7ed3\u8bed<\/h2>\n<p>\u901a\u8fc7 Qoder + ADB Supabase + \u901a\u4e49\u5343\u95ee\u56fe\u50cf\u7f16\u8f91\u6a21\u578b\u7684\u7ec4\u5408\uff0c\u6211\u4eec\u53ef\u4ee5\u5728\u6ca1\u6709\u4f20\u7edf\u540e\u7aef\u7684\u524d\u63d0\u4e0b\uff0c\u8fc5\u901f\u5b8c\u6210\u4e00\u4e2a\u53ef\u7528\u7684 AI \u624b\u529e\u751f\u56fe Flutter \u5e94\u7528\u3002\u4ece\u524d\u7aef\u5230\u540e\u7aef\u3001\u4ece\u6570\u636e\u5230\u6a21\u578b\uff0c\u5168\u94fe\u8def\u8f7b\u91cf\u654f\u6377\uff0c\u65e2\u9002\u5408\u539f\u578b\u9a8c\u8bc1\uff0c\u4e5f\u80fd\u5e73\u6ed1\u5347\u7ea7\u5230\u751f\u4ea7\u3002\u6b22\u8fce\u5728\u5b9e\u8df5\u4e2d\u6839\u636e\u4e1a\u52a1\u573a\u666f\u52a0\u5f3a\u5b89\u5168\u4e0e\u6027\u80fd\u4f18\u5316\uff0c\u628a Vibe Coding \u7684\u5feb\u611f\u771f\u6b63\u843d\u5730\u5230\u771f\u5b9e\u5e94\u7528\u3002<\/p>\n<p><strong>\u53c2\u8003\u94fe\u63a5\uff1a<\/strong><\/p>\n<p>[1]<a href=\"https:\/\/link.segmentfault.com\/?enc=pFWgC2Fu%2BXAQ%2FQGZTSTm1w%3D%3D.nahJdbUmVEi8g%2B%2BHLh%2FlO3etKnGGmdPDtqWgnurnH3TcfCM8XCDdhbih8Uk8lu2%2BfINvrBy%2BpS%2BcKRCqJ70AiQ%3D%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/gpdbnext.console.aliyun.com\/gpdb\/cn-beijing\/supabase<\/a><\/p>\n<p>[2]<a href=\"https:\/\/link.segmentfault.com\/?enc=rXTdK6GLUfJu8dZG9IYgmQ%3D%3D.NNAo3mjnF6EDVSr%2FLy8r1HPbTBLBedr%2BvgzlMr7Ry1qrAkofvjAURmAzZkfe2s0LOQgvi263YNeF9%2Biep0X8dxJ3wh9WsHmwS%2FgPo%2BaM%2BIg%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/help.aliyun.com\/zh\/model-studio\/access-model-studio-t&#8230;<\/a><\/p>\n<p>[3]<a href=\"https:\/\/link.segmentfault.com\/?enc=vrns0cd%2Bi2hHytlo4wPWjA%3D%3D.ZrUgyyPV6yk8G9d%2BFBJ8h1rDv7xnWsiHv5mYV9lnfWEoKivxjkgP6H6ELSfgWr2CLp6durr4%2F4B6YSKLrFQrnA%3D%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/vpc.console.aliyun.com\/nat\/cn-beijing\/nats<\/a><\/p>\n<p>[4]<a href=\"https:\/\/link.segmentfault.com\/?enc=LI8Qez0ChUZVm53udvsrdw%3D%3D.RaZsYilwTiIc7%2B5aWnlhvVsLzgSIuQQ94TGqN6UvD7kSQCHAsaBw0yRYG9UZePCW\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/bailian.console.aliyun.com\/<\/a><\/p>\n<p>[5]<a href=\"https:\/\/link.segmentfault.com\/?enc=j3ZmgWAjRWWW9XjVgjuOcA%3D%3D.E7OfuhPcEGKntXN%2BzCm95jWpgobQRDMGuxq4ggP%2Fk38%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/qoder.com\/<\/a><\/p>\n<p>[6]<a href=\"https:\/\/link.segmentfault.com\/?enc=Vc7Ti5G7H7LzZ0QupuoG6g%3D%3D.6BCbZBpdWCMAnUhBM%2BUyQ3xgp0MvBBfSi8uMUZZ78wIsynknnAlGdJIylYeV7c%2Fi\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/marketplace.visualstudio.com\/items<\/a><\/p>\n<p>[7]<a href=\"https:\/\/link.segmentfault.com\/?enc=TwRVTjY1BGx64GTwQHg9xA%3D%3D.HoFCfVmJzTLrbMbeA898GT9X8f6oRsJfTdzszrPjJOYR3zx80y186v2jgsrGJfiu\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/docs.flutter.dev\/install\/with-vs-code<\/a><\/p>\n<p>[8]<a href=\"https:\/\/link.segmentfault.com\/?enc=dd2q31boA69mOQNC5UsP8A%3D%3D.1LIbA4hLsoiw%2BjLyxO9dL6EsrudEDiuYBA31BouvJlLA4S8c%2Bqm8DtQZq0aY%2FLf4pxN53qMN7hxbGLgYtPp0wQ%3D%3D\" rel=\"nofollow noopener noreferrer\" target=\"_blank\">https:\/\/github.com\/fffzlfk\/adb-supabase-flutter-demo<\/a><\/p>\n<p><a href=\"https:\/\/segmentfault.com\/a\/1190000047320012\">https:\/\/segmentfault.com\/a\/1190000047320012<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u89c6\u9891\u6548\u679c\uff1a \u4e00\u3001\u524d\u8a00 \u5728AI\u539f\u751f\u5e94\u7528\u5f00\u53d1\u7684\u65f6\u4ee3\uff0c\u4f20\u7edf\u7684\u540e\u7aef\u67b6\u6784\u6b63\u5728\u88ab\u91cd\u65b0\u5b9a\u4e49\u3002\u672c\u6587\u5c06\u5e26\u4f60\u4f53\u9a8c\u5982\u4f55\u4f7f\u7528 Qode [&hellip;]<\/p>\n","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10021032","post","type-post","status-publish","format-standard","hentry","category-share"],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021032","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=10021032"}],"version-history":[{"count":0,"href":"https:\/\/itmax.cn\/index.php?rest_route=\/wp\/v2\/posts\/10021032\/revisions"}],"wp:attachment":[{"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=10021032"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=10021032"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itmax.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=10021032"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}