{
  "version": "https://jsonfeed.org/version/1", 
  "title": "Flutter", 
  "description": "\u6765\u81ea <a href=\"/go/google\">Google</a> \u7684\u540c\u65f6\u652f\u6301 <a href=\"/go/android\">Android</a> \u548c <a href=\"/go/idev\">iOS</a> \u7684\u79fb\u52a8\u5e94\u7528 UI \u6846\u67b6\u3002", 
  "home_page_url": "https://www.v2ex.com/go/flutter", 
  "feed_url": "https://www.v2ex.com/feed/flutter.json", 
  "icon": "https://cdn.v2ex.com/navatar/883e/881b/1027_large.png?m=1652338561", 
  "favicon": "https://cdn.v2ex.com/navatar/883e/881b/1027_normal.png?m=1652338561", 
  "items": [
    {
      "author": {
        "url": "https://www.v2ex.com/member/55z55", 
        "name": "55z55", 
        "avatar": "https://cdn.v2ex.com/gravatar/58393fd191158257252af049aa594ba5?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1203414", 
      "date_modified": "2026-04-03T11:37:26+00:00", 
      "content_html": "<p>\u60c5\u666f\u8bd7\u8bcd app  \u8de8\u5e73\u53f0\u5f00\u53d1\uff0c\n\u4f20\u9001\u95e8\n<a href=\"https://appgallery.huawei.com/app/detail?id=app.wushu.poes&amp;channelId=SHARE&amp;source=appshare\" rel=\"nofollow\">https://appgallery.huawei.com/app/detail?id=app.wushu.poes&amp;channelId=SHARE&amp;source=appshare</a></p>\n<p>\u7f51\u9875\u7248\uff0c\n<a href=\"http://poe.vogov.cn\" rel=\"nofollow\">poe.vogov.cn</a>\nFlutter web \u597d\u591a\u4e0d\u652f\u6301\uff0c\u6211\u5272\u4e86\u5f88\u591a\u529f\u80fd </p>\n<p>\u5b89\u5353\u7248\n<a href=\"https://luat.lanzouq.com/iLF4e3mcld5c\" rel=\"nofollow\">https://luat.lanzouq.com/iLF4e3mcld5c</a></p>\n<p>\u9644\u4e00\u4e2a \u9e3f\u8499 Flutter sdk \u94fe\u63a5:\n<a href=\"https://gitcode.com/openharmony-tpc/flutter_flutter\" rel=\"nofollow\">https://gitcode.com/openharmony-tpc/flutter_flutter</a></p>\n", 
      "date_published": "2026-04-03T11:37:02+00:00", 
      "title": "flutter \u5f00\u53d1\u7684\u9e3f\u8499\u5e94\u7528\u4e0a\u67b6\u5e94\u7528\u5546\u5e97\u4e86", 
      "id": "https://www.v2ex.com/t/1203414"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/hzdt", 
        "name": "hzdt", 
        "avatar": "https://cdn.v2ex.com/gravatar/6309548f9dab55dd7ae8e802cbe46fa6?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1202237", 
      "date_modified": "2026-03-31T00:29:48+00:00", 
      "content_html": "RT \u6253\u7b97\u5b66\u4e60\u4e0b flutter \u53bb\u505a\u4e00\u4e2a app", 
      "date_published": "2026-03-30T07:26:26+00:00", 
      "title": "flutter \u73b0\u5728\u5f00\u53d1\u6700\u4f73\u7684\u5e93\u7528\u4ec0\u4e48\uff1f\u6216\u8005\u6709\u4ec0\u4e48\u597d\u7528\u7684\u811a\u624b\u67b6\u5417\uff1f", 
      "id": "https://www.v2ex.com/t/1202237"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/Dnlyao", 
        "name": "Dnlyao", 
        "avatar": "https://cdn.v2ex.com/gravatar/b00f1ae99ee8c2e17dd68f97a696b308?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1191869", 
      "title": "USB \u6444\u50cf\u5934\u6c42\u52a9\u3002", 
      "id": "https://www.v2ex.com/t/1191869", 
      "date_published": "2026-02-10T01:26:18+00:00", 
      "content_html": "\u6709\u6ca1\u6709\u63d2\u4ef6\u5b9e\u73b0\u529f\u80fd\u80fd\u83b7\u53d6\u5e27\u6570\u636e\uff0c\u5e76\u4e14\u53ef\u4ee5\u5207\u6362 USB \u6444\u50cf\u5934\u3002\uff08\u9879\u76ee\u6709\u4e24\u4e2a USB \u6444\u50cf\u5934\uff0c\u4e00\u4e2a\u7528\u4e8e\u62cd\u7167\uff0c\u4e00\u4e2a\u7528\u4e8e\u4eba\u8138\u8bc6\u522b\uff0c\u9700\u8981\u5e27\u6570\u636e\u8fd4\u56de\u7ed9 sdk \u8bc6\u522b\uff09\u3002\u627e\u5230\u7684\u63d2\u4ef6\u90fd\u662f\u53ea\u7b26\u5408\u4e00\u4e2a\uff0c\u8981\u4e0d\u53ef\u4ee5\u5207\u6362\uff0c\u6ca1\u6709\u5e27\u7684\u56de\u8c03\u3002\u8981\u4e0d\u4e0d\u80fd\u5207\u6362\uff0c\u4f46\u662f\u6709\u56de\u8c03\u3002"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/Dnlyao", 
        "name": "Dnlyao", 
        "avatar": "https://cdn.v2ex.com/gravatar/b00f1ae99ee8c2e17dd68f97a696b308?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1191253", 
      "title": "flutter \u5f15\u5165 aar \u5305\uff0c\u8fd0\u884c\u62a5\u9519\uff0c\u7248\u672c 3.38.9", 
      "id": "https://www.v2ex.com/t/1191253", 
      "date_published": "2026-02-06T08:41:02+00:00", 
      "content_html": "* What went wrong:<br />Execution failed for task ':app:compileDebugKotlin'.<br />&gt; A failure occurred while executing org.jetbrains.kotlin.compilerRunner.GradleCompilerRunnerWithWorkers$GradleKotlinCompilerWorkAction<br />   &gt; Compilation error. See log for more details<br /><br />* Try:<br />&gt; Run with --stacktrace option to get the stack trace.<br />&gt; Run with --info or --debug option to get more log output.<br />&gt; Run with --scan to get full insights.<br />&gt; Get more help at <a target=\"_blank\" href=\"https://help.gradle.org\" rel=\"nofollow noopener\">https://help.gradle.org</a>.<br /><br />BUILD FAILED in 2m 42s<br />Running Gradle task 'assembleDebug'...                            163.2s<br />Error: Gradle task assembleDebug failed with exit code 1<br /><br />\u4e0d\u7ba1\u4f7f\u7528 java \uff0c\u6216\u8005 kotlin \u90fd\u662f\u663e\u793a\u5931\u8d25\uff0c\u7136\u540e\u627e\u4e0d\u5230 aar \u4f9d\u8d56\u3002\u800c\u4e14\u5728 android studio \u6253\u5f00\u6587\u4ef6\uff0c\u90fd\u662f\u663e\u793a import \u627e\u4e0d\u5230\u7684\u3002\u5982\u4f55\u89e3\u51b3\u3002"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/Oktfolio", 
        "name": "Oktfolio", 
        "avatar": "https://cdn.v2ex.com/avatar/f23f/09d0/281444_large.png?m=1745647526"
      }, 
      "url": "https://www.v2ex.com/t/1190810", 
      "title": "\u7528 Flutter \u505a\u4e86\u4e00\u4e2a Redis Desktop Manager", 
      "id": "https://www.v2ex.com/t/1190810", 
      "date_published": "2026-02-04T14:58:39+00:00", 
      "content_html": "<p>\u6316\u4e86\u5f88\u4e45\u7684\u5751\u7ec8\u4e8e\u586b\u4e0a\u4e86\uff0c\u76ee\u524d\u53ea\u5b9e\u73b0\u4e86\u8bfb\u3002</p>\n<p>\u987a\u4fbf\u8fd8\u505a\u4e86\u4e2a Dart \u7684 Redis Client</p>\n<p>\u8fd8\u6709\u5f88\u591a\u95ee\u9898\u6ca1\u89e3\u51b3\uff0c\u6682\u65f6\u4e0d\u53d1\u5e03</p>\n<p><img alt=\"BQACAgUAAyEGAASHRsPbAAEQsu9pg10VQydZszrwqvoCZA1isoG4zQACRSIAAuvVGVRnsD26_X1L_DgE.png\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://img.remit.ee/api/file/BQACAgUAAyEGAASHRsPbAAEQsu9pg10VQydZszrwqvoCZA1isoG4zQACRSIAAuvVGVRnsD26_X1L_DgE.png\"/></p>\n<p><img alt=\"BQACAgUAAyEGAASHRsPbAAEQsvdpg120HVNDyA8zwuJNuArinQUBWwACTiIAAuvVGVTGdZp2rpRFsTgE.png\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://img.remit.ee/api/file/BQACAgUAAyEGAASHRsPbAAEQsvdpg120HVNDyA8zwuJNuArinQUBWwACTiIAAuvVGVTGdZp2rpRFsTgE.png\"/></p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/wnpllrzodiac", 
        "name": "wnpllrzodiac", 
        "avatar": "https://cdn.v2ex.com/gravatar/84e41a23f65477d2c3c398dc13c8e053?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1187408", 
      "date_modified": "2026-01-24T03:15:17+00:00", 
      "content_html": "\u7528 vlc \u63d2\u4ef6\u5199\u4e2a\u64ad\u653e\u5668 android linux \u6ca1\u4e00\u4e2a\u80fd\u6b63\u5e38\u64ad\u653e\u51fa\u753b\u9762\u3002\u62a5\u4ec0\u4e48\u901a\u9053\u521b\u5efa\u9519\u8bef\u3002\u4e0d\u7ba1\u672c\u5730\uff0c\u7f51\u7edc\u6d41\u90fd\u62a5\u4e00\u4e2a\u9519\u3002<br /><br />\u8fd9\u751f\u6001\u73af\u5883\u592a\u6076\u52a3\u4e86\u5427\u3002ai ,google \u90fd\u4e0d\u80fd\u89e3\u51b3\u95ee\u9898<br /><br />\u5b9e\u5728\u662f\u592a\u96be\u641e\u4e86", 
      "date_published": "2026-01-21T10:25:20+00:00", 
      "title": "flutter \u751f\u6001\u8fd9\u4e48\u5dee\uff1f\u5199\u4e2a demo \u4e24\u5929\u90fd\u6ca1\u8c03\u901a", 
      "id": "https://www.v2ex.com/t/1187408"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/smithgoohappy", 
        "name": "smithgoohappy", 
        "avatar": "https://cdn.v2ex.com/avatar/6991/3d5e/679633_large.png?m=1767950677"
      }, 
      "url": "https://www.v2ex.com/t/1186300", 
      "title": "\u7531\u4e8e\u5f00\u53d1 flutter \u7136\u540e\u6d4b\u8bd5\u662f\u9ed1\u76d2\u6d4b\u8bd5\u53ea\u4f1a\u624b\u70b9,\u5f00\u53d1\u4e86\u4e2a\u63d2\u4ef6", 
      "id": "https://www.v2ex.com/t/1186300", 
      "date_published": "2026-01-16T09:56:44+00:00", 
      "content_html": "<p><a href=\"https://github.com/smithgoo/AutoTestingUI\" rel=\"nofollow\">https://github.com/smithgoo/AutoTestingUI</a><br/>\n\u5199\u4e86\u4e2a flutter \u5f00\u53d1\u5de5\u5177  \u5728 main \u4e2d\u521d\u59cb\u5316\u4e4b\u540e \u53ef\u4ee5\u81ea\u52a8\u6d4b\u8bd5 UI \u9875\u9762 \u6700\u7ec8\u6c47\u603b\u7684 bug \u4f1a\u5bfc\u51fa\u5230 txt  \u7136\u540e\u70b9\u51fb\u53ef\u4ee5\u76f4\u63a5\u62ff\u5230\u5177\u4f53\u5806\u6808\u4e86 \u76f4\u63a5\u7ed9 AI \u4fee\u6539 \u4e0d\u7528\u624b\u70b9\u4e86[\u5978\u7b11]</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/tianwaifeixian", 
        "name": "tianwaifeixian", 
        "avatar": "https://cdn.v2ex.com/gravatar/ed61bcc8cefc209e0792ec15f748acc9?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1180288", 
      "date_modified": "2025-12-21T16:30:59+00:00", 
      "content_html": "\u516c\u53f8\u8981\u4ece 0-1 \u8fdb\u884c\u4e00\u4e2a app \u5f00\u53d1\uff0c\u51c6\u5907\u4f7f\u7528 flutter \u5f00\u53d1\uff0c\u4e0d\u592a\u719f\u6089 flutter,\u7f51\u4e0a\u67e5\u4e86\u4e00\u4e9b\u8d44\u6599\uff0c\u57fa\u672c\u90fd\u662f\u4ee5\u4e0b\u4e24\u79cd\u65b9\u6848\uff0c\u66f4\u63a8\u8350\u65b9\u6848 2 \u3002\u8bf7\u5927\u4f6c\u4eec\u5e2e\u5fd9\u770b\u4e0b\uff0c\u4f7f\u7528\u4e0b\u9762\u90a3\u79cd\u67b6\u6784\u66f4\u597d\u4e9b\uff0c\u90fd\u6709\u5565\u5751\u6ca1\uff0c\u611f\u8c22<br />1.\u4f7f\u7528 flutter \u8fdb\u884c\u9879\u76ee\u642d\u5efa\uff0c\u5185\u5d4c Android \u548c iOS \u5de5\u7a0b<br />2.\u5c06 flutter \u5de5\u7a0b\u4f5c\u4e3a\u539f\u751f\u5de5\u7a0b\u5171\u7528\u7684\u5b50\u6a21\u5757\uff0c\u7531\u539f\u751f\u5de5\u7a0b\u5404\u81ea\u7ba1\u7406\u7684\u4e09\u7aef\u5de5\u7a0b\u5206\u79bb\u6a21\u5f0f", 
      "date_published": "2025-12-21T16:30:37+00:00", 
      "title": "\u6c42\u52a9\uff0c flutter \u9879\u76ee\u6df7\u5408\u5f0f\u642d\u5efa\u95ee\u9898", 
      "id": "https://www.v2ex.com/t/1180288"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/hanggoing", 
        "name": "hanggoing", 
        "avatar": "https://cdn.v2ex.com/avatar/1ed0/dbb3/670380_large.png?m=1755484922"
      }, 
      "url": "https://www.v2ex.com/t/1177523", 
      "date_modified": "2025-12-08T04:40:23+00:00", 
      "content_html": "<p>\u6700\u8fd1\u7528 AI \u5f00\u53d1\u4e86\u4e00\u4e2a flutter \u7684\u7b14\u8bb0\u8f6f\u4ef6\uff0c\u7b14\u8bb0\u5185\u5bb9\u5e03\u5c40\u7c7b\u4f3c\u5fae\u535a\u90a3\u79cd\u4fe1\u606f\u6d41\uff0c\u4e00\u5f00\u59cb\uff0c\u6570\u636e\u8f83\u5c11\u65f6\uff0c\u8fd8\u662f\u6bd4\u8f83\u6d41\u7545\u7684\uff0c\u4f46\u662f\u4e00\u65e6\u7b14\u8bb0\u6570\u91cf\u589e\u52a0\uff0c\u6bd4\u5982\u6570\u91cf 1000+\uff0c\u5728\u4e3b\u9875\u6ed1\u52a8\uff0c\u5c31\u4f1a\u53d8\u5f97\u6389\u5e27\uff0c\u751a\u81f3\u6709\u70b9\u5361\u5361\u7684\uff0c\u4e0d\u8ddf\u624b\u3002\n\u8ba9 AI \u4f18\u5316\u4e86\u4e00\u5929\uff0c\u90fd\u6ca1\u4f18\u5316\u597d\uff0c\u6c42\u52a9\u5404\u4f4d\u5927\u795e\uff0c\u8fd9\u91cc\u9762\u6709\u4ec0\u4e48\u8bc0\u7a8d\u5417\u3002</p>\n", 
      "date_published": "2025-12-08T03:11:39+00:00", 
      "title": "\u6c42\u52a9\u5927\u795e\uff0c\u4e3a\u4ec0\u4e48\u7528 flutter \u5f00\u53d1\u7684\u5b89\u5353\u7b14\u8bb0\u8f6f\u4ef6\u5361\u987f\u3001\u6389\u5e27", 
      "id": "https://www.v2ex.com/t/1177523"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/ybz", 
        "name": "ybz", 
        "avatar": "https://cdn.v2ex.com/avatar/70c6/14d6/217134_large.png?m=1764655228"
      }, 
      "url": "https://www.v2ex.com/t/1176383", 
      "title": "\u5199\u4e86\u4e00\u4e2a flutter \u7684\u72b6\u6001\u7ba1\u7406\u5e93\uff0c\u5927\u5bb6\u53c2\u8c0b\u53c2\u8c0b\u3002", 
      "id": "https://www.v2ex.com/t/1176383", 
      "date_published": "2025-12-02T06:15:56+00:00", 
      "content_html": "<p><a href=\"https://github.com/yiiim/flutter_mvc\" rel=\"nofollow\">https://github.com/yiiim/flutter_mvc</a></p>\n<p>flutter \u72b6\u6001\u7ba1\u7406\u5e93\u50cf Bloc \u3001riverpod \u3001provide \u3002\u4f3c\u4e4e\u4e00\u76f4\u88ab\u8fd9\u51e0\u4e2a\u5e93\u7edf\u6cbb\u7740\uff0cgetx \u60ca\u9e3f\u4e00\u77a5\uff0c\u4ec0\u4e48\u90fd\u60f3\u505a\uff0c\u7ed3\u679c\u4ec0\u4e48\u90fd\u505a\u4e0d\u597d\uff0c5.0 \u96be\u4ea7\u3002</p>\n<p>\u53d1\u4e86 Reddit \uff0c\u88ab\u5410\u69fd\u4e86\uff0c\u597d\u50cf\u5927\u5bb6\u90fd\u5df2\u7ecf\u89c1\u8fc7\u592a\u591a\u5e93\u4e86\uff0c\u53ef\u662f\u6211\u81ea\u5df1\u7528\u4e0b\u6765\u786e\u5b9e\u633a\u597d\u7528\u7684\u554a\u3002</p>\n<p><a href=\"https://www.reddit.com/r/FlutterDev/comments/1pbev5j/ive_created_an_amazing_flutter_state_management/\" rel=\"nofollow\">https://www.reddit.com/r/FlutterDev/comments/1pbev5j/ive_created_an_amazing_flutter_state_management/</a></p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/KunpengTalk", 
        "name": "KunpengTalk", 
        "avatar": "https://cdn.v2ex.com/gravatar/7fbb18491ca7c5c4df8b9ef68779f59b?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1173262", 
      "date_modified": "2025-11-17T09:36:52+00:00", 
      "content_html": "<p><a href=\"https://github.com/jwangkun/zhuque-flutter\" rel=\"nofollow\">https://github.com/jwangkun/zhuque-flutter</a>\n\u6731\u96c0 UI Flutter \u662f\u4e00\u4e2a\u57fa\u4e8e\u817e\u8baf TDesign Flutter \u7ec4\u4ef6\u5e93\u7684\u73b0\u4ee3\u79fb\u52a8\u5e94\u7528\u6f14\u793a\u9879\u76ee\u3002\u9879\u76ee\u5c55\u793a\u4e86\u5982\u4f55\u4f7f\u7528 Flutter \u6784\u5efa\u7f8e\u89c2\u3001\u54cd\u5e94\u5f0f\u7684\u7528\u6237\u754c\u9762\uff0c\u5e76\u96c6\u6210\u4e86\u72b6\u6001\u7ba1\u7406\u3001\u8def\u7531\u7ba1\u7406\u548c\u5c4f\u5e55\u9002\u914d\u7b49\u6700\u4f73\u5b9e\u8df5\n\u622a\u51e0\u5f20\u56fe\u5206\u4eab\u4e00\u4e0b\n<a href=\"https://imgloc.com/image/CfaPj1\" rel=\"nofollow\">https://imgloc.com/image/CfaPj1</a>\n<a href=\"https://imgloc.com/image/CfaDGb\" rel=\"nofollow\">https://imgloc.com/image/CfaDGb</a>\n<a href=\"https://imgloc.com/image/CfaQ6n\" rel=\"nofollow\">https://imgloc.com/image/CfaQ6n</a>\n<a href=\"https://imgloc.com/image/CfaWlL\" rel=\"nofollow\">https://imgloc.com/image/CfaWlL</a></p>\n", 
      "date_published": "2025-11-17T05:21:50+00:00", 
      "title": "\u5f00\u6e90\u4e00\u5957 flutter UI \u7ec4\u4ef6\u5e93\uff0c\u65b9\u4fbf\u5404\u4f4d\u5927\u4f6c\u5feb\u901f\u8fdb\u884c\u8de8\u5e73\u53f0\u5f00\u53d1\uff0c\u6b22\u8fce\u5404\u4f4d\u5927\u4f6c start", 
      "id": "https://www.v2ex.com/t/1173262"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/hubianluanma", 
        "name": "hubianluanma", 
        "avatar": "https://cdn.v2ex.com/avatar/3a2f/2db0/736843_large.png?m=1750909443"
      }, 
      "url": "https://www.v2ex.com/t/1168823", 
      "date_modified": "2025-10-28T02:52:22+00:00", 
      "content_html": "<p>\u672c\u4eba\u6280\u672f\u6808\u60c5\u51b5\uff1a</p>\n<ul>\n<li>\u670d\u52a1\u7aef\uff1aJava \u3001Python \u3001Node</li>\n<li>web \u7aef\uff1aVue \uff08\u719f\u6089\uff09\u3001React \uff08\u65b0\u624b\u9636\u6bb5\uff09</li>\n<li>\u5176\u4ed6\uff1a\u5fae\u4fe1\u5c0f\u7a0b\u5e8f</li>\n</ul>\n<p>\u6700\u8fd1\u770b\u4e86\u51e0\u4e2a\u611f\u5174\u8da3\u7684\u9879\u76ee\u90fd\u662f flutter \u5f00\u53d1\u7684\uff0c\u4eca\u5929\u628a\u73af\u5883\u7b80\u5355\u7684\u642d\u5efa\u4e86\u4e00\u4e0b\uff0c\u60f3\u95ee\u95ee\u6709\u7ecf\u9a8c\u7684\u5927\u4f6c\uff0c\u5b83\u7684\u5b66\u4e60\u66f2\u7ebf\u9ad8\u5417\uff1f\u6709\u6ca1\u6709\u4ec0\u4e48\u503c\u5f97\u6ce8\u610f\u7684\u5751\uff1f</p>\n<p>\u63d0\u524d\u611f\u8c22\uff01\uff01\uff01</p>\n", 
      "date_published": "2025-10-28T02:01:13+00:00", 
      "title": "Flutter \u7684\u5b66\u4e60\u66f2\u7ebf\u9ad8\u5417\uff1f\u5bf9\u4e8e\u4e2a\u4eba\u5f00\u53d1\u8005\u6765\u8bf4\u662f\u5426\u503c\u5f97", 
      "id": "https://www.v2ex.com/t/1168823"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/sealoyal", 
        "name": "sealoyal", 
        "avatar": "https://cdn.v2ex.com/avatar/f0e6/54e2/664067_large.png?m=1761571685"
      }, 
      "url": "https://www.v2ex.com/t/1168752", 
      "date_modified": "2025-10-27T13:33:39+00:00", 
      "content_html": "<p>\u95f2\u7740\u6ca1\u4e8b\u5f00\u53d1\u4e00\u6b3e\u7f51\u6587\u5199\u4f5c\u5e94\u7528\u2014\u2014 Letter Studio \u3002</p>\n<p>\u4f7f\u7528 <code>Flutter</code> \u5f00\u53d1\u7684\uff08\u53c8\u589e\u52a0\u4e86\u4e00\u4e2a\u65b0\u6280\u80fd\uff09\uff0c\u53ef\u4ee5\u5728 <code>windows</code>\uff08 <code>Mac</code> \u4e0a\u8fd8\u6ca1\u53d1\u5e03\ud83d\ude02) \u4e0a\u4f7f\u7528\u3002</p>\n<p>\u4e3b\u8981\u662f\u672c\u5730\u4f7f\u7528\uff0c\u6570\u636e\u5b58\u5728\u672c\u5730\u3002</p>\n<p>\u529f\u80fd\u5c31\u662f\u7f51\u6587\u521b\u4f5c\u7801\u5b57\uff0c\u8fd8\u6709\u4e00\u4e9b\u5c0f\u529f\u80fd\uff0c\u6bd4\u5982\u4e00\u952e\u6392\u7248\u3001\u5386\u53f2\u7248\u672c\u3001\u6570\u636e\u7edf\u8ba1\u7b49\u8f85\u52a9\u521b\u4f5c\u529f\u80fd\u3002</p>\n<p>\u540e\u7eed\u4f1a\u589e\u52a0\u4e00\u4e9b\u5176\u4ed6\u7684\u8f85\u52a9\u529f\u80fd\uff0c\u6bd4\u5982\u8ba1\u5212\u5185\u7684\u654f\u611f\u8bcd\u68c0\u6d4b\u3001\u89d2\u8272\u7b49\u5176\u4ed6\u8bbe\u5b9a\u3002</p>\n<p>\u539f\u672c\u6253\u7b97\u4f7f\u7528 <code>Avalonia</code> \u5199\u7684\uff0c\u4f46\u662f\u51fa\u4e8e\u751f\u6001\u95ee\u9898\uff0c\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4e86 <code>Flutter</code> \uff0c\u76ee\u524d\u4f7f\u7528\u8fd8\u6ca1\u6709\u9047\u5230\u4ec0\u4e48\u95ee\u9898\u3002</p>\n<p>\u6b22\u8fce\u5927\u5bb6\u4e0b\u8f7d\u4ea4\u6d41\uff01\uff08\u4e0b\u8f7d\u5730\u5740\u5728\u6587\u672b\uff09</p>\n<p><img alt=\"\u5199\u4f5c\u9875\u9762\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://z.wiki/u/Y7i0JD\"/></p>\n<p><img alt=\"\u7edf\u8ba1\u9875\u9762\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://z.wiki/u/MgDzVB\"/></p>\n<p><img alt=\"\u5386\u53f2\u7248\u672c\u9875\u9762\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://z.wiki/u/WwXOo3\"/></p>\n<p>\u8f6f\u4ef6\u4e0b\u8f7d\u5730\u5740\uff1a<a href=\"https://gitee.com/sealoyal/test/releases/download/v0.1.0-alpha/letter%20studio.0.1.0.zip\" rel=\"nofollow\">letter studio</a></p>\n", 
      "date_published": "2025-10-27T13:28:13+00:00", 
      "title": "\u95f2\u7740\u6ca1\u4e8b\u5f00\u53d1\u4e00\u6b3e\u7f51\u6587\u5199\u4f5c\u5e94\u7528\u2014\u2014 Letter Studio", 
      "id": "https://www.v2ex.com/t/1168752"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/MadridLee", 
        "name": "MadridLee", 
        "avatar": "https://cdn.v2ex.com/gravatar/ee641585784cecb1c8f4804e7943b270?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1166574", 
      "date_modified": "2025-10-18T02:34:01+00:00", 
      "content_html": "<p>\u524d\u63d0\u6761\u4ef6\uff1a\u6211\u9879\u76ee\u4f7f\u7528 flutter \u505a\u4e86 windows \u5ba2\u6237\u7aef\uff0c\u7248\u672c 3.24.3 \u3002</p>\n<p>\u76ee\u524d\u95ee\u9898\uff1a\u5f53\u6211\u7684\u5ba2\u6237\u7aef\u8fd0\u884c\u5728\u540e\u53f0\uff0c\u6b64\u65f6\u7535\u8111\u8fd0\u884c\u9ad8 cpu \u548c GPU \u5360\u7528\u7684\u6e38\u620f\uff0c\u5982\u6218\u4e89\u96f7\u9706\u3002\n\u6e38\u620f\u7ed3\u675f\u540e\u91cd\u65b0\u6253\u5f00\uff08\u4ece\u4efb\u52a1\u680f\u6062\u590d\u5230\u9875\u9762\uff09 flutter \u5ba2\u6237\u7aef\uff0c\u6709\u6982\u7387\u51fa\u73b0\u767d\u5c4f/\u754c\u9762\u900f\u660e\u73b0\u8c61\u3002\u6b64\u65f6 flutter \u5ba2\u6237\u7aef cpu \u5c11\u91cf\u5360\u7528\uff0cgpu \u5360\u7528 0%\u3002</p>\n<p>\u6709\u5927\u4f6c\u77e5\u9053\u8fd9\u4e2a\u73b0\u8c61\u662f\u4e3a\u4ec0\u4e48\u5417\uff1f\u4ece\u4ec0\u4e48\u89d2\u5ea6\u51fa\u53d1\u89e3\u51b3\u8fd9\u4e2a\u95ee\u9898\uff1f</p>\n", 
      "date_published": "2025-10-18T02:32:49+00:00", 
      "title": "\u8bf7\u6559 flutter-windows \u5ba2\u6237\u7aef\u767d\u5c4f\u95ee\u9898\u3002", 
      "id": "https://www.v2ex.com/t/1166574"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/lumyx", 
        "name": "lumyx", 
        "avatar": "https://cdn.v2ex.com/gravatar/4c74917e5d700699cf6620b4b00f25b9?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1164675", 
      "date_modified": "2025-10-12T11:57:44+00:00", 
      "content_html": "<p>\u88ab riverpod \u7e41\u7410\u548c\u4fb5\u5165\u5f0f\u7684\u4f7f\u7528\u65b9\u5f0f\u56f0\u6270\u8bb8\u4e45\u540e\uff0c\u81ea\u5df1\u91cd\u65b0\u9020\u4e86\u4e2a\u8f6e\u5b50\u3002\n<a href=\"https://pub.dev/packages/view_model\" rel=\"nofollow\">https://pub.dev/packages/view_model</a></p>\n<p>\u4f18\u70b9\u662f\u4f7f\u7528\u7b80\u5355, \u975e\u5e38\u7eaf\u7cb9\uff0c \u53ea\u662f <code>view_model</code> \u6ca1\u6709\u5176\u4ed6\u82b1\u91cc\u82b1\u54e8\u7684\u6982\u5ff5\u3002</p>\n<pre><code class=\"language-dart\">import 'package:view_model/view_model.dart';\nimport 'package:flutter/foundation.dart'; // For debugPrint\n\nclass MySimpleViewModel extends ViewModel {\n  String _message = \"Initial Message\";\n  int _counter = 0;\n\n  String get message =&gt; _message;\n\n  int get counter =&gt; _counter;\n\n  void updateMessage(String newMessage) {\n    _message = newMessage;\n    notifyListeners(); // \u901a\u77e5\u76d1\u542c\u8005\u6570\u636e\u5df2\u66f4\u65b0\n  }\n\n  void incrementCounter() {\n    _counter++;\n    notifyListeners(); // \u901a\u77e5\u76d1\u542c\u8005\u6570\u636e\u5df2\u66f4\u65b0\n  }\n\n  @override\n  void dispose() {\n    // \u5728\u6b64\u6e05\u7406\u8d44\u6e90\uff0c\u4f8b\u5982\u5173\u95ed StreamControllers \u7b49\n    debugPrint('MySimpleViewModel disposed');\n    super.dispose();\n  }\n}\n\n\n\n</code></pre>\n<p>ViewModelFactory \u8d1f\u8d23\u5b9e\u4f8b\u5316 ViewModel \u3002\u6bcf\u4e2a ViewModel \u7c7b\u578b\u901a\u5e38 \u9700\u8981\u4e00\u4e2a\u5bf9\u5e94\u7684 Factory \u3002</p>\n<pre><code class=\"language-dart\">import 'package:view_model/view_model.dart';\n// \u5047\u8bbe MySimpleViewModel \u5df2\u5982\u4e0a\u5b9a\u4e49\n\nclass MySimpleViewModelFactory with ViewModelFactory&lt;MySimpleViewModel&gt; {\n  @override\n  MySimpleViewModel build() {\n    // \u8fd4\u56de\u4e00\u4e2a\u65b0\u7684 MySimpleViewModel \u5b9e\u4f8b\n    return MySimpleViewModel();\n  }\n}\n</code></pre>\n<p>\u901a\u8fc7 <code>watchViewModel</code> \u76f4\u63a5\u5728 State \u4e2d\u4f7f\u7528.</p>\n<pre><code>class _MyPageState extends State&lt;MyPage&gt;\n    with ViewModelStateMixin&lt;MyPage&gt; {\n  // 1. \u6df7\u5165 Mixin\n\n  late final MySimpleViewModel simpleVM;\n\n  @override\n  void initState() {\n    super.initState();\n    // 2. \u5728 initState \u4e2d\u83b7\u53d6 ViewModel\n    // \u5f53 MyPage \u7b2c\u4e00\u6b21\u6784\u5efa\u65f6\uff0cMySimpleViewModelFactory \u7684 build() \u65b9\u6cd5\u4f1a\u88ab\u8c03\u7528\u6765\u521b\u5efa\u5b9e\u4f8b\u3002\n    // \u5f53 MyPage \u88ab\u9500\u6bc1\u65f6\uff0c\u5982\u679c\u6b64 viewModel \u6ca1\u6709\u5176\u4ed6\u76d1\u542c\u8005\uff0c\u5b83\u4e5f\u4f1a\u88ab\u9500\u6bc1\u3002\n    simpleVM =\n        watchViewModel&lt;MySimpleViewModel&gt;(factory: MySimpleViewModelFactory());\n  }\n  \n  \n    @override\n  Widget build(BuildContext context) {\n  \t// \u76f4\u63a5\u4f7f\u7528. simpleVM \u6570\u636e\u66f4\u65b0\u540e\uff0c\u4f1a\u81ea\u52a8 setState\n    Tetx(simpleVM.xxx);\n  }\n</code></pre>\n<p>\u7f3a\u70b9\u662f\u6ca1\u6709\u9897\u7c92\u5ea6\u66f4\u65b0\uff0c\u4f46\u6211\u8ba4\u4e3a\u8fd9\u5176\u5b9e\u4e0d\u7b97\u7f3a\u70b9\uff0c\u8fd9\u4e0d\u662f\u72b6\u6001\u7ba1\u7406\u8be5\u505a\u7684\u4e8b\uff0c\u4f46 riverpod bloc signal \u4f3c\u4e4e\u90fd\u5bf9\u8fd9\u4e2a\u5f88\u5728\u610f\uff0cWidget \u672c\u8eab\u7684 diff \u5df2\u7ecf\u8db3\u591f\u9ad8\u6548, \u5c31\u7b97\u6bcf\u79d2 setState \u5bf9\u5e27\u7387\u7684\u5f71\u54cd\u4e5f\u5fae\u4e4e\u5176\u5fae\uff0c\u56e0\u4e3a\u5e95\u5c42\u7684 Render \u6ca1\u53d8\uff0cWidget \u53ea\u662f\u914d\u7f6e\u800c\u5df2\u3002 \u5982\u679c\u4f60\u771f\u7684\u9700\u8981\u9891\u7e41\u66f4\u65b0\u67d0\u4e2a \u5c40\u90e8 Widget \uff0c\u90a3\u4f60\u5e94\u8be5\u4f7f\u7528 <code>ValueNotitifierBuilder</code> : <a href=\"https://github.com/lwj1994/flutter_view_model/issues/13\" rel=\"nofollow\">https://github.com/lwj1994/flutter_view_model/issues/13</a></p>\n<p>\u5b8c\u6574\u7684\u6587\u6863\uff1a <a href=\"https://github.com/lwj1994/flutter_view_model/blob/main/packages/view_model/README_ZH.md\" rel=\"nofollow\">https://github.com/lwj1994/flutter_view_model/blob/main/packages/view_model/README_ZH.md</a></p>\n", 
      "date_published": "2025-10-12T11:57:31+00:00", 
      "title": "\u6700\u7b80\u5355\u7684\u72b6\u6001\u7ba1\u7406\u5e93 view_model", 
      "id": "https://www.v2ex.com/t/1164675"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/dnslint", 
        "name": "dnslint", 
        "avatar": "https://cdn.v2ex.com/gravatar/4bc11af8c4258d719e67990f14e23bab?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1162957", 
      "date_modified": "2025-09-30T10:14:13+00:00", 
      "content_html": "<h1>flutter_native_splash</h1>\n<p>\u8fd9\u4e2a\u5e93\u53ef\u4ee5\u66ff\u6362 flutter \u9ed8\u8ba4\u7684\u5f00\u5c4f LOGO \uff0c\u4f46\u662f\u6211\u4e0d\u7ba1\u7528 1024x1024 \u8fd8\u662f 512x512 \uff0c1242x2436 \uff0c128x128</p>\n<p>\u4e0d\u662f\u622a\u65ad\u5c31\u4f1a\u6324\u5728\u4e00\u8d77\uff0c\u5e73\u53f0\u662f\u5b89\u5353 12 </p>\n<p><a href=\"https://youke1.picui.cn/s1/2025/09/30/68dbaccbb09f3.jpg\" rel=\"nofollow\"><img alt=\"1759227106422.jpg\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://youke1.picui.cn/s1/2025/09/30/68dbaccbb09f3.jpg\"/></a>\n<a href=\"https://youke1.picui.cn/s1/2025/09/30/68dbaccc3b825.jpg\" rel=\"nofollow\"><img alt=\"1759227110566.jpg\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://youke1.picui.cn/s1/2025/09/30/68dbaccc3b825.jpg\"/></a></p>\n<pre><code class=\"language-yaml\">flutter_native_splash:\n  color: \"#FFFEF7\"\n\n  # \u542f\u52a8\u753b\u9762\u4e2d\u5fc3\u56fe\u7247\n  image: assets/logo.png\n\n\n  # Android 12\n  android_12:\n    image: assets/logo.png\n\n  # \u5e73\u53f0\u5f00\u5173(\u4ec5\u4e3a Android \u751f\u6210)\n  android: true\n  ios: false\n  web: false\n</code></pre>\n", 
      "date_published": "2025-09-30T10:13:19+00:00", 
      "title": "\u7b2c\u4e00\u6b21\u5199 flutter app \u6709\u4e2a\u7591\u95ee", 
      "id": "https://www.v2ex.com/t/1162957"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/burden7", 
        "name": "burden7", 
        "avatar": "https://cdn.v2ex.com/avatar/4920/a5db/591875_large.png?m=1699697081"
      }, 
      "url": "https://www.v2ex.com/t/1150134", 
      "title": "Flutter in_app_purchase \u5185\u8d2d\u5728 iOS \u4e0a\u7684\u5e94\u7528\u603b\u7ed3", 
      "id": "https://www.v2ex.com/t/1150134", 
      "date_published": "2025-08-05T08:34:33+00:00", 
      "content_html": "<p>\u524d\u4e00\u6bb5\u65f6\u95f4\u5728 Flutter \u5e94\u7528\u63a5\u5165 apple \u5185\u8d2d\u65f6\u9047\u5230\u4e86\u4e00\u4e9b\u95ee\u9898\uff0c\u76ee\u524d\u641e\u6e05\u695a\u4e86\u5927\u6982\uff0c\u5728\u8fd9\u91cc\u7b80\u5355\u603b\u7ed3\u8bb0\u5f55\u4e0b\uff0c\u5e0c\u671b\u5e2e\u52a9\u5176\u4ed6 V \u53cb\u5c11\u9677\u5165\u70b9\u56f0\u60d1\uff0c\u4ee5\u4e0b\u603b\u7ed3\u53ef\u80fd\u4ecd\u6709\u9519\u8bef\u7684\u5730\u65b9\uff0c\u82e5\u6709\u53d1\u73b0\uff0c\u6b22\u8fce\u6307\u51fa\u3002</p>\n<p>Apple \u7684\u5185\u8d2d\u673a\u5236\u5b58\u5728\u4e24\u4e2a\u7248\u672c\uff1a<code>StoreKit V1</code> \u548c<code>StoreKit V2</code></p>\n<h1>\u6536\u636e &amp; server api \u533a\u522b</h1>\n<p>\u8fd9\u4e24\u4e2a\u7248\u672c\u5bf9\u4e8e\u6211\u76ee\u524d\u53ef\u77e5\u7684\u5f71\u54cd\u662f\uff0c\u7528\u6237\u8d2d\u4e70\u4e4b\u540e\u4ee3\u7801\u4e2d\u62ff\u5230\u7684\u5f85\u9a8c\u8bc1\u6536\u636e\u4fe1\u606f\u7684\u683c\u5f0f\u4e0d\u540c\u3002\u5982\u679c\u662f V1 \u7248\u672c\uff0c\u5219\u8fd4\u56de\u7684\u662f base64 \u5b57\u7b26\u4e32\uff0c\u8bf7\u6c42 server api \uff0c\u83b7\u53d6\u5230\u5168\u90e8\u4ea4\u6613\u4fe1\u606f\u5982\u679c\u662f V2 \u7248\u672c\uff0c\u8fd4\u56de\u7684\u662f JWT \u683c\u5f0f\uff08\u53ef\u4ee5\u89e3\u6790\u83b7\u53d6\u5230\u539f\u59cb payload \uff0c\u91cc\u9762\u4f1a\u6709\u4ea4\u6613\u4fe1\u606f\uff09\uff0c\u8bf7\u6c42 server api \u83b7\u53d6\u5230\u5386\u53f2\u4fe1\u606f\u6216\u672c\u6b21\u4ea4\u6613\u4fe1\u606f\uff1b</p>\n<p>\u5173\u4e8e\u8bf7\u6c42\u540e\u83b7\u53d6\u5230\u7684\u4ea4\u6613\u4fe1\u606f\uff0cV1 V2 \u4e5f\u6709\u4e0d\u540c\uff1a</p>\n<p>V1 \u7248\u672c\uff1a\u8c03\u7528 verify \u63a5\u53e3\uff0c\u8fd4\u56de\u7684\u4ea4\u6613\u4fe1\u606f\u662f\u6240\u6709\u4ea4\u6613\u4fe1\u606f\uff0c\u5305\u542b\u6240\u6709\u65f6\u95f4\u6bb5\u5185\u7684\u8ba2\u9605\u3001\u4e00\u6b21\u6027\u8d2d\u4e70\u4fe1\u606f</p>\n<p>V2 \u7248\u672c\uff1a\u82e5\u8c03\u7528<code>inApps/v1/verifyTransaction</code>\u53ef\u83b7\u5f97\u672c\u6b21\u7684\u4ea4\u6613\u4fe1\u606f\uff1b\u82e5\u8c03\u7528<code>inApps/v2/history</code>\uff08\u9700\u8981\u4f20\u5165\u539f\u59cb\u4ea4\u6613 id - originalTransactionId \uff09\uff0c\u5219\u6839\u636e\u8fd9\u4e2a\u539f\u59cb id \u83b7\u5f97\u6240\u6709\u7eed\u8ba2\u3001\u5347\u7ea7\u3001\u9000\u8ba2\u8bb0\u5f55\uff0c\u53e6\u5916\u8fd9\u662f\u4e00\u4e2a\u5206\u9875\u63a5\u53e3\uff0c\u4f60\u53ef\u4ee5\u4f20\u5165 revision \u6e38\u6807\u53c2\u6570\u6765\u83b7\u53d6\u5206\u9875\u4fe1\u606f</p>\n<h1>\u7528\u6237\u5728\u4f60\u7684 App \u4e2d\u8ba2\u9605\u540e\uff0c\u5230\u4e86\u4e0b\u4e00\u4e2a\u5468\u671f\u5185\u4f60\u5982\u4f55\u5224\u65ad\u7528\u6237\u662f\u5426\u5df2\u7eed\u671f</h1>\n<p>\u6b64\u90e8\u5206\u4e5f\u6709\u4e0d\u540c\u7684\u89e3\u51b3\u65b9\u6848\uff1a</p>\n<ol>\n<li>\u4f60\u53ef\u4ee5\u5728 APP \u6bcf\u6b21\u542f\u52a8\u65f6\u6216\u4f60\u7684\u670d\u52a1\u7aef\u6bcf\u5929\u8f6e\u8be2\u4e00\u6b21\uff0c\u53bb\u4f7f\u7528\u4ee5\u4e0a\u7684\u63a5\u53e3\u53bb\u83b7\u53d6\u5b9e\u65f6\u7684 expiresDate \uff08\u8fc7\u671f\u65f6\u95f4\uff09</li>\n<li>\u4f7f\u7528 App Store Server Notifications \uff08 apple \u63a8\u8350\uff09\uff0c\u4f60\u53ef\u4ee5\u5728 appstore connect \u4e2d\u8bbe\u7f6e\u4e00\u4e2a\u4f60\u670d\u52a1\u7aef\u7684 hook \u63a5\u53e3\uff0c\u5f53\u51fa\u73b0\u4e86\u7eed\u8ba2\u3001\u9000\u8ba2\u3001\u9000\u6b3e\u7b49\u60c5\u51b5\u65f6\uff0c\u4f60\u7684\u63a5\u53e3\u4f1a\u6536\u5230\u4e00\u4e2a POST \u8bf7\u6c42\uff0c\u91cc\u9762\u662f\u4e00\u4e2a json \u5b57\u7b26\u4e32\uff0c\u5176\u4e2d\u5305\u542b\u4e00\u4e2a JWT \u5b57\u7b26\u4e32\uff0c\u4f60\u53ef\u4ee5\u901a\u8fc7\u89e3\u6790\u7136\u540e\u83b7\u5f97\u672c\u6b21\u901a\u77e5\u7684\u4ea4\u6613\u4fe1\u606f</li>\n</ol>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/TieYu", 
        "name": "TieYu", 
        "avatar": "https://cdn.v2ex.com/avatar/fc9e/ab41/53468_large.png?m=1762570815"
      }, 
      "url": "https://www.v2ex.com/t/1145747", 
      "date_modified": "2025-07-17T23:51:09+00:00", 
      "content_html": "<p>\u5728 Flutter \u51fa\u6765\u4e4b\u524d<br/>\n\u79fb\u52a8\u7aef\u7684\u8de8\u5e73\u53f0\u9886\u57df\u7684\u9738\u4e3b\u5c31\u662f Hybrid \uff08\u6df7\u7f16\uff09\nfacebook \u65e9\u671f\u4e5f\u662f\u76f4\u63a5\u7528\u4e86 Hybrid \uff0c\u4e4b\u540e\u7531\u4e8e\u6d4f\u89c8\u5668\u6027\u80fd\u95ee\u9898\uff0c\u6539\u4e3a React Native\nReact Native \u4e5f\u662f\u4e0d\u5b8c\u7f8e\u7684\uff0c\u5b58\u5728\u5f02\u6b65\u901a\u4fe1\u95ee\u9898  </p>\n<p>\u5927\u5982\u6dd8\u5b9d\uff08 weex \uff09\uff0c\u5c0f\u5982\u67d0\u4e2a app \u90fd\u5728\u4f7f\u7528 Hybrid  </p>\n<p>Hybrid \u662f\u786e\u5b9e\u52a0\u901f\u4e86\u4ea7\u54c1\u7684\u53d1\u5e03\uff0c\u4f46\u662f\u4e0d\u80fd\u6db5\u76d6\u6240\u6709\u7c7b\u578b\u7684 app \uff0c\u6bd4\u5982\uff1a\u6e38\u620f  </p>\n<p>\u968f\u7740\u975e\u6e38\u620f\u7c7b app \u7684\u8d8a\u6765\u8d8a\u590d\u6742\uff0c\u4ed6\u4eec\u4e5f\u5f00\u59cb\u8feb\u5207\u9700\u8981\u4e00\u4e2a\u6ed1\u52a8\u6d41\u7545\u7684 app \u6846\u67b6\uff0c\u5207\u540e\u53f0\u540e\u4e0d\u4f1a\u5047\u6b7b\u7684\u6846\u67b6\u3002\n\u671f\u95f4\u6709\u4e9b\u516c\u53f8\u81f4\u529b\u4e8e\u7f16\u8bd1\u4f18\u5316 js \uff0c\u4f8b\u5982\uff1aapicloud \uff0c\u6dd8\u5b9d\u7684 weex </p>\n<p>\u800c\u6b63\u5982 facebook \u5f53\u65f6\u9047\u5230\u7684\uff0cHybrid \u662f\u6210\u529f\u7684\uff0c\u4f46\u662f\u6027\u80fd\u4e00\u76f4\u662f\u4e2a\u95ee\u9898\uff0c\u5e76\u4e14 W3C \u4e00\u76f4\u4ee5 B/S \u7684\u89c6\u89d2\u7ea6\u675f\u7740 webview \u7684\u6743\u9650  </p>\n<p>\u53ea\u8981\u5728\u6d4f\u89c8\u5668\u7684\u6846\u6846\u5185\uff0c\u6211\u4eec\u4e0d\u53ef\u80fd\u9020\u51fa\u65f6\u901f 100 \u7801\u7684\u8f7f\u5b50\uff0c\u6211\u4eec\u9700\u8981\u6539\u53d8\u601d\u8def\uff0c\u6211\u4eec\u8981\u5185\u71c3\u673a\u6c7d\u8f66</p>\n<p>Flutter \u5438\u6536 Hybrid \u4f18\u70b9\uff0c\u6765\u7838 Hybrid \u7684\u573a\u5b50\u4e86\uff0c \u4ed6\u65e0\u610f\u63a8\u7ffb W3C \u7684\u6cd5\u6848\uff0c\u4ee5 Hybrid \u7684\u601d\u7ef4\uff08\u5bb9\u5668+\u7edf\u4e00\u5316\u7684\u811a\u672c\uff09\u4e3a\u5730\u57fa\uff0c\u62c9\u5347\u6e32\u67d3\u80fd\u529b\uff0c\u63d0\u5347\u811a\u672c\u6743\u9650\u3002</p>\n<p>Skia \u5f15\u64ce\u52a0\u6301\uff0c\u975e\u539f\u751f\u6e32\u67d3\uff0c\u80dc\u4f3c\u539f\u751f\u7684\u6027\u80fd<br/>\nDart \u811a\u672c\u4e5f\u4e0d\u518d\u548c js \u4e00\u6837\u6210\u4e3a\u89e3\u91ca\u6027\u8bed\u8a00\uff0c\u800c\u662f\u7f16\u8bd1\u4e3a\u9759\u6001\u8bed\u8a00\u3002</p>\n", 
      "date_published": "2025-07-17T02:24:13+00:00", 
      "title": "\u53e6\u4e00\u4e2a\u89c6\u89d2\u770b Flutter \u7684\u601d\u7ef4", 
      "id": "https://www.v2ex.com/t/1145747"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/jimmyzejia", 
        "name": "jimmyzejia", 
        "avatar": "https://cdn.v2ex.com/gravatar/2ad84c113d0eb3ea5fedd22105d222ec?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1145469", 
      "title": "\u62db flutter \u5de5\u7a0b\u5e08 \u517c\u804c\uff01", 
      "id": "https://www.v2ex.com/t/1145469", 
      "date_published": "2025-07-16T01:37:16+00:00", 
      "content_html": "\u5c97\u4f4d\u804c\u8d23:<br />1. \u8d1f\u8d23 Flutter \u5e94\u7528\u7684\u8bbe\u8ba1\u3001\u5f00\u53d1\u548c\u7ef4\u62a4\u5de5\u4f5c\uff0c\u786e\u4fdd\u5e94\u7528\u7684\u8d28\u91cf\u548c\u6027\u80fd\u3002<br />2. \u53c2\u4e0e\u5e94\u7528\u7684\u6574\u4f53\u67b6\u6784\u8bbe\u8ba1\uff0c\u4f18\u5316\u4ee3\u7801\u4ee5\u63d0\u9ad8\u5e94\u7528\u7684\u53ef\u6269\u5c55\u6027\u548c\u7a33\u5b9a\u6027\u3002<br />3. \u4e0e\u4ea7\u54c1\u7ecf\u7406\u3001\u8bbe\u8ba1\u5e08\u548c\u540e\u7aef\u5f00\u53d1\u56e2\u961f\u7d27\u5bc6\u5408\u4f5c\uff0c\u786e\u4fdd\u4ea7\u54c1\u529f\u80fd\u548c\u89c6\u89c9\u8bbe\u8ba1\u7b26\u5408\u9884\u671f\u3002<br />4. \u6301\u7eed\u5173\u6ce8 Flutter \u6280\u672f\u7684\u6700\u65b0\u53d1\u5c55\uff0c\u5f15\u5165\u65b0\u5de5\u5177\u548c\u6280\u672f\u4ee5\u63d0\u5347\u5e94\u7528\u6027\u80fd\u3002<br /><br />\u4efb\u804c\u8981\u6c42\uff1a<br />1. \u5177\u5907\u624e\u5b9e\u7684\u7f16\u7a0b\u6280\u80fd\uff0c\u719f\u6089 Flutter \u5e73\u53f0\u7684\u5f00\u53d1\u8bed\u8a00\u3002<br />2. \u6709\u826f\u597d\u7684\u56e2\u961f\u5408\u4f5c\u7cbe\u795e\uff0c\u80fd\u591f\u5728\u56e2\u961f\u4e2d\u53d1\u6325\u79ef\u6781\u4f5c\u7528\u3002<br />3. \u5bf9\u65b0\u6280\u672f\u5145\u6ee1\u70ed\u60c5\uff0c\u613f\u610f\u4e0d\u65ad\u5b66\u4e60\u548c\u5c1d\u8bd5\u3002<br />4. \u80fd\u591f\u72ec\u7acb\u89e3\u51b3\u6280\u672f\u96be\u9898\uff0c\u5177\u5907\u826f\u597d\u7684\u95ee\u9898\u5206\u6790\u548c\u89e3\u51b3\u80fd\u529b\u3002<br /><br />\u7ed3\u7b97\u65b9\u5f0f\uff1a<br />\u6708\u7ed3\uff0c\u6309\u65f6\u85aa\u8ba1\u7b97\u3002<br /><br />\u8054\u7cfb\u65b9\u5f0f\uff1a<br />\u6dfb\u52a0\u4f01\u4e1a\u5fae\u4fe1\u6295\u9012\u7b80\u5386<br /><a target=\"_blank\" href=\"https://common-1300084016.file.myqcloud.com/mini/sirong.png\" rel=\"nofollow noopener\">https://common-1300084016.file.myqcloud.com/mini/sirong.png</a>"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/i33", 
        "name": "i33", 
        "avatar": "https://cdn.v2ex.com/gravatar/5771125b66b686f602e4ef89df9e9add?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1142830", 
      "title": "\u6c42\u63a8\u8350\u4e00\u4e2a\u57fa\u7840\u6846\u67b6", 
      "id": "https://www.v2ex.com/t/1142830", 
      "date_published": "2025-07-03T09:51:17+00:00", 
      "content_html": "<p>\u521a\u5b66\u5b8c\u57fa\u7840\u77e5\u8bc6,\u51c6\u5907\u5f00\u53d1\u4e2a\u7b80\u5355\u5e94\u7528, \u6c42\u63a8\u8350\u4e00\u4e2a\u5305\u542b\u57fa\u7840\u529f\u80fd\u7684\u6846\u67b6, \u5982\u767b\u5f55, oauth2 \u8ba4\u8bc1, \u7528\u6237\u4fe1\u606f, \u5bc6\u7801\u4fee\u6539, \u5e94\u7528\u66f4\u65b0, \u72b6\u6001\u7ba1\u7406(\u51c6\u5907\u7528 GetX, \u5c31\u662f\u770b\u7740\u7b80\u5355,\u4e0d\u77e5\u9053\u5927\u795e\u4eec\u6709\u4ec0\u4e48\u63a8\u8350\u6ca1),\u7f51\u7edc\u8bf7\u6c42\u7b49\u3002\u6c42\u5927\u4f6c\u4eec\u63a8\u8350\u3002</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/ybz", 
        "name": "ybz", 
        "avatar": "https://cdn.v2ex.com/avatar/70c6/14d6/217134_large.png?m=1764655228"
      }, 
      "url": "https://www.v2ex.com/t/1141106", 
      "title": "Ubuntu \u56e2\u961f\u4e3a\u4ec0\u4e48\u65e0\u507f\u7ed9 Flutter \u5199\u684c\u9762\u591a\u7a97\u53e3\u529f\u80fd\uff1f", 
      "id": "https://www.v2ex.com/t/1141106", 
      "date_published": "2025-06-26T01:28:38+00:00", 
      "content_html": "<p>Flutter \u5b98\u65b9\u5728\u53bb\u5e74 5 \u6708\u5ba3\u5e03\u6682\u65f6\u6682\u505c\u684c\u9762\u591a\u7a97\u53e3\u7684\u5f00\u53d1\u3002\u540c\u5e74 10 \u6708 Ubuntu \u56e2\u961f\u76f4\u63a5\u7ed9\u51fa\u4e86\u591a\u7a97\u53e3 Demo \uff0c\u5982\u4eca\u591a\u7a97\u53e3\u5f15\u64ce\u7aef\u57fa\u672c\u5df2\u7ecf LGTM \u4e86\uff08 <a href=\"https://github.com/flutter/flutter/pull/168728\" rel=\"nofollow\">https://github.com/flutter/flutter/pull/168728</a> \uff09\uff0c \u5168\u90e8\u4ee3\u7801\u90fd\u662f\u7531 Ubuntu \u56e2\u961f\u7f16\u5199\u7684\u3002 </p>\n<p>\u4ed6\u4eec\u771f\u7684\u5c31\u662f\u4e3a\u7231\u53d1\u7535\uff1f\u4e3a flutter \u8d21\u732e\u4ee3\u7801\u662f\u8981\u7b7e\u7f72\u534f\u8bae\u7684\uff0c\u5373\u4f7f flutter \u662f\u5f00\u6e90\u7684\u4f60\u8d21\u732e\u7684\u4ee3\u7801\u4e5f\u662f\u7531 Google \u6240\u6709\u554a\u3002</p>\n<p><a href=\"https://github.com/flutter/flutter/issues/142845#issuecomment-2435738214\" rel=\"nofollow\">https://github.com/flutter/flutter/issues/142845#issuecomment-2435738214</a></p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/nicefrp", 
        "name": "nicefrp", 
        "avatar": "https://cdn.v2ex.com/avatar/0f86/0e0b/715625_large.png?m=1729268396"
      }, 
      "url": "https://www.v2ex.com/t/1141066", 
      "title": "\u8bf7\u6559\uff1a flutter \u6216 Android \u66f4\u65b0\u3001\u70ed\u66f4\u65b0\u65b9\u6848", 
      "id": "https://www.v2ex.com/t/1141066", 
      "date_published": "2025-06-25T14:12:31+00:00", 
      "content_html": "<p>\u8bf7\u6559\uff1aflutter \u6216 Android \u66f4\u65b0\u3001\u70ed\u66f4\u65b0\u65b9\u6848\uff0c\u8c22\u8c22\u5404\u4f4d\u5927\u4f6c\u3002</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/justtokankan", 
        "name": "justtokankan", 
        "avatar": "https://cdn.v2ex.com/gravatar/093604938501985c15eeae3b64b8afb3?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1139907", 
      "title": "\u6c42\u4e00\u4efd iOS \u6216\u8005 Flutter \u517c\u804c", 
      "id": "https://www.v2ex.com/t/1139907", 
      "date_published": "2025-06-20T06:05:44+00:00", 
      "content_html": "<p>\u5982\u9898\uff0c\u6211\u6709 10 \u591a\u5e74 iOS \u5f00\u53d1\u7ecf\u9a8c\uff0cFlutter 2 \u5e74\u5de6\u53f3\u7684\u7ecf\u9a8c\uff0c\u6c42\u4e00\u4efd\u517c\u804c \u8be6\u7ec6\u804a\u53ef\u4ee5\u52a0\u6211 tg:@johnkchow</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/burden7", 
        "name": "burden7", 
        "avatar": "https://cdn.v2ex.com/avatar/4920/a5db/591875_large.png?m=1699697081"
      }, 
      "url": "https://www.v2ex.com/t/1139079", 
      "title": "\u6c42\u52a9\u8d34\uff01\u5173\u4e8e Flutter \u63a5\u5165 in_app_purchase \u5185\u8d2d\u670d\u52a1\u7aef\u90e8\u5206\u4e8c\u6b21\u9a8c\u8bc1\u7684", 
      "id": "https://www.v2ex.com/t/1139079", 
      "date_published": "2025-06-17T02:28:56+00:00", 
      "content_html": "<p>\u6211\u901a\u8fc7<code>in_app_purchase</code>\u62ff\u5230<code>PurchaseDetails</code>\u540e\uff0c\u6211\u628a\u5176\u4e2d\u7684<code>serverVerificationData</code>\u4f20\u9012\u7ed9\u670d\u52a1\u7aef\uff0c\u4f46\u662f\u600e\u4e48\u4e5f\u9a8c\u8bc1\u4e0d\u6210\u529f\u3002\n\u6211\u53bb\u770b\u4e86 apple \u5f00\u53d1\u6587\u6863\uff0c\u91cc\u9762\u63d0\u5230\u4e86\u4e24\u79cd\u9a8c\u8bc1\u65b9\u5f0f</p>\n<ul>\n<li>Validating receipts with the App Store <code>Deprecated</code></li>\n<li>Get Transaction History</li>\n</ul>\n<p>\u7b2c\u4e00\u79cd\u65b9\u5f0f\uff0c\u5f97\u5230\u72b6\u6001\u7801\u4e00\u76f4\u662f 21002 \uff0c\u4e0d\u6e05\u695a\u662f password \u51fa\u4e86\u95ee\u9898\u8fd8\u662f recipt-data \u51fa\u4e86\u95ee\u9898\uff08\u540e\u8005\u6211\u5c31\u662f\u62ff APP \u83b7\u53d6\u5230\u7684 serverVerificationData \u4f20\u9012\u7684\uff09</p>\n<p>\u7b2c\u4e8c\u79cd\u65b9\u5f0f\uff0cchatGPT \u544a\u8bc9\u6211\u9700\u8981\u901a\u8fc7\u4ee5 JWT \u7684\u683c\u5f0f\u89e3\u6790 serverVerificationData \uff0c\u62ff\u5230 originalTransactionId \uff0c\u4f46\u662f\u5f53\u6211\u5728\u6c99\u76d2\u6a21\u5f0f\u4e0b\u591a\u6b21\u8d2d\u4e70\u4e00\u6b21\u6027\u7269\u54c1\u7684\u65f6\u5019\uff0cserverVerificationData \u5e76\u4e0d\u662f\u4e00\u4e2a JWT \u683c\u5f0f\uff08 GPT \u7ed9\u51fa\u7684\u63d0\u793a\u8bf4\u9700\u8981\u901a\u8fc7 split(\".\")\u6765\u83b7\u53d6\u4e09\u6bb5\u4fe1\u606f\uff0c\u624d\u662f JWT \u683c\u5f0f\uff09</p>\n<p>\u5982\u679c\u6709\u4e86\u89e3\u8fc7\u6d41\u7a0b\u7684\u5927\u4f6c\uff0c\u5e0c\u671b\u5e2e\u6211\u6307\u51fa\u95ee\u9898\u6240\u5728\uff0c\u611f\u6069\uff01\uff01</p>\n<p>2/2</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/rocmax", 
        "name": "rocmax", 
        "avatar": "https://cdn.v2ex.com/gravatar/34078d8614bf9197df6c6de09dfc8e58?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1138114", 
      "date_modified": "2025-06-12T09:09:36+00:00", 
      "content_html": "<p>\u4e3a\u4e86\u5728 ios \u4e0a\u5b9e\u73b0 liguid glass \u3002</p>\n", 
      "date_published": "2025-06-12T03:45:26+00:00", 
      "title": "flutter \u662f\u4e0d\u662f\u8981\u5347\u7ea7\u6240\u6709\u7684 widget \u4e86\uff1f", 
      "id": "https://www.v2ex.com/t/1138114"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/jjtom807564472", 
        "name": "jjtom807564472", 
        "avatar": "https://cdn.v2ex.com/avatar/ac76/8b5d/257628_large.png?m=1751618081"
      }, 
      "url": "https://www.v2ex.com/t/1133683", 
      "title": "\u4e0a\u67b6 Play store \u7684\u95ee\u9898...", 
      "id": "https://www.v2ex.com/t/1133683", 
      "date_published": "2025-05-23T00:18:18+00:00", 
      "content_html": "<p>Google \u597d\u7b28...\u6211\u7684\u5e94\u7528\u4f7f\u7528\u4e86\u4ed6\u4eec\u5bb6\u7684 firebase_analytics \u540e\u5c31\u4e00\u76f4\u4e0d\u80fd\u4e0a\u67b6\u5230 Play store \u3002\n\u4e00\u76f4\u62a5\u201c\u529f\u80fd\u63cf\u8ff0\u4e0d\u660e\u786e\u201d\uff0c\u6211\u7684\u529f\u80fd\u63cf\u8ff0\u586b\u5199\u7684\u662f\u201cGoogle analysis \u9644\u5e26\u7684\uff0c\u7edf\u8ba1\u7528\u6237\u7fa4\u7684\u56fd\u5bb6\u5206\u5e03\u201d\uff0c\n\u6709\u4ec0\u4e48\u529e\u6cd5\u89e3\u51b3\u5417\uff1f</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/jjtom807564472", 
        "name": "jjtom807564472", 
        "avatar": "https://cdn.v2ex.com/avatar/ac76/8b5d/257628_large.png?m=1751618081"
      }, 
      "url": "https://www.v2ex.com/t/1131839", 
      "title": "\u5e94\u7528\u672a\u58f0\u660e QUERY_ALL_PACKAGES \u6743\u9650\u5374\u62a5\u9519\uff0c\u662f firebase \u5bfc\u81f4\u7684\u5417\uff1f", 
      "id": "https://www.v2ex.com/t/1131839", 
      "date_published": "2025-05-14T23:06:44+00:00", 
      "content_html": "<p>\u5e94\u7528\u4e0a\u67b6 play \u5546\u5e97\u65f6\u62a5\u9519\uff1a\n\u201cQUERY_ALL_PACKAGES \u6743\u9650\u201d\u653f\u7b56\uff1a\u4f7f\u7528 QUERY_ALL_PACKAGES \u6743\u9650\u4e0d\u662f\u5141\u8bb8\u7684\u4f7f\u7528\u60c5\u5f62</p>\n<p>\u5e94\u7528\u5e76\u6ca1\u6709\u58f0\u660e\u201cQUERY_ALL_PACKAGES \u6743\u9650\u201d\uff0c\u662f\u4e0d\u662f\u4f7f\u7528\u4e86 firebase_core \uff0cfirebase_analytics\n\u5bfc\u81f4\u7684\uff1f\u5e94\u8be5\u5982\u4f55\u89e3\u51b3\uff01\uff1f\uff1f</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/Asuler", 
        "name": "Asuler", 
        "avatar": "https://cdn.v2ex.com/avatar/ec35/911a/420115_large.png?m=1749794334"
      }, 
      "url": "https://www.v2ex.com/t/1130359", 
      "title": "App \u5f00\u53d1\u65b0\u624b\u8bf7\u6559\u4e00\u4e2a flutter \u5f00\u53d1\u4e2d\u7684\u5b89\u5353\u95ee\u9898", 
      "id": "https://www.v2ex.com/t/1130359", 
      "date_published": "2025-05-08T02:45:54+00:00", 
      "content_html": "\u6211\u5728\u5f00\u53d1 flutter \u5e94\u7528\u65f6\u53d1\u73b0 app \u542f\u52a8\u4f1a\u6709\u77ed\u6682\u7684\u767d\u5c4f\u65f6\u95f4\uff0c\u67e5\u9605\u8d44\u6599\u540e\u77e5\u9053\u9700\u8981\u6dfb\u52a0\u4e00\u4e2a\u95ea\u5c4f\u9875/\u542f\u52a8\u9875<br /><br />\u6211\u77e5\u9053 flutter \u6709\u4e2a flutter_native_splash \u7684\u5305\u53ef\u4ee5\u8f85\u52a9\u914d\u7f6e\uff0c\u4f46\u662f\u5bf9\u4e8e Android 12 \u4ee5\u4e0a\u7248\u672c\uff0c\u597d\u50cf\u53ea\u652f\u6301\u8bbe\u7f6e\u7eaf\u8272\u80cc\u666f+\u56fe\u6807\u5c45\u4e2d\u7684\u8fd9\u79cd\u542f\u52a8\u5c4f\u4e86\uff0c\u8fd9\u4e2a\u8c8c\u4f3c\u662f\u5b89\u5353\u539f\u751f\u9650\u5236\u7684<br /><br />\u6211\u89c2\u5bdf\u5230\u73b0\u5728\u7684\u4e00\u4e9b\u5927\u5382\u51fa\u7684\u5b89\u5353 app \u7684\u542f\u52a8\u9875\uff0c\u50cf\u662f\u4e00\u5f20\u5927\u7684\u80cc\u666f\u56fe\u8d34\u4e0a\uff0c\u5f88\u660e\u663e\u7ed5\u8fc7\u4e86\u9650\u5236\uff0c\u662f\u600e\u4e48\u505a\u5230\u7684"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/yiyiniu", 
        "name": "yiyiniu", 
        "avatar": "https://cdn.v2ex.com/avatar/a880/45d7/572628_large.png?m=1760427328"
      }, 
      "url": "https://www.v2ex.com/t/1129685", 
      "date_modified": "2025-05-06T00:18:55+00:00", 
      "content_html": "<h3>\u670d\u52a1\u5668\u7248\u672c\u3001\u73af\u5883\u7248\u672c\u5982\u4e0b\uff1a</h3>\n<code>\njava version \"21.0.7\" 2025-04-15 LTS\nJava(TM) SE Runtime Environment (build 21.0.7+8-LTS-245)\nJava HotSpot(TM) 64-Bit Server VM (build 21.0.7+8-LTS-245, mixed mode, sharing)\nDoctor summary (to see all details, run flutter doctor -v):\n[\u221a] Flutter (Channel stable, 3.29.3, on Microsoft Windows [\u7248\u672c 10.0.19041.264], locale zh-CN)\n[\u221a] Windows Version (10 \u4e13\u4e1a\u7248 64 \u4f4d, 2004)\n[\u221a] Android toolchain - develop for Android devices (Android SDK version 35.0.1)\n[\u221a] Chrome - develop for the web\n[\u221a] Visual Studio - develop Windows apps (Visual Studio Community 2022 17.8.3)\n[\u221a] Android Studio (version 2024.3)\n[\u221a] VS Code (version 1.99.3)\n[\u221a] Connected device (3 available)\n[\u221a] Network resources\n</code>\n<h3>\u6267\u884c\u5b8c\u547d\u4ee4\uff1aflutter build apk</h3>\n<h3>\u62a5\u9519\u5982\u4e0b\uff1a</h3>\n<code>\nFAILURE: Build failed with an exception.\n<ul>\n<li>What went wrong:\nCould not open cp_settings generic class cache for settings file 'C:\\jk-katalon\\workspace\\XXXX\\XXXX-app\\android\\settings.gradle' (C:\\Users\\cs.gradle\\caches\\8.0\\scripts\\8ju52g7d2hqvl85b219kdzjzv).</li>\n</ul>\n<blockquote>\n<p>BUG! exception in phase 'semantic analysis' in source unit '<em>BuildScript</em>' Unsupported class file major version 65</p>\n</blockquote>\n<ul>\n<li>Try:</li>\n</ul>\n<blockquote>\n<p>Run with --stacktrace option to get the stack trace.\nRun with --info or --debug option to get more log output.\nRun with --scan to get full insights.</p>\n</blockquote>\n<ul>\n<li>Get more help at <a href=\"https://help.gradle.org\" rel=\"nofollow\">https://help.gradle.org</a></li>\n</ul>\n<p>BUILD FAILED in 8s\nRunning Gradle task 'assembleRelease'...                            9.3s</p>\n</code><p><code>\u250c\u2500 Flutter Fix \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n\u2502 [!] Your project's Gradle version is incompatible with the Java version that Flutter is using   \u2502\n\u2502 for Gradle.                                                                                     \u2502\n\u2502                                                                                                 \u2502\n\u2502 If you recently upgraded Android Studio, consult the migration guide at                         \u2502\n\u2502 <a href=\"https://flutter.dev/to/java-gradle-incompatibility\" rel=\"nofollow\">https://flutter.dev/to/java-gradle-incompatibility</a>.                                             \u2502\n\u2502                                                                                                 \u2502\n\u2502 Otherwise, to fix this issue, first, check the Java version used by Flutter by running <code>flutter \u2502 \u2502 doctor --verbose</code>.                                                                              \u2502\n\u2502                                                                                                 \u2502\n\u2502 Then, update the Gradle version specified in                                                    \u2502\n\u2502 C:\\jk-katalon\\workspace\\XXXX\\XXXX-app\\android\\gradle\\wrapper\\gradle-wrapper.properties to be    \u2502\n\u2502 compatible with that Java version. See the link below for more information on compatible        \u2502\n\u2502 Java/Gradle versions:                                                                           \u2502\n\u2502 <a href=\"https://docs.gradle.org/current/userguide/compatibility.html#java\" rel=\"nofollow\">https://docs.gradle.org/current/userguide/compatibility.html#java</a>                               \u2502\n\u2502                                                                                                 \u2502\n\u2502                                                                                                 \u2502\n\u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n</code></p>\n", 
      "date_published": "2025-05-05T03:30:45+00:00", 
      "title": "V \u53cb\u4eec\uff0c Flutter \u7f16\u8bd1\u62a5\u9519\u53ef\u80fd\u662f\u4ec0\u4e48\u539f\u56e0", 
      "id": "https://www.v2ex.com/t/1129685"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/bookerlevit", 
        "name": "bookerlevit", 
        "avatar": "https://cdn.v2ex.com/avatar/0aec/d20f/564889_large.png?m=1746203863"
      }, 
      "url": "https://www.v2ex.com/t/1129455", 
      "title": "\u5982\u4f55\u5b9e\u73b0\u68af\u5f62 tab \u5207\u6362", 
      "id": "https://www.v2ex.com/t/1129455", 
      "date_published": "2025-05-02T16:37:55+00:00", 
      "content_html": "<p><img alt=\"\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://i.imgur.com/IvqEJBm.png\"/> </p>\n<p>\u5728\u5b66\u4e60 flutter \uff0c\u8fd9\u4e2a\u95ee\u9898\u56f0\u6270\u597d\u4e45\u5f04\u4e0d\u5904\u6765\u3002\n\u9009\u4e2d\u72b6\u6001\u7a81\u51fa\uff1a\u9009\u4e2d\u7684\u6807\u7b7e\uff08\u4e13\u9879\u7ec3\u4e60/\u8003\u573a\u6a21\u5f0f\uff09\u6bd4\u672a\u9009\u4e2d\u7684\u8981\u9ad8\u4e00\u4e9b\uff0c\u6709\u51f8\u8d77\u611f\uff0c\u5706\u89d2\u3002\n\u672a\u9009\u4e2d\u8981\u4f4e\u4e00\u70b9\u3002\u5982\u56fe\uff0c\u8ba9 ai \u5e2e\u52a9\u4e5f\u5f04\u4e0d\u51fa\u6765\u3002</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/nicefrp", 
        "name": "nicefrp", 
        "avatar": "https://cdn.v2ex.com/avatar/0f86/0e0b/715625_large.png?m=1729268396"
      }, 
      "url": "https://www.v2ex.com/t/1128149", 
      "title": "\u8bf7\u6559\uff1a\u5927\u4f6c\u4eec 2025 \u5e74 Flutter \u7528\u54ea\u4e2a\u8def\u7531\uff1f", 
      "id": "https://www.v2ex.com/t/1128149", 
      "date_published": "2025-04-26T02:36:39+00:00", 
      "content_html": "<p>\u7b80\u5355\u5e94\u7528/\u5feb\u901f\u5f00\u53d1\tFlutter \u81ea\u5e26\u8def\u7531\n\u9700\u8981\u6df1\u94fe\u63a5/Web \u517c\u5bb9\tgo_router\n\u7c7b\u578b\u5b89\u5168/\u51cf\u5c11\u624b\u5199\u4ee3\u7801\tauto_route\n\u590d\u6742\u8def\u7531\u903b\u8f91\tfluro\n\u72b6\u6001\u7ba1\u7406\u6df1\u5ea6\u96c6\u6210\tBeamer</p>\n<p>\u4e0a\u9762\u662f AI \u7ed9\u6211\u63a8\u8350\u7684\uff0c\u60f3\u95ee\u95ee\u5927\u4f6c\u4eec\u5b9e\u9645\u60c5\u51b5\u3002</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/Lockroach", 
        "name": "Lockroach", 
        "avatar": "https://cdn.v2ex.com/gravatar/f61420767d3d2dfaa388a8077ba2929f?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1126429", 
      "date_modified": "2025-04-18T09:43:15+00:00", 
      "content_html": "<p>\u5bf9\u4e8e flutter \u5bf9\u9e3f\u8499 next \u7684\u517c\u5bb9\u6027\u6709\u4e00\u70b9\u7591\u95ee\uff0c\u641c\u4e86\u4e0b\uff0c\u53d1\u73b0 flutter \u4ed3\u5e93 issue \u91cc\u5bf9\u4e8e os next \u7684\u517c\u5bb9\u6027\u662f\u76ee\u524d\u65e0\u8ba1\u5212\n<a href=\"https://github.com/flutter/flutter/issues/150536\" rel=\"nofollow\">https://github.com/flutter/flutter/issues/150536</a>\n\u4f46\u662f\u6709\u53e6\u4e00\u4e2a\u9e3f\u8499\u5f00\u53d1\u8005\u793e\u533a\u7684\u56de\u7b54\u4f3c\u4e4e\u8bf4\u662f\u652f\u6301\u7684\n<a href=\"https://developer.huawei.com/consumer/cn/forum/topic/0208152991384243753\" rel=\"nofollow\">https://developer.huawei.com/consumer/cn/forum/topic/0208152991384243753</a></p>\n<p>\u6709\u6ca1\u6709 flutter \u5f00\u53d1\u8005\u5bf9\u8fd9\u4e2a\u6bd4\u8f83\u4e86\u89e3\u7684\uff1f</p>\n", 
      "date_published": "2025-04-18T04:11:02+00:00", 
      "title": "flutter \u652f\u6301 harmony os next \u5417", 
      "id": "https://www.v2ex.com/t/1126429"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/sawyeratfoxit", 
        "name": "sawyeratfoxit", 
        "avatar": "https://cdn.v2ex.com/gravatar/9bea8bafe2a8ac4731bb3309822fca36?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1125118", 
      "date_modified": "2025-04-13T09:20:06+00:00", 
      "content_html": "<p>\u6211\u4eec\u662f\u4e00\u4e2a\u4e13\u6ce8\u4e8e\u7f51\u7edc\u5de5\u5177\u7684\u56e2\u961f, \u76ee\u524d\u7684 App \u7ecf\u8fc7\u591a\u5e74\u8fed\u4ee3\u5df2\u7ecf\u6210\u719f\u7684\u4f7f\u7528 flutter \u6846\u67b6\u5728\u4e09\u4e2a\u684c\u9762\u7aef\u4ee5\u53ca\u4e24\u4e2a\u624b\u673a\u7aef\u8fd0\u4f5c, \u76ee\u524d\u9700\u8981\u4e00\u4e9b\u6709\u7ecf\u9a8c\u7684\u670b\u53cb\u5e2e\u5fd9\u7ee7\u7eed\u7ef4\u62a4\u9879\u76ee. \u957f\u671f\u8fdc\u7a0b\u517c\u804c, \u5de5\u4f5c\u65f6\u95f4\u53ef\u4ee5\u53cc\u65b9\u534f\u5546, U \u7ed3\u7b97, \u6709\u5174\u8da3\u7684\u670b\u53cb\u53ef\u4ee5\u6dfb\u52a0\u6211\u7684 TG: @<a href=\"/member/randomstream\">randomstream</a> </p>\n<ul>\n<li>\u8d1f\u8d23\u57fa\u4e8e Flutter \u6846\u67b6\u7684\u9879\u76ee\u4e8c\u6b21\u5f00\u53d1\u9875\u9762\uff0c\u4f18\u5316\u73b0\u6709\u529f\u80fd\uff1b</li>\n<li>\u72ec\u7acb\u5b8c\u6210\u524d\u7aef\u4ee3\u7801\u7f16\u5199\uff0c\u786e\u4fdd\u5e94\u7528\u5728\u591a\u5e73\u53f0\u4e0b\u7684\u517c\u5bb9\u6027\u548c\u6027\u80fd\uff1b</li>\n<li>\u5b8c\u6210\u73b0\u6709\u9879\u76ee\u6574\u4f53\u6d41\u7545\u5ea6\uff0c\u4e3b\u8981\u4e3a\u542f\u52a8\u901f\u5ea6\u4f18\u5316\u4e0e\u9875\u9762\u6d41\u7545\uff1b</li>\n<li>\u7ef4\u62a4\u548c\u6539\u8fdb\u5df2\u6709\u7cfb\u7edf\uff0c\u63d0\u5347\u7528\u6237\u4f53\u9a8c\u548c\u8fd0\u884c\u6548\u7387\u3002</li>\n</ul>\n<p>\u5c97\u4f4d\u8981\u6c42\uff1a</p>\n<ul>\n<li>5 \u5e74\u4ee5\u4e0a\u524d\u7aef\u5f00\u53d1\u7ecf\u9a8c\uff0c\u81f3\u5c11 2 \u5e74 Flutter \u5b9e\u9645\u9879\u76ee\u7ecf\u9a8c\uff1b</li>\n<li>\u7cbe\u901a\u5b89\u5353\u4e0e iOS \u539f\u751f\u5f00\u53d1\uff0c\u80fd\u591f\u72ec\u7acb\u4e66\u5199\u76f8\u5173\u63d2\u4ef6\uff1b</li>\n<li>\u7cbe\u901a Dart \u8bed\u8a00\uff0c\u719f\u6089 Flutter \u5e03\u5c40\u673a\u5236\u3001\u52a8\u753b\u53ca\u6027\u80fd\u8c03\u4f18\uff1b</li>\n<li>\u6bcf\u65e5\u6c47\u62a5\u5de5\u4f5c\u8fdb\u5ea6\uff0c\u540e\u671f\u7ef4\u62a4\u5f00\u53d1\u76f8\u5173\u529f\u80fd\uff1b</li>\n<li>\u6709\u8fdc\u7a0b\u5de5\u4f5c\u7ecf\u9a8c\uff0c\u80fd\u591f\u9ad8\u6548\u81ea\u6211\u7ba1\u7406\u5e76\u6309\u65f6\u4ea4\u4ed8\u4efb\u52a1\uff1b</li>\n<li>\u719f\u7ec3\u4f7f\u7528 Cursor, Windsurf \u7b49 AI \u5de5\u5177, \u9ad8\u6548\u5e03\u5c40\u4ee5\u53ca\u529f\u80fd\u5f00\u53d1\u3002</li>\n</ul>\n", 
      "date_published": "2025-04-13T09:17:37+00:00", 
      "title": "flutter \u9879\u76ee\u4e8c\u5f00\uff0c UI \u4fee\u6539\u4e0e\u9879\u76ee\u4f18\u5316", 
      "id": "https://www.v2ex.com/t/1125118"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/ixixi", 
        "name": "ixixi", 
        "avatar": "https://cdn.v2ex.com/avatar/6879/5a6d/456967_large.png?m=1768011429"
      }, 
      "url": "https://www.v2ex.com/t/1123973", 
      "title": "flutter \u662f\u5426\u80fd vscode remote \u8fdc\u7a0b\u5f00\u53d1\u548c\u8c03\u8bd5 ?", 
      "id": "https://www.v2ex.com/t/1123973", 
      "date_published": "2025-04-08T07:27:32+00:00", 
      "content_html": "<p>\u5199\u524d\u540e\u7aef\u90fd\u662f\u8fde linux \u8fdc\u7a0b\u5f00\u53d1 , app \u5374\u4e0d\u80fd\u611f\u89c9\u7565\u6709\u4e9b\u9057\u61be </p>\n<p>\u6709\u7814\u7a76\u8fc7\u7684\u5144\u5f1f\u5417 ?</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/qinconquer", 
        "name": "qinconquer", 
        "avatar": "https://cdn.v2ex.com/gravatar/c900fd3510a5ce0034e3304b40ddea9e?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1117261", 
      "date_modified": "2025-03-10T14:27:33+00:00", 
      "content_html": "\u76ee\u524d\u4e86\u89e3\u5230\u6709\u5f00\u6e90\u7684 aptabase \u8fd8\u6709\u56fd\u5185\u7684\u53cb\u76df\u4e4b\u7c7b\u7684\u3002<br /><br />\u5927\u5bb6\u5728\u4f7f\u7528 Flutter \u5f00\u53d1\u7684\u65f6\u5019\u7528\u7684\u662f\u4ec0\u4e48\u5462\uff0c\u6211\u7684\u9879\u76ee\u76ee\u524d\u652f\u6301 ios \u548c android", 
      "date_published": "2025-03-10T07:16:14+00:00", 
      "title": "\u5927\u5bb6\u4f7f\u7528 flutter \u5f00\u53d1\u7684 app \u7528\u4ec0\u4e48\u65e5\u6d3b\u7edf\u8ba1\u5de5\u5177\u5462", 
      "id": "https://www.v2ex.com/t/1117261"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/ioshot", 
        "name": "ioshot", 
        "avatar": "https://cdn.v2ex.com/avatar/5f30/fc62/505664_large.png?m=1747204946"
      }, 
      "url": "https://www.v2ex.com/t/1115994", 
      "date_modified": "2025-03-05T02:46:16+00:00", 
      "content_html": "<p>\u5982\u679c\u53ef\u4ee5\uff0c\u611f\u89c9 Flutter \u6f5c\u529b\u65e0\u9650...</p>\n", 
      "date_published": "2025-03-05T02:44:08+00:00", 
      "title": "Flutter \u5df2\u7ecf\u53ef\u4ee5\u5f00\u53d1\u9e3f\u8499\u4e86\u5417", 
      "id": "https://www.v2ex.com/t/1115994"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/asovo888", 
        "name": "asovo888", 
        "avatar": "https://cdn.v2ex.com/avatar/d904/8020/171056_large.png?m=1751600986"
      }, 
      "url": "https://www.v2ex.com/t/1115554", 
      "date_modified": "2025-03-03T09:17:30+00:00", 
      "content_html": "<p>\u7528\u4e86\u597d\u591a TOTP \u7684\u5e94\u7528\uff0c\u4f46\u90fd\u4e0d\u65b9\u4fbf\u6570\u636e\u7684\u5171\u4eab\u4e0e\u5bfc\u51fa\u3002\n\u6240\u4ee5\u7528 Flutter \u7b80\u5355\u7684\u5199\u4e86\u4e00\u4e2a\uff0c\u5e76\u628a\u5b83\u5f00\u6e90\u5206\u4eab\u51fa\u6765\u3002</p>\n<p><a href=\"https://github.com/cyobason/totp\" rel=\"nofollow\" title=\"https://github.com/cyobason/totp\">\u524d\u5f80 Github</a></p>\n<h2>\u529f\u80fd</h2>\n<ul>\n<li>\u626b\u4e00\u626b\u5feb\u901f\u6dfb\u52a0</li>\n<li>\u7f16\u8f91\u6a21\u5f0f\u4e0b\uff0c\u53ef\u7f16\u8f91\u5e94\u7528\u4e0e\u8d26\u6237\u540d\u79f0\u3002</li>\n<li>\u7f16\u8f91\u6a21\u5f0f\u4e0b\uff0c\u53ef\u663e\u793a\u5bc6\u94a5\u4e8c\u7ef4\u7801\uff0c\u65b9\u4fbf\u5171\u4eab\u3002</li>\n<li>\u7f16\u8f91\u6a21\u5f0f\u4e0b\uff0c\u53ef\u5220\u9664\u5bc6\u94a5\u3002</li>\n<li>\u5b8c\u5168\u672c\u5730\u8fd0\u884c\u3002</li>\n</ul>\n<h3>\u622a\u56fe</h3>\n<p><img alt=\"image\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://github.com/user-attachments/assets/5ae5c0aa-9719-452f-a77e-a1f40052b482\"/>\n<img alt=\"image\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://github.com/user-attachments/assets/e5a672ba-06b4-4365-96d2-f36f939c6b62\"/>\n<img alt=\"image\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://github.com/user-attachments/assets/7579c00b-fb7c-4611-9955-8d673fc060b1\"/>\n<img alt=\"image\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://github.com/user-attachments/assets/766c2e09-31b0-474a-b5b7-b6ddad9faa1e\"/>\n<img alt=\"image\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://github.com/user-attachments/assets/3c993628-9203-4e4c-b73d-b7e7923ea4a4\"/>\n<img alt=\"image\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://github.com/user-attachments/assets/04fde59c-4160-49c5-bc07-2ac7c2bba79a\"/>\n<img alt=\"image\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://github.com/user-attachments/assets/0d2a9756-4204-4965-9bc2-fb1cf358c1e1\"/></p>\n", 
      "date_published": "2025-03-03T09:15:51+00:00", 
      "title": "\u57fa\u4e8e flutter \u7684 \u4e8c\u6b65\u9a8c\u8bc1 TOTP \u5e94\u7528", 
      "id": "https://www.v2ex.com/t/1115554"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/laters", 
        "name": "laters", 
        "avatar": "https://cdn.v2ex.com/gravatar/01b6c7ffebf5c401108b51a45c07e929?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1114973", 
      "title": "\u6709\u6ca1\u6709\u53ef\u4ee5\u5b66\u4e60\u7684 flutter riverpod \u7684\u5b9e\u6218\u9879\u76ee\uff0c\u5e0c\u671b\u63a8\u8350\u4e0b\u66f4\u597d\u7684\u72b6\u6001\u7ba1\u7406\u65b9\u6848", 
      "id": "https://www.v2ex.com/t/1114973", 
      "date_published": "2025-02-28T12:52:06+00:00", 
      "content_html": "<p>\u6709\u6ca1\u6709\u53ef\u4ee5\u5b66\u4e60\u7684 flutter riverpod \u7684\u5b9e\u6218\u9879\u76ee\uff0c\u5e0c\u671b\u53ef\u4ee5\u63a8\u8350\u4e0b\uff0c\n\u5e94\u8be5\u4f7f\u7528\u54ea\u79cd\u67b6\u6784\uff0c\u6216\u8005\u66f4\u597d\u7684\u72b6\u6001\u7ba1\u7406\u65b9\u6848</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/iorilu", 
        "name": "iorilu", 
        "avatar": "https://cdn.v2ex.com/avatar/7121/0eb9/222090_large.png?m=1773302217"
      }, 
      "url": "https://www.v2ex.com/t/1113490", 
      "date_modified": "2025-02-22T08:47:45+00:00", 
      "content_html": "<p>\u56e0\u4e3a flutter \u8de8\u5e73\u53f0\u5f97\u539f\u56e0, \u6211\u73b0\u5728\u4e5f\u60f3\u5c1d\u8bd5\u7528 flutter \u505a\u684c\u9762\u8f6f\u4ef6</p>\n<p>\u4e00\u4e2a\u95ee\u9898\u5c31\u662f flutter \u7531\u4e8e\u5f00\u59cb\u662f\u4e3a\u4e86\u79fb\u52a8\u5e73\u53f0\u51c6\u5907\u5f97</p>\n<p>\u867d\u7136\u73b0\u5728\u652f\u6301\u684c\u9762\u7aef, \u4f46\u5f88\u663e\u7136\u98ce\u683c\u8fd8\u662f\u79fb\u52a8\u5f97</p>\n<p>\u5c24\u5176\u4e0d\u7b26\u5408 windows \u98ce\u683c, \u6309\u94ae\u90fd\u662f\u5706\u89d2\u7b49\u7b49</p>\n<p>\u800c\u4e14\u611f\u89c9\u5f88\u96be\u641e\u51fa\u6bd4\u5982\u50cf vscode \u8fd9\u79cd\u6807\u51c6\u5f97\u5f00\u53d1\u5de5\u5177\u98ce\u683c, \u5c31\u662f\n\u5404\u4e2a\u63a7\u4ef6\u8981\u5f88\u7d27\u51d1, \u5c0f\u4e00\u70b9, \u7559\u6700\u5927\u7a7a\u95f4\u7ed9\u5de5\u4f5c\u4f7f\u7528</p>\n<p>\u6709\u6ca1\u6709\u6709\u7ecf\u9a8c\u5f97\u8bf4\u8bf4\u770b, \u6211\u4e3b\u8981\u662f\u60f3\u505a\u51fa\u7c7b\u4f3c vscode \u98ce\u683c</p>\n<p>\u90a3\u4e2a reqable \u98ce\u683c\u4e5f\u5f88\u597d, \u4e0d\u77e5\u9053\u4ed6\u662f\u7528\u4e86\u5565\u6846\u67b6\u8fd8\u662f\u90fd\u81ea\u5df1\u641e\u5f97, flutter \u597d\u50cf\u4e5f\u4e0d\u652f\u6301\n\u83dc\u5355\u680f\u628a, \u4ed6\u90a3\u4e2a\u754c\u9762\u5f88\u7d27\u51d1, \u585e\u4e86\u5f88\u591a\u63a7\u4ef6, \u4e5f\u4e0d\u663e\u5f97\u62e5\u6324</p>\n", 
      "date_published": "2025-02-22T08:47:22+00:00", 
      "title": "flutter \u5f00\u53d1\u684c\u9762\u8f6f\u4ef6\u5982\u4f55\u505a\u51fa\u597d\u770b\u5f97\u5e03\u5c40, \u6bd4\u5982\u50cf vscode, reqable", 
      "id": "https://www.v2ex.com/t/1113490"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/linora", 
        "name": "linora", 
        "avatar": "https://cdn.v2ex.com/avatar/f050/2388/164530_large.png?m=1735785402"
      }, 
      "url": "https://www.v2ex.com/t/1112094", 
      "title": "MBA M3 16GB \u80fd\u73a9 flutter \u5f00\u53d1\u5417\uff1f", 
      "id": "https://www.v2ex.com/t/1112094", 
      "date_published": "2025-02-17T10:04:10+00:00", 
      "content_html": "<p>RT \uff0c\u4f1a\u4e0d\u4f1a\u592a\u70ed\uff1f</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/xuxiake", 
        "name": "xuxiake", 
        "avatar": "https://cdn.v2ex.com/gravatar/ca210da1ef83b9c21c0ba7ca469fabc3?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1111264", 
      "date_modified": "2025-02-13T10:04:18+00:00", 
      "content_html": "<p><a href=\"https://nas.xikcloud.com:38443/i/2025/02/13/67adc0d57091b.jpg\" rel=\"nofollow\"><img alt=\"\u5fae\u4fe1\u56fe\u7247_20250213175144.jpg\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://nas.xikcloud.com:38443/i/2025/02/13/67adc0d57091b.jpg\"/></a></p>\n<p>\u5b98\u65b9\u7684 camera \u63d2\u4ef6\uff0c\u6700\u65b0\u7248\uff0c\u624b\u673a\u662f\u5c0f\u7c73 13 \uff0c\u7cfb\u7edf\u662f\u6f8e\u6e43 OS2.0 \uff0c\u57fa\u4e8e\u5b89\u5353 15</p>\n<blockquote>\n<p>\u5fd8\u8bb0\u8bf4\u95ee\u9898\u4e86\uff0c\u9884\u89c8\u753b\u9762\u65cb\u8f6c\u4e86-90 \u5ea6</p>\n</blockquote>\n", 
      "date_published": "2025-02-13T09:59:08+00:00", 
      "title": "\u771f\u7684\u65e0\u529b\u5410\u69fd flutter \u4e86", 
      "id": "https://www.v2ex.com/t/1111264"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/jedeft", 
        "name": "jedeft", 
        "avatar": "https://cdn.v2ex.com/gravatar/32c4cbaf6d15745f0c2582540a7038b7?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1110802", 
      "date_modified": "2025-02-11T17:19:53+00:00", 
      "content_html": "<p>1 \u3001flutter \u6709\u5565\u4e2d\u6587\u793e\u533a\u53ef\u4ee5\u53d1\u8d34\u4ea4\u6d41\u7684?\n2 \u3001flutter \u91cc\u7edf\u8ba1\u7528\u6237\u6570\u636e\u3001\u6bd4\u5982\u65e5\u6d3b\u3001\u7559\u5b58\uff0c\u6709\u5565\u73b0\u6210\u7684\u7b2c\u4e09\u65b9\u5305\u6bd4\u8f83\u597d\u7528?\n3 \u3001flutter \u91cc\u63a8\u9001\u529f\u80fd\u7528\u54ea\u4e2a\u5e73\u53f0\u6bd4\u8f83\u597d\uff1f</p>\n<p>\u8c22\u8c22</p>\n", 
      "date_published": "2025-02-11T17:13:27+00:00", 
      "title": "\u6709 flutter \u5927\u4f6c\u4e48\uff1f\u8bf7\u6559\u51e0\u4e2a\u95ee\u9898", 
      "id": "https://www.v2ex.com/t/1110802"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/Variazioni", 
        "name": "Variazioni", 
        "avatar": "https://cdn.v2ex.com/avatar/968b/446f/269903_large.png?m=1713835656"
      }, 
      "url": "https://www.v2ex.com/t/1109474", 
      "date_modified": "2025-02-06T23:53:23+00:00", 
      "content_html": "\u4f8b\u5982\u4f7f\u7528 GestureDetector<br />onPanUpdate: (details) {<br />\tdetails.globalPosition;<br />    details.localPosition;<br />}<br />\u8fd9\u4e24\u4e2a\u83b7\u53d6\u7684\u90fd\u662f\u76f8\u5bf9\u7a97\u53e3\u5de6\u4e0a\u89d2\u7684\u5750\u6807\u3002<br /><br />\u5404\u79cd\u6e20\u9053\u67e5\u8be2\u7684\u7ed3\u679c\uff0c\u4e5f\u90fd\u662f\u53ea\u80fd\u83b7\u53d6\u76f8\u5bf9\u4e8e\u7a97\u53e3\u7684\u5750\u6807\uff0c\u83b7\u53d6\u4e0d\u5230\u76f8\u5bf9\u4e8e\u663e\u793a\u5668\u7684\u5750\u6807\u3002\u9664\u4e86\u4f7f\u7528\u7cfb\u7edf\u539f\u751f\u63a5\u53e3\u5916\uff0c\u8fd8\u6709\u4ec0\u4e48\u5176\u4ed6\u7684\u529e\u6cd5\u5417\uff1f", 
      "date_published": "2025-02-06T15:59:58+00:00", 
      "title": "Flutter \u5f00\u53d1\u684c\u9762\u5e94\u7528\u7a0b\u5e8f\uff0c\u5982\u4f55\u83b7\u53d6\u9f20\u6807\u7684\u7edd\u5bf9\u5750\u6807\uff1f", 
      "id": "https://www.v2ex.com/t/1109474"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/avenhen", 
        "name": "avenhen", 
        "avatar": "https://cdn.v2ex.com/avatar/a874/ea75/686096_large.png?m=1775639969"
      }, 
      "url": "https://www.v2ex.com/t/1103716", 
      "title": "flutter \u542f\u52a8 ios \u9879\u76ee\u5931\u8d25 n \u6b21\uff0c\u6c42\u5927\u795e\u5e2e\u5fd9", 
      "id": "https://www.v2ex.com/t/1103716", 
      "date_published": "2025-01-08T15:37:41+00:00", 
      "content_html": "\u6211\u5df2\u7ecf\u88ab\u8fd9\u4e2a\u7834\u62a5\u9519\u6298\u817e\u4e86\u4fe9\u665a\u4e0a\u4e86\uff0cgoogle \u4e0a\u5404\u79cd\u65b9\u6cd5\u90fd\u5c1d\u8bd5\u4e86\uff0c\u5c31\u662f\u7ed5\u4e0d\u8fc7\u53bb\u3002\u6c42\u5927\u795e\u89e3\u7b54\u3002<br /><br />## \u542f\u52a8\u62a5\u9519\u5185\u5bb9<br />```txt<br />Failed to build iOS app<br />Error output from Xcode build:<br />\u21b3<br />    --- xcodebuild: WARNING: Using the first of multiple matching destinations:<br />    { platform:iOS Simulator, id:16524F90-A508-4F0D-9091-F0CF7A5A6686, OS:17.5, name:iPhone 14 Pro }<br />    { platform:iOS Simulator, id:16524F90-A508-4F0D-9091-F0CF7A5A6686, OS:17.5, name:iPhone 14 Pro }<br />    ** BUILD FAILED **<br /><br /><br />Xcode's output:<br />\u21b3<br />    Writing result bundle at path:<br />        /var/folders/fq/2051nhxx5rs4svtvnsd_hvjr0000gn/T/flutter_tools.mEnGAj/flutter_ios_build_temp_dirENnESM/temporary_xcresult_bundle<br /><br />    /Users/cloud_prg/.pub-cache/hosted/<a target=\"_blank\" href=\"http://pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/messages.m:4:9:\" rel=\"nofollow noopener\">pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/messages.m:4:9:</a> fatal error: 'Flutter/Flutter.h' file not found<br />    #import &lt;Flutter/Flutter.h&gt;<br />            ^~~~~~~~~~~~~~~~~~~<br />    1 error generated.<br />    In file included from /Users/cloud_prg/.pub-cache/hosted/<a target=\"_blank\" href=\"http://pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/WakelockPlugin.m:1:\" rel=\"nofollow noopener\">pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/WakelockPlugin.m:1:</a><br />    /Users/cloud_prg/.pub-cache/hosted/<a target=\"_blank\" href=\"http://pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/WakelockPlugin.h:1:9:\" rel=\"nofollow noopener\">pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/WakelockPlugin.h:1:9:</a> fatal error: 'Flutter/Flutter.h' file not<br />    found<br />    #import &lt;Flutter/Flutter.h&gt;<br />            ^~~~~~~~~~~~~~~~~~~<br />    1 error generated.<br />    /Users/cloud_prg/.pub-cache/hosted/<a target=\"_blank\" href=\"http://pub.flutter-io.cn/video_player-2.1.15/ios/Classes/messages.m:8:9:\" rel=\"nofollow noopener\">pub.flutter-io.cn/video_player-2.1.15/ios/Classes/messages.m:8:9:</a> fatal error: 'Flutter/Flutter.h' file not<br />    found<br />    #import &lt;Flutter/Flutter.h&gt;<br />            ^~~~~~~~~~~~~~~~~~~<br />    1 error generated.<br />    Command SwiftEmitModule failed with a nonzero exit code<br />    /Users/cloud_prg/Documents/project/github/FLUTTER/flutter_bolg_manage/ios/Runner.xcodeproj: warning: The iOS Simulator deployment target<br />    'IPHONEOS_DEPLOYMENT_TARGET' is set to 11.0, but the range of supported deployment target versions is 12.0 to 17.5.99. (in target 'Runner' from<br />    project 'Runner')<br />    warning: Run script build phase 'Thin Binary' will be run during every build because it does not specify any outputs. To address this warning,<br />    either add output dependencies to the script phase, or configure it to run in every build by unchecking \"Based on dependency analysis\" in the<br />    script phase. (in target 'Runner' from project 'Runner')<br />    warning: Run script build phase 'Run Script' will be run during every build because it does not specify any outputs. To address this warning,<br />    either add output dependencies to the script phase, or configure it to run in every build by unchecking \"Based on dependency analysis\" in the<br />    script phase. (in target 'Runner' from project 'Runner')<br /><br />Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found<br />/Users/cloud_prg/.pub-cache/hosted/<a target=\"_blank\" href=\"http://pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/messages.m:3:8\" rel=\"nofollow noopener\">pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/messages.m:3:8</a><br /><br /><br />Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found<br />/Users/cloud_prg/.pub-cache/hosted/<a target=\"_blank\" href=\"http://pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/WakelockPlugin.h:0:8\" rel=\"nofollow noopener\">pub.flutter-io.cn/wakelock-0.5.3+3/ios/Classes/WakelockPlugin.h:0:8</a><br /><br /><br />Lexical or Preprocessor Issue (Xcode): 'Flutter/Flutter.h' file not found<br />/Users/cloud_prg/.pub-cache/hosted/<a target=\"_blank\" href=\"http://pub.flutter-io.cn/video_player-2.1.15/ios/Classes/messages.m:7:8\" rel=\"nofollow noopener\">pub.flutter-io.cn/video_player-2.1.15/ios/Classes/messages.m:7:8</a><br /><br /><br />Uncategorized (Xcode): Command SwiftEmitModule failed with a nonzero exit code<br /><br /><br />Could not build the application for the simulator.<br />Error launching application on iPhone 14 Pro.<br />```<br /><br />## podFile \u5185\u5bb9<br />```Podfile<br /># Uncomment this line to define a global platform for your project<br />platform :ios, \"14.0\"<br /><br /># CocoaPods analytics sends network stats synchronously affecting flutter build latency.<br />ENV[\"COCOAPODS_DISABLE_STATS\"] = \"true\"<br /><br />project \"Runner\", {<br />  \"Debug\" =&gt; :debug,<br />  \"Profile\" =&gt; :release,<br />  \"Release\" =&gt; :release,<br />}<br /><br />def flutter_root<br />  generated_xcode_build_settings_path = File.expand_path(File.join(\"..\", \"Flutter\", \"Generated.xcconfig\"), __FILE__)<br />  unless File.exist?(generated_xcode_build_settings_path)<br />    raise \"#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first\"<br />  end<br /><br />  File.foreach(generated_xcode_build_settings_path) do |line|<br />    matches = line.match(/FLUTTER_ROOT\\=(.*)/)<br />    return matches[1].strip if matches<br />  end<br />  raise \"FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get\"<br />end<br /><br />require File.expand_path(File.join(\"packages\", \"flutter_tools\", \"bin\", \"podhelper\"), flutter_root)<br /><br />flutter_ios_podfile_setup<br /><br />target \"Runner\" do<br />  use_frameworks!<br />  use_modular_headers!<br /><br />  flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))<br />end<br /><br />post_install do |installer|<br />  installer.pods_project.targets.each do |target|<br />    flutter_additional_macos_build_settings(target)<br />    target.build_configurations.each do |config|<br />      config.build_settings[\"IPHONEOS_DEPLOYMENT_TARGET\"] = \"14.0\"<br />    end<br />  end<br />end<br /><br />```"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/cxxnullptr", 
        "name": "cxxnullptr", 
        "avatar": "https://cdn.v2ex.com/avatar/6c00/4bea/522057_large.png?m=1762223034"
      }, 
      "url": "https://www.v2ex.com/t/1096936", 
      "title": "Flutter 3.27 Flex \u7ec8\u4e8e\u652f\u6301 spacing \u4e86", 
      "id": "https://www.v2ex.com/t/1096936", 
      "date_published": "2024-12-12T02:50:03+00:00", 
      "content_html": "<p><a href=\"https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c\" rel=\"nofollow\">https://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c</a></p>\n<p>\u7c97\u7565\u770b\u4e86\u4e00\u773c\u66f4\u65b0\u5185\u5bb9\uff0c\u611f\u89c9\u8fd8\u662f Flex \u8fd9\u4e2a\u6700\u80fd\u63d0\u5347\u5f00\u53d1\u4f53\u9a8c\uff0c\u7b49\u4e86\u8fd9\u4e48\u591a\u5e74</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/jiuzhougege", 
        "name": "jiuzhougege", 
        "avatar": "https://cdn.v2ex.com/avatar/f424/f3fd/687771_large.png?m=1732367926"
      }, 
      "url": "https://www.v2ex.com/t/1095856", 
      "title": "\u542c\u8bf4\u6709\u4e00\u4e2a app \u5b89\u88c5\u540e\u53ef\u4ee5\u67e5\u770b\u624b\u673a\u4e0a\u54ea\u4e9b app \u662f flutter \u5f00\u53d1\u7684\uff1f", 
      "id": "https://www.v2ex.com/t/1095856", 
      "date_published": "2024-12-08T03:04:15+00:00", 
      "content_html": "\u4e0a\u6b21\u542c\u4eba\u8bf4\u4e86\uff0c\u4f46\u662f\u5fd8\u8bb0\u540d\u5b57\u4e86\uff0c\u540d\u5b57\u4ee5 flutter \u5f00\u5934\uff0c\u6709\u4eba\u77e5\u9053\u5417?\u6211\u4e0a\u6b21\u77e5\u9053\u540e\u5728\u7f8e\u533a\u641c\u7d22\u4e86\u6ca1\u6709\u8fd9\u4e2a app \uff0c\u540e\u6765\u5c31\u5fd8\u8bb0\u4e86\uff0c\u53ef\u80fd\u56fd\u533a\u6709\uff1f"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/taosx", 
        "name": "taosx", 
        "avatar": "https://cdn.v2ex.com/avatar/7a53/0ddb/238974_large.png?m=1733232739"
      }, 
      "url": "https://www.v2ex.com/t/1094779", 
      "title": "flutter \u5b9e\u73b0\u8fd9\u6837\u7684\u529f\u80fd\uff0c\u7ea2\u5305\u611f\u8c22", 
      "id": "https://www.v2ex.com/t/1094779", 
      "date_published": "2024-12-03T13:34:22+00:00", 
      "content_html": "<p><a href=\"https://imgse.com/i/pAoeMK1\" rel=\"nofollow\"><img alt=\"pAoeMK1.png\" class=\"embedded_image\" loading=\"lazy\" referrerpolicy=\"no-referrer\" rel=\"noreferrer\" src=\"https://s21.ax1x.com/2024/12/03/pAoeMK1.png\"/></a>\n\u540e\u53f0\u7ed9\u4e86\u4e2a\u79d2\u949f\u7684\u6570\u636e</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/SaltedFish12138", 
        "name": "SaltedFish12138", 
        "avatar": "https://cdn.v2ex.com/avatar/5183/7925/102279_large.png?m=1574731643"
      }, 
      "url": "https://www.v2ex.com/t/1094183", 
      "title": "flatter.cn \u662f\u56fd\u5185\u5916\u5305\u516c\u53f8\u7684\u7f51\u7ad9\u4e48", 
      "id": "https://www.v2ex.com/t/1094183", 
      "date_published": "2024-12-01T15:33:58+00:00", 
      "content_html": "<p>\u5f00\u5934\u53e0\u4e2a\u7532, \u7eaf\u5c5e\u597d\u5947,\u6ca1\u6709\u4efb\u4f55\u6076\u610f\u7684\u5206\u6790\u548c\u731c\u6d4b,\u6240\u6709\u65e0\u507f\u3001\u8ba4\u771f\u3001\u9ed8\u9ed8\u5949\u732e\u7684\u4eba\u4eec\u90fd\u662f\u5e94\u8be5\u88ab\u5c0a\u91cd\u7684.</p>\n<p>\u56e0\u4e3a flutter.dev \u7684\u5b98\u65b9\u6587\u6863\u6709\u6307\u5411 <a href=\"http://flutter.cn\" rel=\"nofollow\">flutter.cn</a>,\u4e00\u76f4\u4ee5\u4e3a\u90fd\u662f\u8c37\u6b4c\u5b98\u65b9\u5728\u8fd0\u4f5c.\n\u7136\u540e\u65e0\u804a\u5237\u5230 <a href=\"http://flutter.cn\" rel=\"nofollow\">flutter.cn</a> \u7684\u5de5\u4fe1\u90e8\u5907\u6848\u53f7, \u60f3\u770b\u770b\u662f\u4e0d\u662f \u8c37\u6b4c\u4e2d\u56fd\u5efa\u8bbe\u7684, \u7ed3\u679c\u53d1\u73b0\u662f\u4e00\u5bb6\u56fd\u5185\u5916\u5305\u516c\u53f8\u6240\u6709,\u8fd9\u5bb6\u516c\u53f8\u8fd8\u6301\u6709 <a href=\"http://dart.cn\" rel=\"nofollow\">dart.cn</a> \u76f8\u5173\u57df\u540d\u7684\u7f51\u7ad9.</p>\n<p>\u6839\u636e\u66f4\u591a\u4fe1\u606f\u663e\u793a, <a href=\"http://flutter.cn\" rel=\"nofollow\">flutter.cn</a> \u662f\u7531 CFUG (China Flutter User Group) \u793e\u533a\u53d1\u8d77\u5efa\u7acb\u7684, \u4f46\u5728 CFUG \u7684\u7b80\u4ecb\u548c\u611f\u8c22\u540d\u5355\u91cc, \u5374\u6ca1\u6709\u770b\u5230\u8fd9\u5bb6\u56fd\u5185\u516c\u53f8\u7684\u540d\u79f0. </p>\n<p>\u4e0d\u77e5\u9053\u57df\u540d\u662f\u79df\u7528\u8fd8\u662f\u6350\u8d60\u5462.</p>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/murmurkerman", 
        "name": "murmurkerman", 
        "avatar": "https://cdn.v2ex.com/gravatar/72468882f057f49306771c2ad9306629?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1092746", 
      "title": "Flutter GoRouter \u5982\u4f55\u5b9e\u73b0 SingleTop", 
      "id": "https://www.v2ex.com/t/1092746", 
      "date_published": "2024-11-26T05:50:40+00:00", 
      "content_html": "<p>\u6709\u4e9b\u9875\u9762\u9700\u8981\u4fdd\u6301\u5355\u4f8b\uff0c\u6bd4\u5982\uff1a\u5386\u53f2 -&gt; \u8be6\u60c5 -&gt; \u5386\u53f2-&gt; \u8be6\u60c5\uff0c\u5728\u8fd4\u56de\u7684\u65f6\u5019\u9700\u8981\u591a\u6b21\u8fd4\u56de\u5386\u53f2\u9875\u9762\u548c\u8be6\u60c5\u9875\u9762,\u671f\u671b\u7684\u573a\u666f\u662f\u5386\u53f2\u9875\u9762\u548c\u8be6\u60c5\u9875\u9762\u90fd\u662f\u5355\u4f8b\uff0c\u5047\u5982\u4e00\u4e2a\u7528\u6237\u7684\u8def\u5f84\u662f\uff1a</p>\n<ol>\n<li>\u4e3b\u9875 -&gt; \u5386\u53f2 -&gt; \u8be6\u60c5 -&gt; \u5386\u53f2\uff0c\u90a3\u4e48\u8def\u7531\u6808\u5e94\u8be5\u662f \u4e3b\u9875 -&gt; \u5386\u53f2\u3002</li>\n<li>\u4e3b\u9875 -&gt; \u5386\u53f2 -&gt; \u8be6\u60c5 -&gt; \u5386\u53f2 -&gt; \u8be6\u60c5\uff0c\u90a3\u4e48\u8def\u7531\u6808\u5e94\u8be5\u662f \u4e3b\u9875 -&gt; \u5386\u53f2 -&gt; \u8be6\u60c5</li>\n</ol>\n<p>\u66ff\u6362 Router \u5b9e\u73b0\uff0c\u6bd4\u5982 AutoRoute \u4e0d\u592a\u73b0\u5b9e\uff0c\u6709\u592a\u591a\u9875\u9762\u4e86\uff0c\u6d4b\u8bd5\u5de5\u4f5c\u91cf\u5f88\u5927\u3002</p>\n<p>GoRouter \u672c\u8eab\u53ea\u652f\u6301<code>push</code>, <code>pushReplacement</code>, <code>go</code>, <code>replace</code>, <code>pop</code>\u3002</p>\n<pre><code>  RouteMatchList _updateRouteMatchList(\n    RouteMatchList newMatchList, {\n    required RouteMatchList? baseRouteMatchList,\n    required Completer&lt;Object?&gt;? completer,\n    required NavigatingType type,\n  }) {\n    switch (type) {\n      case NavigatingType.push:\n        return baseRouteMatchList!.push(\n          ImperativeRouteMatch(\n            pageKey: _getUniqueValueKey(),\n            completer: completer!,\n            matches: newMatchList,\n          ),\n        );\n      case NavigatingType.pushReplacement:\n        final RouteMatch routeMatch = baseRouteMatchList!.last;\n        return baseRouteMatchList.remove(routeMatch).push(\n              ImperativeRouteMatch(\n                pageKey: _getUniqueValueKey(),\n                completer: completer!,\n                matches: newMatchList,\n              ),\n            );\n      case NavigatingType.replace:\n        final RouteMatch routeMatch = baseRouteMatchList!.last;\n        return baseRouteMatchList.remove(routeMatch).push(\n              ImperativeRouteMatch(\n                pageKey: routeMatch.pageKey,\n                completer: completer!,\n                matches: newMatchList,\n              ),\n            );\n      case NavigatingType.go:\n        return newMatchList;\n      case NavigatingType.restore:\n        // Still need to consider redirection.\n        return baseRouteMatchList!.uri.toString() != newMatchList.uri.toString()\n            ? newMatchList\n            : baseRouteMatchList;\n    }\n  }\n</code></pre>\n"
    }, 
    {
      "author": {
        "url": "https://www.v2ex.com/member/Dnlyao", 
        "name": "Dnlyao", 
        "avatar": "https://cdn.v2ex.com/gravatar/b00f1ae99ee8c2e17dd68f97a696b308?s=73&d=retro"
      }, 
      "url": "https://www.v2ex.com/t/1088864", 
      "title": "[\u6c42\u52a9]\u4e3a\u4ec0\u4e48 flutter \u8c03\u8bd5\u6a21\u5f0f\u53ef\u4ee5\u3002\u53d1\u5e03\u6a21\u5f0f\u6253\u5305\u51fa\u6765\u7684\u5219\u65e0\u6cd5\u8fd0\u884c\u3002", 
      "id": "https://www.v2ex.com/t/1088864", 
      "date_published": "2024-11-12T06:44:55+00:00", 
      "content_html": "\u73af\u5883\u4f7f\u7528 gradle-7.5-all.zip \uff0c<br />buildscript {<br />    ext.kotlin_version = '1.9.10'<br />    repositories {<br />        maven {<br />            url '<a target=\"_blank\" href=\"https://maven.aliyun.com/repository/public/'\" rel=\"nofollow noopener\">https://maven.aliyun.com/repository/public/'</a><br />        }<br />        google()<br />        mavenCentral()<br />        maven { url \"<a target=\"_blank\" href=\"https://jitpack.io\" rel=\"nofollow noopener\">https://jitpack.io</a>\" }//maven \u4ed3\u5e93<br />    }<br /><br />    dependencies {<br />        classpath '<a target=\"_blank\" href=\"http://com.android.tools.build\" rel=\"nofollow noopener\">com.android.tools.build</a>:gradle:7.2.0'<br />        classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\"<br />    }<br />}<br />\u4f7f\u7528 flutter_blue: ^0.8.0 \u4f9d\u8d56\u3002\u53d1\u5e03\u6a21\u5f0f\u67e5\u770b\u4e0d\u5230\u4ec0\u4e48\u62a5\u9519\u3002\u7136\u540e\u518d\u8c03\u8bd5\u6a21\u5f0f\uff0c\u6b63\u5e38\u8c03\u8d77\u84dd\u7259\u670d\u52a1\u3002"
    }
  ]
}