
\u60c5\u666f\u8bd7\u8bcd app \u8de8\u5e73\u53f0\u5f00\u53d1\uff0c\n\u4f20\u9001\u95e8\nhttps://appgallery.huawei.com/app/detail?id=app.wushu.poes&channelId=SHARE&source=appshare
\n\u7f51\u9875\u7248\uff0c\npoe.vogov.cn\nFlutter web \u597d\u591a\u4e0d\u652f\u6301\uff0c\u6211\u5272\u4e86\u5f88\u591a\u529f\u80fd
\n\u5b89\u5353\u7248\nhttps://luat.lanzouq.com/iLF4e3mcld5c
\n\u9644\u4e00\u4e2a \u9e3f\u8499 Flutter sdk \u94fe\u63a5:\nhttps://gitcode.com/openharmony-tpc/flutter_flutter
\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": "t/1203414" }, { "author": { "url": "member/hzdt", "name": "hzdt", "avatar": "https://cdn.v2ex.com/gravatar/6309548f9dab55dd7ae8e802cbe46fa6?s=73&d=retro" }, "url": "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": "t/1202237" }, { "author": { "url": "member/Dnlyao", "name": "Dnlyao", "avatar": "https://cdn.v2ex.com/gravatar/b00f1ae99ee8c2e17dd68f97a696b308?s=73&d=retro" }, "url": "t/1191869", "title": "USB \u6444\u50cf\u5934\u6c42\u52a9\u3002", "id": "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": "member/Dnlyao", "name": "Dnlyao", "avatar": "https://cdn.v2ex.com/gravatar/b00f1ae99ee8c2e17dd68f97a696b308?s=73&d=retro" }, "url": "t/1191253", "title": "flutter \u5f15\u5165 aar \u5305\uff0c\u8fd0\u884c\u62a5\u9519\uff0c\u7248\u672c 3.38.9", "id": "t/1191253", "date_published": "2026-02-06T08:41:02+00:00", "content_html": "* What went wrong:\u6316\u4e86\u5f88\u4e45\u7684\u5751\u7ec8\u4e8e\u586b\u4e0a\u4e86\uff0c\u76ee\u524d\u53ea\u5b9e\u73b0\u4e86\u8bfb\u3002
\n\u987a\u4fbf\u8fd8\u505a\u4e86\u4e2a Dart \u7684 Redis Client
\n\u8fd8\u6709\u5f88\u591a\u95ee\u9898\u6ca1\u89e3\u51b3\uff0c\u6682\u65f6\u4e0d\u53d1\u5e03
\n

