{"id":334,"date":"2025-07-01T21:36:11","date_gmt":"2025-07-01T13:36:11","guid":{"rendered":"https:\/\/www.bqmz001.top\/?p=334"},"modified":"2025-07-01T21:36:11","modified_gmt":"2025-07-01T13:36:11","slug":"flutter-%e6%95%b4%e4%b8%aa%e7%bc%96%e8%be%91%e9%a1%b5%e9%9d%a2%ef%bc%9f","status":"publish","type":"post","link":"https:\/\/www.bqmz001.top\/index.php\/2025\/07\/01\/flutter-%e6%95%b4%e4%b8%aa%e7%bc%96%e8%be%91%e9%a1%b5%e9%9d%a2%ef%bc%9f\/","title":{"rendered":"flutter \u6574\u4e2a\u7f16\u8f91\u9875\u9762\uff1f"},"content":{"rendered":"<p>\u5176\u5b9e\u8be6\u60c5\u9875\uff0c\u5c31\u6709\u70b9\u7f16\u8f91\u7684\u610f\u5473\u4e86~<br \/>\u6240\u4ee5\u7f16\u8f91\u9875\u5c31\u662f\u8be6\u60c5\u9875\u6539\u51fa\u6765\u7684\uff01<br \/>\u6539\u4e86\u70b9\u5565\uff0c\u5176\u5b9e\u4e5f\u6709\u8bf4\u7684\u3002<\/p>\n<h2>1\u3001\u628a\u6027\u522b\u4ece\u6587\u672c\u6846\u6362\u6210\u5355\u9009<\/h2>\n<pre><code>\/\/\u4e0a\u65b9\u5b9a\u4e49\u6027\u522b\u9009\u9879\n final List&lt;Map&lt;String, dynamic&gt;&gt; genderOptions = [\n    {&#039;value&#039;: 0, &#039;label&#039;: &#039;\u5973&#039;},\n    {&#039;value&#039;: 1, &#039;label&#039;: &#039;\u7537&#039;},\n  ];\n\n......\n\/\/\u4e0b\u9762Widget\u91cc\u8fd9\u4e48\u73a9\uff1a\nchild: DropdownButtonFormField&lt;int&gt;(\n  value: editProvider.contact?.sex,\n  items: genderOptions.map((option) {\n    return DropdownMenuItem&lt;int&gt;(\n      value: option[&#039;value&#039;],\n      child: Text(option[&#039;label&#039;]),\n      );\n  }).toList(),\n  onChanged: (int? newValue) {\n    if (newValue != null) {\n      editProvider.contact?.sex = newValue;\n    }\n  },\n  decoration: const InputDecoration(\n    border: UnderlineInputBorder(),\n    labelText: &#039;\u6027\u522b&#039;,\n    floatingLabelBehavior:\n    FloatingLabelBehavior.auto, \/\/ \u786e\u4fdd\u63d0\u793a\u6587\u5b57\u4e0d\u6d88\u5931\n  ),\n)\n<\/code><\/pre>\n<p>\u524d\u7aef\u540c\u5b66\u8c8c\u4f3c\u6bd4\u8f83\u719f\u6089\u7c7b\u4f3c\u7684\u73a9\u6cd5\u3002<\/p>\n<p>\u770b\u5230\u8fd9\u6709\u4eba\u4f1a\u8bf4\u662f\uff1a\u6570\u636e\u4ece\u54ea\u5192\u51fa\u6765\uff1f<\/p>\n<h2>2\u3001provider\u4e2d\u5bf9\u8c61\u7684\u6539\u52a8<\/h2>\n<pre><code>\/\/\u76f4\u63a5\u6709\u4e00\u4e2a\u66b4\u9732\u51fa\u6765\u7684\u5bf9\u8c61\nContactBean? contact;\n\n\/\/\u7136\u540e\u5728\u8c03\u7528\u63a5\u53e3\u7684\u65f6\u5019\u4e5f\u4f1a\u5c06\u6570\u636e\u76f4\u63a5\u8f6c\u6362\u4e3a\u5bf9\u8c61\n  Future&lt;void&gt; getDetail(int id) async {\n    _error = null;\n    await DioUtil.getInstance().get(\n      &quot;http:\/\/192.168.5.116:20080\/contact\/detail&quot;,\n      {&#039;id&#039;: id},\n      () {\n        _isLoading = true;\n        notifyListeners();\n      },\n      (data) {\n        _isLoading = false;\n        BaseBean bean = BaseBean.fromJson(data);\n        var contact = ContactBean.fromJson(bean.data);\n        this.contact = contact;\n        firstName.text = contact.firstName ?? &#039;&#039;;\n        lastName.text = contact.lastName ?? &#039;&#039;;\n        age.text = contact.age.toString();\n\n        phoneNumber.text = contact.phoneNumber ?? &#039;&#039;;\n        address.text = contact.address ?? &#039;&#039;;\n        notifyListeners();\n      },\n      (reason) {\n        _isLoading = false;\n        _error = reason;\n        notifyListeners();\n      },\n    );\n  }\n<\/code><\/pre>\n<p>\u518d\u52a0\u4e0aTextFormField\u7684onChange\u4e8b\u4ef6\uff0c\u6570\u636e\u548c\u6539\u52a8\u76f4\u63a5\u8d4b\u503c\u7ed9\u8fd9\u4e2a\u5bf9\u8c61\uff0c\u64cd\u4f5c\u8d77\u6765\u4e5f\u65b9\u4fbf\u591a\u4e86\u3002<\/p>\n<h2>\u756a\u5916\u63d2\u64ad\uff1a<code>This _InheritedProviderScope&lt;EditProvider?&gt; widget cannot be marked as needing to build because the framework is already in the process of building widgets.<\/code>\u7684\u62a5\u9519\u5904\u7406<\/h2>\n<p>\u4eba\u8bdd\uff1a\u6211UI\u8fd8\u6ca1\u6784\u5efa\u6570\u636e\u5c31\u54cd\u5e94\u56de\u6765\u4e86\uff01\u6211\u8fd8\u6ca1\u4e1c\u897f\u5462\u81ea\u52a8\u5237\u65b0\u5565\u73a9\u610f\u554a\uff1f<br \/>\u89e3\u51b3\u529e\u6cd5\uff1a<code>WidgetsBinding.instance.addPostFrameCallback<\/code><br \/>\u5728StatefulWidget\u91cc\u7684State\u79c1\u6709\u7c7b\u7684initState\u65b9\u6cd5\u91cc\u7167\u4e0b\u9762\u65b9\u6cd5\u52a0\u4e0a\uff0c\u53ef\u786e\u4fdd\u7ec4\u4ef6\u52a0\u8f7d\u5b8c\u6210\u540e\u518d\u8c03\u7528\u5237\u65b0\u6570\u636e\u7684\u529e\u6cd5\uff0c\u8fd9\u6837\u81ea\u52a8\u5237\u65b0\u4e5f\u6709\u7684\u5237\u554a\uff01\u5b85\u5c11\u4e0d\u4f1a\u8ba9UI\u5c2c\u4f4f\u4e0d\u723d\u7ed9\u4f60\u62a5\u4e2a\u9519\u3002<\/p>\n<pre><code> @override\n  void initState() {\n    super.initState();\n    WidgetsBinding.instance.addPostFrameCallback((_) {\n      final editProvider = Provider.of&lt;EditProvider&gt;(context, listen: false);\n      if (widget.id != null) {\n        editProvider.getDetail(widget.id!);\n      }\n    });\n  }\n<\/code><\/pre>\n<h2>3\u3001\u60f3\u90fd\u4e0d\u6562\u60f3\u7684\u63d0\u4ea4\u529e\u6cd5<\/h2>\n<p>provider\u4e2d\u63d0\u4ea4\u7684\u63a5\u53e3\u662f\u7b26\u5408\u6b63\u5e38\u903b\u8f91\u7684\uff1a<\/p>\n<pre><code>  Future&lt;void&gt; submit(int id) async {\n    await Future.delayed(const Duration(seconds: 2));\n    _error = null;\n    DioUtil.getInstance().addHeader(&quot;token&quot;, &quot;123456789&quot;);\n    await DioUtil.getInstance().post(\n      &quot;http:\/\/192.168.5.116:20080\/contact\/update&quot;,\n          contact!.toJson(),\n          () {\n\n      },\n          (data) {\n\n      },\n          (reason) {\n\n      },\n    );\n  }\n<\/code><\/pre>\n<p>\u4f46\u662f\u554a\uff0c\u4f5c\u4e3a\u4e00\u4e2aAndroid\u4f6c\uff0c\u54ea\u6015\u662f\u6709\u4e86ViewModel\uff0c\u6211\u4e5f\u6ca1\u90a3\u4e48\u6562\u60f3\u6709flutter\u8fd9\u79cd\u5199\u6cd5\uff1a<\/p>\n<pre><code> Future&lt;void&gt; _submit() async {\n    final editProvider = Provider.of&lt;EditProvider&gt;(context, listen: false);\n    final mainProvider = Provider.of&lt;MainProvider&gt;(context, listen: false);\n    \/\/ \u663e\u793a\u52a0\u8f7d Dialog\n    showDialog(\n      context: context,\n      barrierDismissible: false,\n      builder: (context) =&gt; Center(child: Container(\n        width: 100,\n        child:  Dialog(child: Container(height: 100,child: Center(child: CircularProgressIndicator()),)),\n      )),\n    );\n\n    try {\n      if (widget.id != null) {\n        await editProvider.submit(widget.id!);\n        \/\/ \u5173\u95ed Dialog\n        Navigator.of(context, rootNavigator: true).pop();\n        \/\/ \u5173\u95ed\u5f53\u524d\u9875\u9762\n        Navigator.of(context).pop();\n        \/\/ \u901a\u77e5 main.dart \u5237\u65b0\u5217\u8868\n        mainProvider.resetPage();\n        await mainProvider.getListPage(mainProvider.pageNum);\n      }\n    } catch (e) {\n      \/\/ \u5173\u95ed Dialog\n      Navigator.of(context, rootNavigator: true).pop();\n      showToast(&#039;\u63d0\u4ea4\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5&#039;, context: context);\n    }\n  }\n<\/code><\/pre>\n<p>\u8fd9\u4ee3\u7801\u5c31\u662f\u6309\u4e0b\u63d0\u4ea4\u6309\u94ae\u5f39\u51faloading dialog\uff0c\u7b49\u6267\u884c\u5b8c\u6210\u4e86&#8230;&#8230;\u76f4\u63a5\u6293\u4e0a\u4e00\u4e2aprovider\u5237\u65b0\u5217\u8868\uff01<br \/>\u6211\u5e72\u6d3b\u7684\u6b63\u5e38\u601d\u8def\u662f\uff1aviewModel\u5c42\u63d0\u4ea4\u540e\u62ff\u56de\u63d0\u4ea4\u6210\u529f\u7684\u63d0\u793a\uff0cActivity setResult()\u544a\u8bc9\u4e0a\u4e00\u9875\u6570\u636e\u6211\u63d0\u4ea4\u6210\u529f\u4e86\uff0c\u518d\u7136\u540e\u9000\u5230\u524d\u4e00\u9875\u81ea\u52a8\u5237\u65b0\u5217\u8868\u3002<br \/>flutter\u662f\u5565\uff1a\u6211\u76f4\u63a5\u6293\u7740\u524d\u4e00\u9875\u7684provider\u5e72\u63a5\u53e3\uff0c\u5988\u5440\u8fd9\u7b80\u76f4\u60f3\u90fd\u4e0d\u6562\u60f3\uff01<br \/>\u679c\u771f\u554a\uff0c\u6d3b\u5230\u8001\u5b66\u5230\u8001&#8230;&#8230;.<\/p>\n<h2>\u6700\u540e\u653e\u51fa\u5b8c\u6574\u4ee3\u7801\u5427<\/h2>\n<h5>edit_page.dart<\/h5>\n<pre><code>import &#039;package:day07\/edit_provider.dart&#039;;\nimport &#039;package:flutter\/material.dart&#039;;\nimport &#039;package:flutter_styled_toast\/flutter_styled_toast.dart&#039;;\nimport &#039;package:provider\/provider.dart&#039;;\nimport &#039;detail_provider.dart&#039;;\nimport &#039;main_provider.dart&#039;;\n\nclass EditPage extends StatefulWidget {\n  final int? id; \/\/ \u793a\u4f8b\u53c2\u6570\uff0c\u53ef\u6309\u9700\u4fee\u6539\n  const EditPage({super.key, this.id});\n\n  @override\n  State&lt;EditPage&gt; createState() =&gt; _EditPageState();\n}\n\nclass _EditPageState extends State&lt;EditPage&gt; {\n  final List&lt;Map&lt;String, dynamic&gt;&gt; genderOptions = [\n    {&#039;value&#039;: 0, &#039;label&#039;: &#039;\u5973&#039;},\n    {&#039;value&#039;: 1, &#039;label&#039;: &#039;\u7537&#039;},\n  ];\n\n  @override\n  void initState() {\n    super.initState();\n    WidgetsBinding.instance.addPostFrameCallback((_) {\n      final editProvider = Provider.of&lt;EditProvider&gt;(context, listen: false);\n      if (widget.id != null) {\n        editProvider.getDetail(widget.id!);\n      }\n    });\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    final editProvider = Provider.of&lt;EditProvider&gt;(context);\n    return PopScope(\n      onPopInvokedWithResult: (didPop, result) {\n        editProvider.clearData();\n      },\n      child: Scaffold(\n        appBar: AppBar(\n          title: const Text(&#039;\u8be6\u60c5&#039;),\n          leading: GestureDetector(\n            onTap: () {\n              editProvider.clearData();\n              Navigator.of(context).pop();\n            },\n            child: const Icon(Icons.arrow_back_ios),\n          ),\n        ),\n        body: Center(\n          child: editProvider.isLoading\n              ? Column(\n                  mainAxisAlignment: MainAxisAlignment.center,\n                  children: const [\n                    Text(&#039;\u6b63\u5728\u52a0\u8f7d...&#039;),\n                    SizedBox(height: 16),\n                    CircularProgressIndicator(),\n                  ],\n                )\n              : editProvider.error != null\n              ? Column(\n                  mainAxisAlignment: MainAxisAlignment.center,\n                  children: [\n                    Text(editProvider.error!),\n                    const SizedBox(height: 16),\n                    ElevatedButton(\n                      onPressed: () {\n                        if (widget.id != null) {\n                          editProvider.getDetail(widget.id!);\n                        }\n                      },\n                      child: const Text(&#039;\u70b9\u51fb\u5237\u65b0&#039;),\n                    ),\n                  ],\n                )\n              : Column(\n                  crossAxisAlignment: CrossAxisAlignment.start,\n                  children: [\n                    \/\/ \u5df2\u6709\u8f93\u5165\u6846\n                    Padding(\n                      padding: const EdgeInsets.symmetric(\n                        horizontal: 8,\n                        vertical: 16,\n                      ),\n                      child: TextFormField(\n                        controller: editProvider.lastName,\n                        onChanged: (value){\n                          editProvider.contact!.lastName = value;\n                        },\n                        decoration: const InputDecoration(\n                          border: UnderlineInputBorder(),\n                          labelText: &#039;\u59d3&#039;,\n                          floatingLabelBehavior:\n                              FloatingLabelBehavior.auto, \/\/ \u786e\u4fdd\u63d0\u793a\u6587\u5b57\u4e0d\u6d88\u5931\n                        ),\n                      ),\n                    ),\n\n                    Padding(\n                      padding: const EdgeInsets.symmetric(\n                        horizontal: 8,\n                        vertical: 16,\n                      ),\n                      child: TextFormField(\n                        controller: editProvider.firstName,\n                        onChanged: (value){\n                          editProvider.contact!.firstName = value;\n                        },\n                        decoration: const InputDecoration(\n                          border: UnderlineInputBorder(),\n                          labelText: &#039;\u540d&#039;,\n                          floatingLabelBehavior:\n                              FloatingLabelBehavior.auto, \/\/ \u786e\u4fdd\u63d0\u793a\u6587\u5b57\u4e0d\u6d88\u5931\n                        ),\n                      ),\n                    ),\n                    Padding(\n                      padding: const EdgeInsets.symmetric(\n                        horizontal: 8,\n                        vertical: 16,\n                      ),\n                      child: TextFormField(\n                        controller: editProvider.age,\n                          onChanged: (value){\n                            try {\n                              editProvider.contact!.age = int.parse(value);\n                            } catch (e) {\n                              \/\/ \u5904\u7406\u89e3\u6790\u5931\u8d25\u7684\u60c5\u51b5\n                              editProvider.age.text=editProvider.contact!.age.toString();\n                              showToast(&#039;\u8bf7\u8f93\u5165\u6b63\u786e\u7684\u6570\u5b57&#039;,context: context);\n                            }                          },\n                        decoration: const InputDecoration(\n                          border: UnderlineInputBorder(),\n                          labelText: &#039;\u5e74\u9f84&#039;,\n                          floatingLabelBehavior:\n                              FloatingLabelBehavior.auto, \/\/ \u786e\u4fdd\u63d0\u793a\u6587\u5b57\u4e0d\u6d88\u5931\n                        ),\n                      ),\n                    ),\n                    Padding(\n                      padding: const EdgeInsets.symmetric(\n                        horizontal: 8,\n                        vertical: 16,\n                      ),\n                      child: DropdownButtonFormField&lt;int&gt;(\n                        value: editProvider.contact?.sex,\n                        items: genderOptions.map((option) {\n                          return DropdownMenuItem&lt;int&gt;(\n                            value: option[&#039;value&#039;],\n                            child: Text(option[&#039;label&#039;]),\n                          );\n                        }).toList(),\n                        onChanged: (int? newValue) {\n                          if (newValue != null) {\n                            editProvider.contact?.sex = newValue;\n                          }\n                        },\n                        decoration: const InputDecoration(\n                          border: UnderlineInputBorder(),\n                          labelText: &#039;\u6027\u522b&#039;,\n                          floatingLabelBehavior:\n                          FloatingLabelBehavior.auto, \/\/ \u786e\u4fdd\u63d0\u793a\u6587\u5b57\u4e0d\u6d88\u5931\n                        ),\n                      ),\n                    ),\n\n\n                    Padding(\n                      padding: const EdgeInsets.symmetric(\n                        horizontal: 8,\n                        vertical: 16,\n                      ),\n                      child: TextFormField(\n                        controller: editProvider.phoneNumber,\n                          onChanged: (value){\n                            editProvider.contact!.phoneNumber = value;\n                          },\n                        decoration: const InputDecoration(\n                          border: UnderlineInputBorder(),\n                          labelText: &#039;\u8054\u7cfb\u7535\u8bdd&#039;,\n                          floatingLabelBehavior:\n                              FloatingLabelBehavior.auto, \/\/ \u786e\u4fdd\u63d0\u793a\u6587\u5b57\u4e0d\u6d88\u5931\n                        ),\n                      ),\n                    ),\n\n                    \/\/ \u65b0\u589e\u8f93\u5165\u6846\n                    Padding(\n                      padding: const EdgeInsets.symmetric(\n                        horizontal: 8,\n                        vertical: 16,\n                      ),\n                      child: TextFormField(\n                        controller: editProvider.address,\n                          onChanged: (value){\n                            editProvider.contact!.address = value;\n                          },\n                        decoration: const InputDecoration(\n                          border: UnderlineInputBorder(),\n                          labelText: &#039;\u5730\u5740&#039;,\n                          floatingLabelBehavior:\n                              FloatingLabelBehavior.auto, \/\/ \u786e\u4fdd\u63d0\u793a\u6587\u5b57\u4e0d\u6d88\u5931\n                        ),\n                      ),\n                    ),\n                    Padding(\n                      padding: const EdgeInsets.symmetric(\n                        horizontal: 8,\n                        vertical: 16,\n                      ),\n                        child: Center(child:\n                        ElevatedButton(\n                          onPressed: () {\n                             _submit();\n                          },\n                          child: Text(&quot;\u63d0\u4ea4&quot;),\n                        ),)\n                    ),\n                  ],\n                ),\n        ),\n      ),\n    );\n  }\n\n  Future&lt;void&gt; _submit() async {\n    final editProvider = Provider.of&lt;EditProvider&gt;(context, listen: false);\n    final mainProvider = Provider.of&lt;MainProvider&gt;(context, listen: false);\n    \/\/ \u663e\u793a\u52a0\u8f7d Dialog\n    showDialog(\n      context: context,\n      barrierDismissible: false,\n      builder: (context) =&gt; Center(child: Container(\n        width: 100,\n        child:  Dialog(child: Container(height: 100,child: Center(child: CircularProgressIndicator()),)),\n      )),\n    );\n\n    try {\n      if (widget.id != null) {\n        await editProvider.submit(widget.id!);\n        \/\/ \u5173\u95ed Dialog\n        Navigator.of(context, rootNavigator: true).pop();\n        \/\/ \u5173\u95ed\u5f53\u524d\u9875\u9762\n        Navigator.of(context).pop();\n        \/\/ \u901a\u77e5 main.dart \u5237\u65b0\u5217\u8868\n        mainProvider.resetPage();\n        await mainProvider.getListPage(mainProvider.pageNum);\n      }\n    } catch (e) {\n      \/\/ \u5173\u95ed Dialog\n      Navigator.of(context, rootNavigator: true).pop();\n      showToast(&#039;\u63d0\u4ea4\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5&#039;, context: context);\n    }\n  }\n\n  @override\n  void dispose() {\n    super.dispose();\n  }\n}\n<\/code><\/pre>\n<h5>edit_provider.dart<\/h5>\n<pre><code>import &#039;package:day07\/bean\/contact_bean.dart&#039;;\nimport &#039;package:flutter\/material.dart&#039;;\n\nimport &#039;bean\/base_bean.dart&#039;;\nimport &#039;dio_util.dart&#039;;\n\nclass EditProvider with ChangeNotifier {\n  final TextEditingController firstName = TextEditingController();\n  final TextEditingController lastName = TextEditingController();\n  final TextEditingController age = TextEditingController();\n  final TextEditingController phoneNumber = TextEditingController();\n  final TextEditingController address = TextEditingController();\n\n  ContactBean? contact;\n\n  bool _isLoading = false;\n\n  bool get isLoading =&gt; _isLoading;\n  String? _error;\n\n  String? get error =&gt; _error;\n\n  Future&lt;void&gt; getDetail(int id) async {\n    _error = null;\n    await DioUtil.getInstance().get(\n      &quot;http:\/\/192.168.5.116:20080\/contact\/detail&quot;,\n      {&#039;id&#039;: id},\n      () {\n        _isLoading = true;\n        notifyListeners();\n      },\n      (data) {\n        _isLoading = false;\n        BaseBean bean = BaseBean.fromJson(data);\n        var contact = ContactBean.fromJson(bean.data);\n        this.contact = contact;\n        firstName.text = contact.firstName ?? &#039;&#039;;\n        lastName.text = contact.lastName ?? &#039;&#039;;\n        age.text = contact.age.toString();\n\n        phoneNumber.text = contact.phoneNumber ?? &#039;&#039;;\n        address.text = contact.address ?? &#039;&#039;;\n        notifyListeners();\n      },\n      (reason) {\n        _isLoading = false;\n        _error = reason;\n        notifyListeners();\n      },\n    );\n  }\n\n  Future&lt;void&gt; submit(int id) async {\n    await Future.delayed(const Duration(seconds: 2));\n    _error = null;\n    DioUtil.getInstance().addHeader(&quot;token&quot;, &quot;123456789&quot;);\n    await DioUtil.getInstance().post(\n      &quot;http:\/\/192.168.5.116:20080\/contact\/update&quot;,\n          contact!.toJson(),\n          () {\n\n      },\n          (data) {\n\n      },\n          (reason) {\n\n      },\n    );\n  }\n\n  void clearData() {\n    lastName.clear();\n    firstName.clear();\n    age.clear();\n    phoneNumber.clear();\n    address.clear();\n    notifyListeners(); \/\/ \u901a\u77e5\u76d1\u542c\u5668\u72b6\u6001\u6539\u53d8\n  }\n\n  @override\n  void dispose() {\n    firstName.dispose();\n    lastName.dispose();\n    age.dispose();\n    phoneNumber.dispose();\n    address.dispose();\n    \/\/ TODO: implement dispose\n    super.dispose();\n  }\n}\n<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5176\u5b9e\u8be6\u60c5\u9875\uff0c\u5c31\u6709\u70b9\u7f16\u8f91\u7684\u610f\u5473\u4e86~\u6240\u4ee5\u7f16\u8f91\u9875\u5c31\u662f\u8be6\u60c5\u9875\u6539\u51fa\u6765\u7684\uff01\u6539\u4e86\u70b9\u5565\uff0c\u5176\u5b9e\u4e5f\u6709\u8bf4\u7684\u3002 1\u3001\u628a\u6027\u522b\u4ece\u6587\u672c\u6846\u6362\u6210 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[],"class_list":["post-334","post","type-post","status-publish","format-standard","hentry","category-androidflutter"],"_links":{"self":[{"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/posts\/334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/comments?post=334"}],"version-history":[{"count":27,"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/posts\/334\/revisions"}],"predecessor-version":[{"id":361,"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/posts\/334\/revisions\/361"}],"wp:attachment":[{"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/media?parent=334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/categories?post=334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bqmz001.top\/index.php\/wp-json\/wp\/v2\/tags?post=334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}