https://github.com/smithgoo/AutoTestingUI
\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]
\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
\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": "t/1177523" }, { "author": { "url": "member/ybz", "name": "ybz", "avatar": "https://cdn.v2ex.com/avatar/70c6/14d6/217134_large.png?m=1764655228" }, "url": "t/1176383", "title": "\u5199\u4e86\u4e00\u4e2a flutter \u7684\u72b6\u6001\u7ba1\u7406\u5e93\uff0c\u5927\u5bb6\u53c2\u8c0b\u53c2\u8c0b\u3002", "id": "t/1176383", "date_published": "2025-12-02T06:15:56+00:00", "content_html": "https://github.com/yiiim/flutter_mvc
\nflutter \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
\n\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
\n\n" }, { "author": { "url": "member/KunpengTalk", "name": "KunpengTalk", "avatar": "https://cdn.v2ex.com/gravatar/7fbb18491ca7c5c4df8b9ef68779f59b?s=73&d=retro" }, "url": "t/1173262", "date_modified": "2025-11-17T09:36:52+00:00", "content_html": "https://github.com/jwangkun/zhuque-flutter\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\nhttps://imgloc.com/image/CfaPj1\nhttps://imgloc.com/image/CfaDGb\nhttps://imgloc.com/image/CfaQ6n\nhttps://imgloc.com/image/CfaWlL
\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": "t/1173262" }, { "author": { "url": "member/hubianluanma", "name": "hubianluanma", "avatar": "https://cdn.v2ex.com/avatar/3a2f/2db0/736843_large.png?m=1750909443" }, "url": "t/1168823", "date_modified": "2025-10-28T02:52:22+00:00", "content_html": "\u672c\u4eba\u6280\u672f\u6808\u60c5\u51b5\uff1a
\n\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
\n\u63d0\u524d\u611f\u8c22\uff01\uff01\uff01
\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": "t/1168823" }, { "author": { "url": "member/sealoyal", "name": "sealoyal", "avatar": "https://cdn.v2ex.com/avatar/f0e6/54e2/664067_large.png?m=1761571685" }, "url": "t/1168752", "date_modified": "2025-10-27T13:33:39+00:00", "content_html": "\u95f2\u7740\u6ca1\u4e8b\u5f00\u53d1\u4e00\u6b3e\u7f51\u6587\u5199\u4f5c\u5e94\u7528\u2014\u2014 Letter Studio \u3002
\n\u4f7f\u7528 Flutter \u5f00\u53d1\u7684\uff08\u53c8\u589e\u52a0\u4e86\u4e00\u4e2a\u65b0\u6280\u80fd\uff09\uff0c\u53ef\u4ee5\u5728 windows\uff08 Mac \u4e0a\u8fd8\u6ca1\u53d1\u5e03\ud83d\ude02) \u4e0a\u4f7f\u7528\u3002
\u4e3b\u8981\u662f\u672c\u5730\u4f7f\u7528\uff0c\u6570\u636e\u5b58\u5728\u672c\u5730\u3002
\n\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
\n\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
\n\u539f\u672c\u6253\u7b97\u4f7f\u7528 Avalonia \u5199\u7684\uff0c\u4f46\u662f\u51fa\u4e8e\u751f\u6001\u95ee\u9898\uff0c\u6700\u7ec8\u8fd8\u662f\u9009\u62e9\u4e86 Flutter \uff0c\u76ee\u524d\u4f7f\u7528\u8fd8\u6ca1\u6709\u9047\u5230\u4ec0\u4e48\u95ee\u9898\u3002
\u6b22\u8fce\u5927\u5bb6\u4e0b\u8f7d\u4ea4\u6d41\uff01\uff08\u4e0b\u8f7d\u5730\u5740\u5728\u6587\u672b\uff09
\n\u8f6f\u4ef6\u4e0b\u8f7d\u5730\u5740\uff1aletter studio
\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": "t/1168752" }, { "author": { "url": "member/MadridLee", "name": "MadridLee", "avatar": "https://cdn.v2ex.com/gravatar/ee641585784cecb1c8f4804e7943b270?s=73&d=retro" }, "url": "t/1166574", "date_modified": "2025-10-18T02:34:01+00:00", "content_html": "\u524d\u63d0\u6761\u4ef6\uff1a\u6211\u9879\u76ee\u4f7f\u7528 flutter \u505a\u4e86 windows \u5ba2\u6237\u7aef\uff0c\u7248\u672c 3.24.3 \u3002
\n\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
\n\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
\n", "date_published": "2025-10-18T02:32:49+00:00", "title": "\u8bf7\u6559 flutter-windows \u5ba2\u6237\u7aef\u767d\u5c4f\u95ee\u9898\u3002", "id": "t/1166574" }, { "author": { "url": "member/lumyx", "name": "lumyx", "avatar": "https://cdn.v2ex.com/gravatar/4c74917e5d700699cf6620b4b00f25b9?s=73&d=retro" }, "url": "t/1164675", "date_modified": "2025-10-12T11:57:44+00:00", "content_html": "\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\nhttps://pub.dev/packages/view_model
\n\u4f18\u70b9\u662f\u4f7f\u7528\u7b80\u5355, \u975e\u5e38\u7eaf\u7cb9\uff0c \u53ea\u662f view_model \u6ca1\u6709\u5176\u4ed6\u82b1\u91cc\u82b1\u54e8\u7684\u6982\u5ff5\u3002
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 => _message;\n\n int get counter => _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\nViewModelFactory \u8d1f\u8d23\u5b9e\u4f8b\u5316 ViewModel \u3002\u6bcf\u4e2a ViewModel \u7c7b\u578b\u901a\u5e38 \u9700\u8981\u4e00\u4e2a\u5bf9\u5e94\u7684 Factory \u3002
\nimport 'package:view_model/view_model.dart';\n// \u5047\u8bbe MySimpleViewModel \u5df2\u5982\u4e0a\u5b9a\u4e49\n\nclass MySimpleViewModelFactory with ViewModelFactory<MySimpleViewModel> {\n @override\n MySimpleViewModel build() {\n // \u8fd4\u56de\u4e00\u4e2a\u65b0\u7684 MySimpleViewModel \u5b9e\u4f8b\n return MySimpleViewModel();\n }\n}\n\n\u901a\u8fc7 watchViewModel \u76f4\u63a5\u5728 State \u4e2d\u4f7f\u7528.
class _MyPageState extends State<MyPage>\n with ViewModelStateMixin<MyPage> {\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<MySimpleViewModel>(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\n\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 ValueNotitifierBuilder : https://github.com/lwj1994/flutter_view_model/issues/13
\u5b8c\u6574\u7684\u6587\u6863\uff1a https://github.com/lwj1994/flutter_view_model/blob/main/packages/view_model/README_ZH.md
\n", "date_published": "2025-10-12T11:57:31+00:00", "title": "\u6700\u7b80\u5355\u7684\u72b6\u6001\u7ba1\u7406\u5e93 view_model", "id": "t/1164675" }, { "author": { "url": "member/dnslint", "name": "dnslint", "avatar": "https://cdn.v2ex.com/gravatar/4bc11af8c4258d719e67990f14e23bab?s=73&d=retro" }, "url": "t/1162957", "date_modified": "2025-09-30T10:14:13+00:00", "content_html": "\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
\n\u4e0d\u662f\u622a\u65ad\u5c31\u4f1a\u6324\u5728\u4e00\u8d77\uff0c\u5e73\u53f0\u662f\u5b89\u5353 12
\n\nflutter_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\n", "date_published": "2025-09-30T10:13:19+00:00", "title": "\u7b2c\u4e00\u6b21\u5199 flutter app \u6709\u4e2a\u7591\u95ee", "id": "t/1162957" }, { "author": { "url": "member/burden7", "name": "burden7", "avatar": "https://cdn.v2ex.com/avatar/4920/a5db/591875_large.png?m=1699697081" }, "url": "t/1150134", "title": "Flutter in_app_purchase \u5185\u8d2d\u5728 iOS \u4e0a\u7684\u5e94\u7528\u603b\u7ed3", "id": "t/1150134", "date_published": "2025-08-05T08:34:33+00:00", "content_html": "\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
\nApple \u7684\u5185\u8d2d\u673a\u5236\u5b58\u5728\u4e24\u4e2a\u7248\u672c\uff1aStoreKit V1 \u548cStoreKit V2
\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
\n\u5173\u4e8e\u8bf7\u6c42\u540e\u83b7\u53d6\u5230\u7684\u4ea4\u6613\u4fe1\u606f\uff0cV1 V2 \u4e5f\u6709\u4e0d\u540c\uff1a
\nV1 \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
\nV2 \u7248\u672c\uff1a\u82e5\u8c03\u7528inApps/v1/verifyTransaction\u53ef\u83b7\u5f97\u672c\u6b21\u7684\u4ea4\u6613\u4fe1\u606f\uff1b\u82e5\u8c03\u7528inApps/v2/history\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
\u6b64\u90e8\u5206\u4e5f\u6709\u4e0d\u540c\u7684\u89e3\u51b3\u65b9\u6848\uff1a
\n\u5728 Flutter \u51fa\u6765\u4e4b\u524d
\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
\u5927\u5982\u6dd8\u5b9d\uff08 weex \uff09\uff0c\u5c0f\u5982\u67d0\u4e2a app \u90fd\u5728\u4f7f\u7528 Hybrid
\nHybrid \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
\n\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
\n\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
\n\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
\nFlutter \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
\nSkia \u5f15\u64ce\u52a0\u6301\uff0c\u975e\u539f\u751f\u6e32\u67d3\uff0c\u80dc\u4f3c\u539f\u751f\u7684\u6027\u80fd
\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
\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
\n" }, { "author": { "url": "member/ybz", "name": "ybz", "avatar": "https://cdn.v2ex.com/avatar/70c6/14d6/217134_large.png?m=1764655228" }, "url": "t/1141106", "title": "Ubuntu \u56e2\u961f\u4e3a\u4ec0\u4e48\u65e0\u507f\u7ed9 Flutter \u5199\u684c\u9762\u591a\u7a97\u53e3\u529f\u80fd\uff1f", "id": "t/1141106", "date_published": "2025-06-26T01:28:38+00:00", "content_html": "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 https://github.com/flutter/flutter/pull/168728 \uff09\uff0c \u5168\u90e8\u4ee3\u7801\u90fd\u662f\u7531 Ubuntu \u56e2\u961f\u7f16\u5199\u7684\u3002
\n\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
\nhttps://github.com/flutter/flutter/issues/142845#issuecomment-2435738214
\n" }, { "author": { "url": "member/nicefrp", "name": "nicefrp", "avatar": "https://cdn.v2ex.com/avatar/0f86/0e0b/715625_large.png?m=1729268396" }, "url": "t/1141066", "title": "\u8bf7\u6559\uff1a flutter \u6216 Android \u66f4\u65b0\u3001\u70ed\u66f4\u65b0\u65b9\u6848", "id": "t/1141066", "date_published": "2025-06-25T14:12:31+00:00", "content_html": "\u8bf7\u6559\uff1aflutter \u6216 Android \u66f4\u65b0\u3001\u70ed\u66f4\u65b0\u65b9\u6848\uff0c\u8c22\u8c22\u5404\u4f4d\u5927\u4f6c\u3002
\n" }, { "author": { "url": "member/justtokankan", "name": "justtokankan", "avatar": "https://cdn.v2ex.com/gravatar/093604938501985c15eeae3b64b8afb3?s=73&d=retro" }, "url": "t/1139907", "title": "\u6c42\u4e00\u4efd iOS \u6216\u8005 Flutter \u517c\u804c", "id": "t/1139907", "date_published": "2025-06-20T06:05:44+00:00", "content_html": "\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
\n" }, { "author": { "url": "member/burden7", "name": "burden7", "avatar": "https://cdn.v2ex.com/avatar/4920/a5db/591875_large.png?m=1699697081" }, "url": "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": "t/1139079", "date_published": "2025-06-17T02:28:56+00:00", "content_html": "\u6211\u901a\u8fc7in_app_purchase\u62ff\u5230PurchaseDetails\u540e\uff0c\u6211\u628a\u5176\u4e2d\u7684serverVerificationData\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
Deprecated\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
\n\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
\n\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
\n2/2
\n" }, { "author": { "url": "member/rocmax", "name": "rocmax", "avatar": "https://cdn.v2ex.com/gravatar/34078d8614bf9197df6c6de09dfc8e58?s=73&d=retro" }, "url": "t/1138114", "date_modified": "2025-06-12T09:09:36+00:00", "content_html": "\u4e3a\u4e86\u5728 ios \u4e0a\u5b9e\u73b0 liguid glass \u3002
\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": "t/1138114" }, { "author": { "url": "member/jjtom807564472", "name": "jjtom807564472", "avatar": "https://cdn.v2ex.com/avatar/ac76/8b5d/257628_large.png?m=1751618081" }, "url": "t/1133683", "title": "\u4e0a\u67b6 Play store \u7684\u95ee\u9898...", "id": "t/1133683", "date_published": "2025-05-23T00:18:18+00:00", "content_html": "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
\n" }, { "author": { "url": "member/jjtom807564472", "name": "jjtom807564472", "avatar": "https://cdn.v2ex.com/avatar/ac76/8b5d/257628_large.png?m=1751618081" }, "url": "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": "t/1131839", "date_published": "2025-05-14T23:06:44+00:00", "content_html": "\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
\n\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
\n" }, { "author": { "url": "member/Asuler", "name": "Asuler", "avatar": "https://cdn.v2ex.com/avatar/ec35/911a/420115_large.png?m=1749794334" }, "url": "t/1130359", "title": "App \u5f00\u53d1\u65b0\u624b\u8bf7\u6559\u4e00\u4e2a flutter \u5f00\u53d1\u4e2d\u7684\u5b89\u5353\u95ee\u9898", "id": "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\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\n\nFAILURE: Build failed with an exception.\n\n- 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).
\n
\n\nBUG! exception in phase 'semantic analysis' in source unit 'BuildScript' Unsupported class file major version 65
\n
\n\n- Try:
\n
\n\nRun 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.
\n
\n\n- Get more help at https://help.gradle.org
\n
\nBUILD FAILED in 8s\nRunning Gradle task 'assembleRelease'... 9.3s
\n\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 https://flutter.dev/to/java-gradle-incompatibility. \u2502\n\u2502 \u2502\n\u2502 Otherwise, to fix this issue, first, check the Java version used by Flutter by running flutter \u2502 \u2502 doctor --verbose. \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 https://docs.gradle.org/current/userguide/compatibility.html#java \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
\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
\n" }, { "author": { "url": "member/nicefrp", "name": "nicefrp", "avatar": "https://cdn.v2ex.com/avatar/0f86/0e0b/715625_large.png?m=1729268396" }, "url": "t/1128149", "title": "\u8bf7\u6559\uff1a\u5927\u4f6c\u4eec 2025 \u5e74 Flutter \u7528\u54ea\u4e2a\u8def\u7531\uff1f", "id": "t/1128149", "date_published": "2025-04-26T02:36:39+00:00", "content_html": "\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
\n\u4e0a\u9762\u662f AI \u7ed9\u6211\u63a8\u8350\u7684\uff0c\u60f3\u95ee\u95ee\u5927\u4f6c\u4eec\u5b9e\u9645\u60c5\u51b5\u3002
\n" }, { "author": { "url": "member/Lockroach", "name": "Lockroach", "avatar": "https://cdn.v2ex.com/gravatar/f61420767d3d2dfaa388a8077ba2929f?s=73&d=retro" }, "url": "t/1126429", "date_modified": "2025-04-18T09:43:15+00:00", "content_html": "\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\nhttps://github.com/flutter/flutter/issues/150536\n\u4f46\u662f\u6709\u53e6\u4e00\u4e2a\u9e3f\u8499\u5f00\u53d1\u8005\u793e\u533a\u7684\u56de\u7b54\u4f3c\u4e4e\u8bf4\u662f\u652f\u6301\u7684\nhttps://developer.huawei.com/consumer/cn/forum/topic/0208152991384243753
\n\u6709\u6ca1\u6709 flutter \u5f00\u53d1\u8005\u5bf9\u8fd9\u4e2a\u6bd4\u8f83\u4e86\u89e3\u7684\uff1f
\n", "date_published": "2025-04-18T04:11:02+00:00", "title": "flutter \u652f\u6301 harmony os next \u5417", "id": "t/1126429" }, { "author": { "url": "member/sawyeratfoxit", "name": "sawyeratfoxit", "avatar": "https://cdn.v2ex.com/gravatar/9bea8bafe2a8ac4731bb3309822fca36?s=73&d=retro" }, "url": "t/1125118", "date_modified": "2025-04-13T09:20:06+00:00", "content_html": "\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: @randomstream
\n\u5c97\u4f4d\u8981\u6c42\uff1a
\n\u5199\u524d\u540e\u7aef\u90fd\u662f\u8fde linux \u8fdc\u7a0b\u5f00\u53d1 , app \u5374\u4e0d\u80fd\u611f\u89c9\u7565\u6709\u4e9b\u9057\u61be
\n\u6709\u7814\u7a76\u8fc7\u7684\u5144\u5f1f\u5417 ?
\n" }, { "author": { "url": "member/qinconquer", "name": "qinconquer", "avatar": "https://cdn.v2ex.com/gravatar/c900fd3510a5ce0034e3304b40ddea9e?s=73&d=retro" }, "url": "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\u5982\u679c\u53ef\u4ee5\uff0c\u611f\u89c9 Flutter \u6f5c\u529b\u65e0\u9650...
\n", "date_published": "2025-03-05T02:44:08+00:00", "title": "Flutter \u5df2\u7ecf\u53ef\u4ee5\u5f00\u53d1\u9e3f\u8499\u4e86\u5417", "id": "t/1115994" }, { "author": { "url": "member/asovo888", "name": "asovo888", "avatar": "https://cdn.v2ex.com/avatar/d904/8020/171056_large.png?m=1751600986" }, "url": "t/1115554", "date_modified": "2025-03-03T09:17:30+00:00", "content_html": "\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
\n\n\n
\n
\n
\n
\n
\n
\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
\n" }, { "author": { "url": "member/iorilu", "name": "iorilu", "avatar": "https://cdn.v2ex.com/avatar/7121/0eb9/222090_large.png?m=1773302217" }, "url": "t/1113490", "date_modified": "2025-02-22T08:47:45+00:00", "content_html": "\u56e0\u4e3a flutter \u8de8\u5e73\u53f0\u5f97\u539f\u56e0, \u6211\u73b0\u5728\u4e5f\u60f3\u5c1d\u8bd5\u7528 flutter \u505a\u684c\u9762\u8f6f\u4ef6
\n\u4e00\u4e2a\u95ee\u9898\u5c31\u662f flutter \u7531\u4e8e\u5f00\u59cb\u662f\u4e3a\u4e86\u79fb\u52a8\u5e73\u53f0\u51c6\u5907\u5f97
\n\u867d\u7136\u73b0\u5728\u652f\u6301\u684c\u9762\u7aef, \u4f46\u5f88\u663e\u7136\u98ce\u683c\u8fd8\u662f\u79fb\u52a8\u5f97
\n\u5c24\u5176\u4e0d\u7b26\u5408 windows \u98ce\u683c, \u6309\u94ae\u90fd\u662f\u5706\u89d2\u7b49\u7b49
\n\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
\n\u6709\u6ca1\u6709\u6709\u7ecf\u9a8c\u5f97\u8bf4\u8bf4\u770b, \u6211\u4e3b\u8981\u662f\u60f3\u505a\u51fa\u7c7b\u4f3c vscode \u98ce\u683c
\n\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
\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": "t/1113490" }, { "author": { "url": "member/linora", "name": "linora", "avatar": "https://cdn.v2ex.com/avatar/f050/2388/164530_large.png?m=1735785402" }, "url": "t/1112094", "title": "MBA M3 16GB \u80fd\u73a9 flutter \u5f00\u53d1\u5417\uff1f", "id": "t/1112094", "date_published": "2025-02-17T10:04:10+00:00", "content_html": "RT \uff0c\u4f1a\u4e0d\u4f1a\u592a\u70ed\uff1f
\n" }, { "author": { "url": "member/xuxiake", "name": "xuxiake", "avatar": "https://cdn.v2ex.com/gravatar/ca210da1ef83b9c21c0ba7ca469fabc3?s=73&d=retro" }, "url": "t/1111264", "date_modified": "2025-02-13T10:04:18+00:00", "content_html": "\n\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
\n\n\n", "date_published": "2025-02-13T09:59:08+00:00", "title": "\u771f\u7684\u65e0\u529b\u5410\u69fd flutter \u4e86", "id": "t/1111264" }, { "author": { "url": "member/jedeft", "name": "jedeft", "avatar": "https://cdn.v2ex.com/gravatar/32c4cbaf6d15745f0c2582540a7038b7?s=73&d=retro" }, "url": "t/1110802", "date_modified": "2025-02-11T17:19:53+00:00", "content_html": "\u5fd8\u8bb0\u8bf4\u95ee\u9898\u4e86\uff0c\u9884\u89c8\u753b\u9762\u65cb\u8f6c\u4e86-90 \u5ea6
\n
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
\n\u8c22\u8c22
\n", "date_published": "2025-02-11T17:13:27+00:00", "title": "\u6709 flutter \u5927\u4f6c\u4e48\uff1f\u8bf7\u6559\u51e0\u4e2a\u95ee\u9898", "id": "t/1110802" }, { "author": { "url": "member/Variazioni", "name": "Variazioni", "avatar": "https://cdn.v2ex.com/avatar/968b/446f/269903_large.png?m=1713835656" }, "url": "t/1109474", "date_modified": "2025-02-06T23:53:23+00:00", "content_html": "\u4f8b\u5982\u4f7f\u7528 GestureDetectorhttps://medium.com/flutter/whats-new-in-flutter-3-27-28341129570c
\n\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
\n" }, { "author": { "url": "member/jiuzhougege", "name": "jiuzhougege", "avatar": "https://cdn.v2ex.com/avatar/f424/f3fd/687771_large.png?m=1732367926" }, "url": "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": "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": "member/taosx", "name": "taosx", "avatar": "https://cdn.v2ex.com/avatar/7a53/0ddb/238974_large.png?m=1733232739" }, "url": "t/1094779", "title": "flutter \u5b9e\u73b0\u8fd9\u6837\u7684\u529f\u80fd\uff0c\u7ea2\u5305\u611f\u8c22", "id": "t/1094779", "date_published": "2024-12-03T13:34:22+00:00", "content_html": "
\n\u540e\u53f0\u7ed9\u4e86\u4e2a\u79d2\u949f\u7684\u6570\u636e
\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.
\n\u56e0\u4e3a flutter.dev \u7684\u5b98\u65b9\u6587\u6863\u6709\u6307\u5411 flutter.cn,\u4e00\u76f4\u4ee5\u4e3a\u90fd\u662f\u8c37\u6b4c\u5b98\u65b9\u5728\u8fd0\u4f5c.\n\u7136\u540e\u65e0\u804a\u5237\u5230 flutter.cn \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 dart.cn \u76f8\u5173\u57df\u540d\u7684\u7f51\u7ad9.
\n\u6839\u636e\u66f4\u591a\u4fe1\u606f\u663e\u793a, flutter.cn \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.
\n\u4e0d\u77e5\u9053\u57df\u540d\u662f\u79df\u7528\u8fd8\u662f\u6350\u8d60\u5462.
\n" }, { "author": { "url": "member/murmurkerman", "name": "murmurkerman", "avatar": "https://cdn.v2ex.com/gravatar/72468882f057f49306771c2ad9306629?s=73&d=retro" }, "url": "t/1092746", "title": "Flutter GoRouter \u5982\u4f55\u5b9e\u73b0 SingleTop", "id": "t/1092746", "date_published": "2024-11-26T05:50:40+00:00", "content_html": "\u6709\u4e9b\u9875\u9762\u9700\u8981\u4fdd\u6301\u5355\u4f8b\uff0c\u6bd4\u5982\uff1a\u5386\u53f2 -> \u8be6\u60c5 -> \u5386\u53f2-> \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
\n\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
\nGoRouter \u672c\u8eab\u53ea\u652f\u6301push, pushReplacement, go, replace, pop\u3002
RouteMatchList _updateRouteMatchList(\n RouteMatchList newMatchList, {\n required RouteMatchList? baseRouteMatchList,\n required Completer<Object?>? 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\n" }, { "author": { "url": "member/Dnlyao", "name": "Dnlyao", "avatar": "https://cdn.v2ex.com/gravatar/b00f1ae99ee8c2e17dd68f97a696b308?s=73&d=retro" }, "url": "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": "t/1088864", "date_published": "2024-11-12T06:44:55+00:00", "content_html": "\u73af\u5883\u4f7f\u7528 gradle-7.5-all.zip \uff0c