Copy disabled (too large)
Download .txt
Showing preview only (21,127K chars total). Download the full file to get everything.
Repository: flutterchina/flutter-in-action
Branch: master
Commit: ac29e7176af9
Files: 699
Total size: 20.0 MB
Directory structure:
gitextract_ygze40pb/
├── .github/
│ └── FUNDING.yml
├── .gitignore
├── README.MD
├── docs/
│ ├── 404.html
│ ├── assets/
│ │ ├── css/
│ │ │ └── 0.styles.9ca8d33d.css
│ │ └── js/
│ │ ├── 10.5f481ee1.js
│ │ ├── 100.ce32ed9e.js
│ │ ├── 101.60ad385d.js
│ │ ├── 102.53edb23b.js
│ │ ├── 103.21193c45.js
│ │ ├── 104.02d5761d.js
│ │ ├── 105.b6044eeb.js
│ │ ├── 106.9b857fc8.js
│ │ ├── 107.188f42e4.js
│ │ ├── 108.47fd6022.js
│ │ ├── 109.9119c4a8.js
│ │ ├── 11.2026a71f.js
│ │ ├── 110.fec0c84f.js
│ │ ├── 111.95623244.js
│ │ ├── 112.e8e91632.js
│ │ ├── 113.d0f44add.js
│ │ ├── 114.df1f86a1.js
│ │ ├── 115.374ee72b.js
│ │ ├── 116.5453b788.js
│ │ ├── 117.f7002db2.js
│ │ ├── 118.d4908451.js
│ │ ├── 119.baead276.js
│ │ ├── 12.ef586fcc.js
│ │ ├── 120.681a706e.js
│ │ ├── 121.aef1325d.js
│ │ ├── 122.59b7f284.js
│ │ ├── 123.b83bac47.js
│ │ ├── 124.7a950a7c.js
│ │ ├── 125.275c37b1.js
│ │ ├── 126.a62ac904.js
│ │ ├── 127.76aaf7da.js
│ │ ├── 128.c75c7015.js
│ │ ├── 129.88b4391d.js
│ │ ├── 13.e93e35ca.js
│ │ ├── 130.f1922c51.js
│ │ ├── 131.7f51717c.js
│ │ ├── 132.4b82358d.js
│ │ ├── 133.85003caa.js
│ │ ├── 134.68a25fe9.js
│ │ ├── 135.765bad57.js
│ │ ├── 136.46f11ea2.js
│ │ ├── 137.0345664d.js
│ │ ├── 138.1a184d5a.js
│ │ ├── 139.94803f35.js
│ │ ├── 14.4d0ac363.js
│ │ ├── 140.c76b4d30.js
│ │ ├── 141.592ee9d6.js
│ │ ├── 142.d7d8dbaf.js
│ │ ├── 143.77583b74.js
│ │ ├── 144.2ce6c614.js
│ │ ├── 145.8fe852a4.js
│ │ ├── 146.86bb1e0f.js
│ │ ├── 147.e9009fb7.js
│ │ ├── 148.0c341180.js
│ │ ├── 149.46210223.js
│ │ ├── 15.7f957f4b.js
│ │ ├── 150.220fd8cf.js
│ │ ├── 151.a1cacc6d.js
│ │ ├── 152.5323fd98.js
│ │ ├── 153.26e3ed31.js
│ │ ├── 154.40b97c4a.js
│ │ ├── 155.b55f4193.js
│ │ ├── 156.f4128841.js
│ │ ├── 157.fb299d51.js
│ │ ├── 158.49064f28.js
│ │ ├── 159.277037a1.js
│ │ ├── 16.2d42d5bc.js
│ │ ├── 160.0664832e.js
│ │ ├── 161.38ea1a1a.js
│ │ ├── 162.f96e9c80.js
│ │ ├── 163.cfb15292.js
│ │ ├── 164.46dd9498.js
│ │ ├── 165.86c8b8c1.js
│ │ ├── 166.3938fc5f.js
│ │ ├── 167.09cbb683.js
│ │ ├── 168.aab68e4f.js
│ │ ├── 169.b01d210b.js
│ │ ├── 17.59a459c4.js
│ │ ├── 170.e68bf3e7.js
│ │ ├── 171.4f0e7d6b.js
│ │ ├── 172.ae542eee.js
│ │ ├── 173.c985ca5c.js
│ │ ├── 174.ece20a6a.js
│ │ ├── 175.891c0a2f.js
│ │ ├── 176.93a74e23.js
│ │ ├── 177.20c492a7.js
│ │ ├── 178.a9c56f1f.js
│ │ ├── 179.b42bb139.js
│ │ ├── 18.318a79e1.js
│ │ ├── 180.d048122a.js
│ │ ├── 181.e3633acb.js
│ │ ├── 182.d30b9f69.js
│ │ ├── 183.802b20e7.js
│ │ ├── 184.90e5f242.js
│ │ ├── 185.5cca4d69.js
│ │ ├── 186.56dca3cc.js
│ │ ├── 187.405078e0.js
│ │ ├── 188.766e2a5e.js
│ │ ├── 189.c927c79a.js
│ │ ├── 19.175563ad.js
│ │ ├── 190.92378aeb.js
│ │ ├── 191.167ff3f3.js
│ │ ├── 192.53c8ab5d.js
│ │ ├── 193.05fa90e3.js
│ │ ├── 194.df254afb.js
│ │ ├── 195.1c40c74b.js
│ │ ├── 196.3dbd36a7.js
│ │ ├── 197.7fd8856f.js
│ │ ├── 198.2a531f59.js
│ │ ├── 199.7dc1f153.js
│ │ ├── 2.f4fe4405.js
│ │ ├── 20.6c5c8986.js
│ │ ├── 200.92165c5b.js
│ │ ├── 201.2953b2e7.js
│ │ ├── 202.de6ee6b8.js
│ │ ├── 203.ac627436.js
│ │ ├── 204.fb9289cb.js
│ │ ├── 205.90d0284c.js
│ │ ├── 206.2dbac1ab.js
│ │ ├── 207.d052f90b.js
│ │ ├── 208.0818aeb7.js
│ │ ├── 209.95753ceb.js
│ │ ├── 21.c0363ec5.js
│ │ ├── 210.0c9a3892.js
│ │ ├── 211.43a19344.js
│ │ ├── 212.f9dee082.js
│ │ ├── 213.f55d441e.js
│ │ ├── 214.0836f39e.js
│ │ ├── 215.807d3ade.js
│ │ ├── 216.a7c3d830.js
│ │ ├── 217.ad95582b.js
│ │ ├── 218.059e8703.js
│ │ ├── 219.70d1d263.js
│ │ ├── 22.4fdaa56f.js
│ │ ├── 220.69e2bb54.js
│ │ ├── 221.51aa50d8.js
│ │ ├── 222.8f955066.js
│ │ ├── 223.3230e791.js
│ │ ├── 224.35c9623f.js
│ │ ├── 225.8687c2ec.js
│ │ ├── 226.d982aa8d.js
│ │ ├── 227.c297d2cb.js
│ │ ├── 228.4dcdd69c.js
│ │ ├── 229.91061a53.js
│ │ ├── 23.87c6db58.js
│ │ ├── 24.bf1834df.js
│ │ ├── 25.869317d7.js
│ │ ├── 26.e656381b.js
│ │ ├── 27.d1fa65c2.js
│ │ ├── 28.fbba6f6f.js
│ │ ├── 29.e809e77a.js
│ │ ├── 3.cc1736a7.js
│ │ ├── 30.b84a8f21.js
│ │ ├── 31.dca209c1.js
│ │ ├── 32.c0efa5ac.js
│ │ ├── 33.8b948e2d.js
│ │ ├── 34.9dff7b9d.js
│ │ ├── 35.a9c7aa47.js
│ │ ├── 36.d9eeb78f.js
│ │ ├── 37.7ecb6ef5.js
│ │ ├── 38.260a994c.js
│ │ ├── 39.c3d0c942.js
│ │ ├── 4.2eb3fd02.js
│ │ ├── 40.31216541.js
│ │ ├── 41.7b70eaf0.js
│ │ ├── 42.057d8df6.js
│ │ ├── 43.b17a6aae.js
│ │ ├── 44.5f61dab7.js
│ │ ├── 45.381b04c9.js
│ │ ├── 46.1c911d7c.js
│ │ ├── 47.692e2e27.js
│ │ ├── 48.6747a87a.js
│ │ ├── 49.e636869b.js
│ │ ├── 5.0941abdb.js
│ │ ├── 50.57b758f4.js
│ │ ├── 51.4c0d2270.js
│ │ ├── 52.61d5b4f1.js
│ │ ├── 53.56438d06.js
│ │ ├── 54.4afb8008.js
│ │ ├── 55.a7c27448.js
│ │ ├── 56.8a9849da.js
│ │ ├── 57.371d9d12.js
│ │ ├── 58.3d2501b6.js
│ │ ├── 59.ab37b38d.js
│ │ ├── 6.15c5e328.js
│ │ ├── 60.7043cbf5.js
│ │ ├── 61.470fa853.js
│ │ ├── 62.b51637d5.js
│ │ ├── 63.ff70c9ee.js
│ │ ├── 64.4621481d.js
│ │ ├── 65.2d58a524.js
│ │ ├── 66.5df03e62.js
│ │ ├── 67.73c671d9.js
│ │ ├── 68.4de1c271.js
│ │ ├── 69.46ed47d5.js
│ │ ├── 7.9aacc405.js
│ │ ├── 70.a85fca0c.js
│ │ ├── 71.f6151eb7.js
│ │ ├── 72.2c5ab8cf.js
│ │ ├── 73.dcf07497.js
│ │ ├── 74.3253492f.js
│ │ ├── 75.bef82a69.js
│ │ ├── 76.29cac87f.js
│ │ ├── 77.8fef1f03.js
│ │ ├── 78.28647d83.js
│ │ ├── 79.1a0eb05b.js
│ │ ├── 8.cb5899ca.js
│ │ ├── 80.8eacbc37.js
│ │ ├── 81.f8e7c85e.js
│ │ ├── 82.a6b89300.js
│ │ ├── 83.daf1b549.js
│ │ ├── 84.f330e398.js
│ │ ├── 85.f647b247.js
│ │ ├── 86.e82005d4.js
│ │ ├── 87.e1f95a69.js
│ │ ├── 88.9709422a.js
│ │ ├── 89.4ff5c882.js
│ │ ├── 9.f995bbe8.js
│ │ ├── 90.fff47bcf.js
│ │ ├── 91.9eb501f7.js
│ │ ├── 92.7b12896a.js
│ │ ├── 93.54d0e6b6.js
│ │ ├── 94.c6e7a2f7.js
│ │ ├── 95.bf70fc45.js
│ │ ├── 96.b382caf8.js
│ │ ├── 97.14909b27.js
│ │ ├── 98.8023c3ac.js
│ │ ├── 99.3db30893.js
│ │ └── app.189f52e4.js
│ ├── chapter1/
│ │ ├── dart.html
│ │ ├── flutter_intro.html
│ │ ├── index.html
│ │ ├── install_flutter.html
│ │ └── mobile_development_intro.html
│ ├── chapter10/
│ │ ├── combine.html
│ │ ├── custom_paint.html
│ │ ├── gradient_circular_progress_demo.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ └── turn_box.html
│ ├── chapter11/
│ │ ├── dio.html
│ │ ├── download_with_chunks.html
│ │ ├── file_operation.html
│ │ ├── http.html
│ │ ├── index.html
│ │ ├── json_model.html
│ │ ├── socket.html
│ │ └── websocket.html
│ ├── chapter12/
│ │ ├── android_implement.html
│ │ ├── develop_package.html
│ │ ├── develop_plugin.html
│ │ ├── index.html
│ │ ├── ios_implement.html
│ │ ├── platform-channel.html
│ │ └── texture_platformview.html
│ ├── chapter13/
│ │ ├── faq.html
│ │ ├── index.html
│ │ ├── intl.html
│ │ ├── locallization_implement.html
│ │ └── multi_languages_support.html
│ ├── chapter14/
│ │ ├── element_buildcontext.html
│ │ ├── flutter_app_startup.html
│ │ ├── flutter_ui_system.html
│ │ ├── image_and_cache.html
│ │ ├── index.html
│ │ └── render_object.html
│ ├── chapter15/
│ │ ├── code_structure.html
│ │ ├── entry.html
│ │ ├── globals.html
│ │ ├── intro.html
│ │ ├── language_and_theme_setting.html
│ │ ├── login_page.html
│ │ ├── models.html
│ │ └── network.html
│ ├── chapter2/
│ │ ├── first_flutter_app.html
│ │ ├── flutter_app_debug.html
│ │ ├── flutter_assets_mgr.html
│ │ ├── flutter_package_mgr.html
│ │ ├── flutter_router.html
│ │ ├── index.html
│ │ └── thread_model_and_error_report.html
│ ├── chapter3/
│ │ ├── buttons.html
│ │ ├── flutter_widget_intro.html
│ │ ├── img_and_icon.html
│ │ ├── index.html
│ │ ├── input_and_form.html
│ │ ├── progress.html
│ │ ├── radio_and_checkbox.html
│ │ ├── state_manage.html
│ │ └── text.html
│ ├── chapter4/
│ │ ├── alignment.html
│ │ ├── flex.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── row_and_column.html
│ │ ├── stack.html
│ │ └── wrap_and_flow.html
│ ├── chapter5/
│ │ ├── clip.html
│ │ ├── constrainedbox_and_sizebox.html
│ │ ├── container.html
│ │ ├── decoratedbox.html
│ │ ├── index.html
│ │ ├── material_scaffold.html
│ │ ├── padding.html
│ │ └── transform.html
│ ├── chapter6/
│ │ ├── custom_scrollview.html
│ │ ├── gridview.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── listview.html
│ │ ├── scroll_controller.html
│ │ └── single_child_scrollview.html
│ ├── chapter7/
│ │ ├── dailog.html
│ │ ├── futurebuilder_and_streambuilder.html
│ │ ├── index.html
│ │ ├── inherited_widget.html
│ │ ├── provider.html
│ │ ├── theme.html
│ │ └── willpopscope.html
│ ├── chapter8/
│ │ ├── eventbus.html
│ │ ├── gesture.html
│ │ ├── index.html
│ │ ├── listener.html
│ │ └── notification.html
│ ├── chapter9/
│ │ ├── animated_switcher.html
│ │ ├── animated_widgets.html
│ │ ├── animation_structure.html
│ │ ├── hero.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── route_transition.html
│ │ └── stagger_animation.html
│ ├── imgs/
│ │ └── index.html
│ ├── index.html
│ ├── intro.html
│ ├── join_us.html
│ ├── next.html
│ ├── preface.html
│ ├── reference.html
│ ├── summary.html
│ └── v2/
│ ├── chapter1/
│ │ ├── dart.html
│ │ ├── flutter_intro.html
│ │ ├── index.html
│ │ ├── install_flutter.html
│ │ └── mobile_development_intro.html
│ ├── chapter10/
│ │ ├── combine.html
│ │ ├── custom_paint.html
│ │ ├── gradient_circular_progress_demo.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ └── turn_box.html
│ ├── chapter11/
│ │ ├── dio.html
│ │ ├── download_with_chunks.html
│ │ ├── file_operation.html
│ │ ├── http.html
│ │ ├── index.html
│ │ ├── json_model.html
│ │ ├── socket.html
│ │ └── websocket.html
│ ├── chapter12/
│ │ ├── android_implement.html
│ │ ├── develop_package.html
│ │ ├── develop_plugin.html
│ │ ├── index.html
│ │ ├── ios_implement.html
│ │ ├── platform-channel.html
│ │ └── texture_platformview.html
│ ├── chapter13/
│ │ ├── faq.html
│ │ ├── index.html
│ │ ├── intl.html
│ │ ├── locallization_implement.html
│ │ └── multi_languages_support.html
│ ├── chapter14/
│ │ ├── element_buildcontext.html
│ │ ├── flutter_app_startup.html
│ │ ├── flutter_ui_system.html
│ │ ├── image_and_cache.html
│ │ ├── index.html
│ │ └── render_object.html
│ ├── chapter15/
│ │ ├── code_structure.html
│ │ ├── entry.html
│ │ ├── globals.html
│ │ ├── intro.html
│ │ ├── language_and_theme_setting.html
│ │ ├── login_page.html
│ │ ├── models.html
│ │ └── network.html
│ ├── chapter2/
│ │ ├── first_flutter_app.html
│ │ ├── flutter_app_debug.html
│ │ ├── flutter_assets_mgr.html
│ │ ├── flutter_package_mgr.html
│ │ ├── flutter_router.html
│ │ ├── index.html
│ │ └── thread_model_and_error_report.html
│ ├── chapter3/
│ │ ├── buttons.html
│ │ ├── flutter_widget_intro.html
│ │ ├── img_and_icon.html
│ │ ├── index.html
│ │ ├── input_and_form.html
│ │ ├── progress.html
│ │ ├── radio_and_checkbox.html
│ │ ├── state_manage.html
│ │ └── text.html
│ ├── chapter4/
│ │ ├── alignment.html
│ │ ├── flex.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── row_and_column.html
│ │ ├── stack.html
│ │ └── wrap_and_flow.html
│ ├── chapter5/
│ │ ├── clip.html
│ │ ├── constrainedbox_and_sizebox.html
│ │ ├── container.html
│ │ ├── decoratedbox.html
│ │ ├── index.html
│ │ ├── material_scaffold.html
│ │ ├── padding.html
│ │ └── transform.html
│ ├── chapter6/
│ │ ├── custom_scrollview.html
│ │ ├── gridview.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── listview.html
│ │ ├── scroll_controller.html
│ │ └── single_child_scrollview.html
│ ├── chapter7/
│ │ ├── dailog.html
│ │ ├── futurebuilder_and_streambuilder.html
│ │ ├── index.html
│ │ ├── inherited_widget.html
│ │ ├── provider.html
│ │ ├── theme.html
│ │ └── willpopscope.html
│ ├── chapter8/
│ │ ├── eventbus.html
│ │ ├── gesture.html
│ │ ├── index.html
│ │ ├── listener.html
│ │ └── notification.html
│ ├── chapter9/
│ │ ├── animated_switcher.html
│ │ ├── animated_widgets.html
│ │ ├── animation_structure.html
│ │ ├── hero.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── route_transition.html
│ │ └── stagger_animation.html
│ ├── imgs/
│ │ └── index.html
│ ├── index.html
│ ├── intro.html
│ ├── join_us.html
│ ├── next.html
│ ├── preface.html
│ ├── reference.html
│ └── summary.html
├── package.json
└── src/
├── .vuepress/
│ ├── config.js
│ ├── styles/
│ │ └── palette.styl
│ └── theme/
│ ├── index.js
│ └── layouts/
│ └── Layout.vue
├── README.md
├── _layouts/
│ ├── ebook/
│ │ ├── page.html
│ │ ├── pdf_footer.html
│ │ ├── pdf_header.html
│ │ └── summary.html
│ ├── layout.html
│ └── website/
│ ├── _page.html
│ ├── header.html
│ ├── languages.html
│ ├── layout.html
│ └── summary.html
├── chapter1/
│ ├── dart.md
│ ├── flutter_intro.md
│ ├── index.md
│ ├── install_flutter.md
│ └── mobile_development_intro.md
├── chapter10/
│ ├── combine.md
│ ├── custom_paint.md
│ ├── gradient_circular_progress_demo.md
│ ├── index.md
│ ├── intro.md
│ └── turn_box.md
├── chapter11/
│ ├── dio.md
│ ├── download_with_chunks.md
│ ├── file_operation.md
│ ├── http.md
│ ├── index.md
│ ├── json_model.md
│ ├── socket.md
│ └── websocket.md
├── chapter12/
│ ├── android_implement.md
│ ├── develop_package.md
│ ├── develop_plugin.md
│ ├── index.md
│ ├── ios_implement.md
│ ├── platform-channel.md
│ └── texture_platformview.md
├── chapter13/
│ ├── faq.md
│ ├── index.md
│ ├── intl.md
│ ├── locallization_implement.md
│ └── multi_languages_support.md
├── chapter14/
│ ├── element_buildcontext.md
│ ├── flutter_app_startup.md
│ ├── flutter_ui_system.md
│ ├── image_and_cache.md
│ ├── index.md
│ └── render_object.md
├── chapter15/
│ ├── code_structure.md
│ ├── entry.md
│ ├── globals.md
│ ├── intro.md
│ ├── language_and_theme_setting.md
│ ├── login_page.md
│ ├── models.md
│ └── network.md
├── chapter2/
│ ├── first_flutter_app.md
│ ├── flutter_app_debug.md
│ ├── flutter_assets_mgr.md
│ ├── flutter_package_mgr.md
│ ├── flutter_router.md
│ ├── index.md
│ └── thread_model_and_error_report.md
├── chapter3/
│ ├── buttons.md
│ ├── flutter_widget_intro.md
│ ├── img_and_icon.md
│ ├── index.md
│ ├── input_and_form.md
│ ├── progress.md
│ ├── radio_and_checkbox.md
│ ├── state_manage.md
│ └── text.md
├── chapter4/
│ ├── alignment.md
│ ├── flex.md
│ ├── index.md
│ ├── intro.md
│ ├── row_and_column.md
│ ├── stack.md
│ └── wrap_and_flow.md
├── chapter5/
│ ├── clip.md
│ ├── constrainedbox_and_sizebox.md
│ ├── container.md
│ ├── decoratedbox.md
│ ├── index.md
│ ├── material_scaffold.md
│ ├── padding.md
│ └── transform.md
├── chapter6/
│ ├── custom_scrollview.md
│ ├── gridview.md
│ ├── index.md
│ ├── intro.md
│ ├── listview.md
│ ├── scroll_controller.md
│ └── single_child_scrollview.md
├── chapter7/
│ ├── dailog.md
│ ├── futurebuilder_and_streambuilder.md
│ ├── index.md
│ ├── inherited_widget.md
│ ├── provider.md
│ ├── theme.md
│ └── willpopscope.md
├── chapter8/
│ ├── eventbus.md
│ ├── gesture.md
│ ├── index.md
│ ├── listener.md
│ └── notification.md
├── chapter9/
│ ├── animated_switcher.md
│ ├── animated_widgets.md
│ ├── animation_structure.md
│ ├── hero.md
│ ├── index.md
│ ├── intro.md
│ ├── route_transition.md
│ └── stagger_animation.md
├── gitbook/
│ └── pub.js
├── img_des.txt
├── imgs/
│ └── index.md
├── index.md
├── intro.md
├── join_us.md
├── next.md
├── preface.md
├── reference.md
├── summary.md
└── v2/
├── README.md
├── chapter1/
│ ├── dart.md
│ ├── flutter_intro.md
│ ├── index.md
│ ├── install_flutter.md
│ └── mobile_development_intro.md
├── chapter10/
│ ├── combine.md
│ ├── custom_paint.md
│ ├── gradient_circular_progress_demo.md
│ ├── index.md
│ ├── intro.md
│ └── turn_box.md
├── chapter11/
│ ├── dio.md
│ ├── download_with_chunks.md
│ ├── file_operation.md
│ ├── http.md
│ ├── index.md
│ ├── json_model.md
│ ├── socket.md
│ └── websocket.md
├── chapter12/
│ ├── android_implement.md
│ ├── develop_package.md
│ ├── develop_plugin.md
│ ├── index.md
│ ├── ios_implement.md
│ ├── platform-channel.md
│ └── texture_platformview.md
├── chapter13/
│ ├── faq.md
│ ├── index.md
│ ├── intl.md
│ ├── locallization_implement.md
│ └── multi_languages_support.md
├── chapter14/
│ ├── element_buildcontext.md
│ ├── flutter_app_startup.md
│ ├── flutter_ui_system.md
│ ├── image_and_cache.md
│ ├── index.md
│ └── render_object.md
├── chapter15/
│ ├── code_structure.md
│ ├── entry.md
│ ├── globals.md
│ ├── intro.md
│ ├── language_and_theme_setting.md
│ ├── login_page.md
│ ├── models.md
│ └── network.md
├── chapter2/
│ ├── first_flutter_app.md
│ ├── flutter_app_debug.md
│ ├── flutter_assets_mgr.md
│ ├── flutter_package_mgr.md
│ ├── flutter_router.md
│ ├── index.md
│ └── thread_model_and_error_report.md
├── chapter3/
│ ├── buttons.md
│ ├── flutter_widget_intro.md
│ ├── img_and_icon.md
│ ├── index.md
│ ├── input_and_form.md
│ ├── progress.md
│ ├── radio_and_checkbox.md
│ ├── state_manage.md
│ └── text.md
├── chapter4/
│ ├── alignment.md
│ ├── flex.md
│ ├── index.md
│ ├── intro.md
│ ├── row_and_column.md
│ ├── stack.md
│ └── wrap_and_flow.md
├── chapter5/
│ ├── clip.md
│ ├── constrainedbox_and_sizebox.md
│ ├── container.md
│ ├── decoratedbox.md
│ ├── index.md
│ ├── material_scaffold.md
│ ├── padding.md
│ └── transform.md
├── chapter6/
│ ├── custom_scrollview.md
│ ├── gridview.md
│ ├── index.md
│ ├── intro.md
│ ├── listview.md
│ ├── scroll_controller.md
│ └── single_child_scrollview.md
├── chapter7/
│ ├── dailog.md
│ ├── futurebuilder_and_streambuilder.md
│ ├── index.md
│ ├── inherited_widget.md
│ ├── provider.md
│ ├── theme.md
│ └── willpopscope.md
├── chapter8/
│ ├── eventbus.md
│ ├── gesture.md
│ ├── index.md
│ ├── listener.md
│ └── notification.md
├── chapter9/
│ ├── animated_switcher.md
│ ├── animated_widgets.md
│ ├── animation_structure.md
│ ├── hero.md
│ ├── index.md
│ ├── intro.md
│ ├── route_transition.md
│ └── stagger_animation.md
├── gitbook/
│ └── pub.js
├── img_des.txt
├── imgs/
│ └── index.md
├── index.md
├── intro.md
├── join_us.md
├── next.md
├── preface.md
├── reference.md
└── summary.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .github/FUNDING.yml
================================================
# These are supported funding model platforms
github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
patreon: # Replace with a single Patreon username
open_collective: # Replace with a single Open Collective username
ko_fi: # Replace with a single Ko-fi username
tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
liberapay: # Replace with a single Liberapay username
issuehunt: # Replace with a single IssueHunt username
otechie: # Replace with a single Otechie username
custom: ['https://paypal.me/wendux91','https://camo.githubusercontent.com/3442fb56bdedc11300c23d958a2f62e813adae4903bd714fe852232623bb97c6/68747470733a2f2f63646e2e6a7364656c6976722e6e65742f67682f666c75747465726368696e612f666c75747465722d696e2d616374696f6e40312e302e332f646f63732f696d67732f7061792e6a706567']
================================================
FILE: .gitignore
================================================
node_modules/
*.DS_Store
book/
.packages
.dart_tool/
.idea/
================================================
FILE: README.MD
================================================
# 注意
本书第二版草稿已上传,**本 repo 将不再维护**,请大家移步:https://github.com/flutterchina/flutter_in_action_2nd
---
# 第一版简介
本项目为Flutter中文网《Flutter实战》开源电子书项目,官网地址为:https://book.flutterchina.club 。
本书随书源码:https://github.com/wendux/flutter_in_action_source_code
## 实体书
<div style="text-align:center; padding-bottom:30px"><a href="https://item.jd.com/12816296.html" title='点击购买'><img height="250" style="box-shadow: #aaa 5px 5px 10px;" src="https://pcdn.flutterchina.club/imgs/book.png"/></a> <br/> <a class="buy-btn" href="https://item.jd.com/12816296.html" title='点击购买'> 购买实体书 </a></div>
## 贡献须知
本书目前仍在创作中,如果您想参与到本书创作,欢迎提PR。本书目录结构如下:
| 目录及文件 | 说明 |
| --------------- | ------------------------------------------------------------ |
| src | 文档目录,您应该在此目录下对应的章节文件夹下修改/创建Markdown文档 |
| docs | 打包后的网站代码目录,您不应该手动修改此目录下的文档 |
| src/SUMMARY.md | 本书目录,要修改目录请参考本文档中前面章节。 |
| src/imgs | 本书所引的图片、截图目录 |
### 图片引入说明
为了后续图片能够容易上CDN,如果您需要在文档中引入新的图片,请按如下步骤操作:
1. 将您的图片大小进行调整,有一个要求是图片高度最大不能超过500像素,原则上单张图片最大不能超过300K.
2. 将图片拷贝到docs/imgs目录,注意不要重名
3. 在你的文章中用**相对路径**引用,如:
```

```
当您提交内容被合入后,我们会来上传CDN,自动替换图片链接,然后回提到仓库中,在您下次提交之前,您需要先pull一下变更。
### 构建环境搭建
本书是采用gitbook编写,要想在本地运行网站,需要安装一下环境:
1. 安装node;如果已经安装过node,可以省略这一步。node安装方法自行百度。
2. 开始构建并启动测试服务器。
```shell
yarn run dev
```
3. 构建发布包:
```shell
yarn run build
```
### 第二版
本书第一版已出版,由于flutter和dart更新非常快,本书第二版正在创作中,敬请期待。
### 提交更新
为了保证书籍质量,提交后的内容都需要Review,所以您PR提交之后离正式合入可能会需要多次修改,为了节省时间,请在提交PR后的第一时间通知我Review。
## 勘误
如果您发现本书的错误,欢迎PR。
## 联系方式
微信号:Demons-du
## 免费?
知识是应该付费的,创作不易,开源不等于免费,如果您是本书读者并手头宽裕,可以微信扫描下面二维码打赏,也不用太多,够买一杯咖啡就行。当然,如果您囊中羞涩,您也可以阅读本书,但我对您有个小小的要求,希望您在阅读的过程中能积极参与到本书的纠错以及未完成内容的创作上来,也算是有所付出。

================================================
FILE: docs/404.html
================================================
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>《Flutter实战》电子书</title>
<meta name="generator" content="VuePress 1.8.2">
<link rel="icon" href="/logo.png">
<meta name="description" content="">
<link rel="preload" href="/assets/css/0.styles.9ca8d33d.css" as="style"><link rel="preload" href="/assets/js/app.189f52e4.js" as="script"><link rel="preload" href="/assets/js/129.88b4391d.js" as="script"><link rel="prefetch" href="/assets/js/10.5f481ee1.js"><link rel="prefetch" href="/assets/js/100.ce32ed9e.js"><link rel="prefetch" href="/assets/js/101.60ad385d.js"><link rel="prefetch" href="/assets/js/102.53edb23b.js"><link rel="prefetch" href="/assets/js/103.21193c45.js"><link rel="prefetch" href="/assets/js/104.02d5761d.js"><link rel="prefetch" href="/assets/js/105.b6044eeb.js"><link rel="prefetch" href="/assets/js/106.9b857fc8.js"><link rel="prefetch" href="/assets/js/107.188f42e4.js"><link rel="prefetch" href="/assets/js/108.47fd6022.js"><link rel="prefetch" href="/assets/js/109.9119c4a8.js"><link rel="prefetch" href="/assets/js/11.2026a71f.js"><link rel="prefetch" href="/assets/js/110.fec0c84f.js"><link rel="prefetch" href="/assets/js/111.95623244.js"><link rel="prefetch" href="/assets/js/112.e8e91632.js"><link rel="prefetch" href="/assets/js/113.d0f44add.js"><link rel="prefetch" href="/assets/js/114.df1f86a1.js"><link rel="prefetch" href="/assets/js/115.374ee72b.js"><link rel="prefetch" href="/assets/js/116.5453b788.js"><link rel="prefetch" href="/assets/js/117.f7002db2.js"><link rel="prefetch" href="/assets/js/118.d4908451.js"><link rel="prefetch" href="/assets/js/119.baead276.js"><link rel="prefetch" href="/assets/js/12.ef586fcc.js"><link rel="prefetch" href="/assets/js/120.681a706e.js"><link rel="prefetch" href="/assets/js/121.aef1325d.js"><link rel="prefetch" href="/assets/js/122.59b7f284.js"><link rel="prefetch" href="/assets/js/123.b83bac47.js"><link rel="prefetch" href="/assets/js/124.7a950a7c.js"><link rel="prefetch" href="/assets/js/125.275c37b1.js"><link rel="prefetch" href="/assets/js/126.a62ac904.js"><link rel="prefetch" href="/assets/js/127.76aaf7da.js"><link rel="prefetch" href="/assets/js/128.c75c7015.js"><link rel="prefetch" href="/assets/js/13.e93e35ca.js"><link rel="prefetch" href="/assets/js/130.f1922c51.js"><link rel="prefetch" href="/assets/js/131.7f51717c.js"><link rel="prefetch" href="/assets/js/132.4b82358d.js"><link rel="prefetch" href="/assets/js/133.85003caa.js"><link rel="prefetch" href="/assets/js/134.68a25fe9.js"><link rel="prefetch" href="/assets/js/135.765bad57.js"><link rel="prefetch" href="/assets/js/136.46f11ea2.js"><link rel="prefetch" href="/assets/js/137.0345664d.js"><link rel="prefetch" href="/assets/js/138.1a184d5a.js"><link rel="prefetch" href="/assets/js/139.94803f35.js"><link rel="prefetch" href="/assets/js/14.4d0ac363.js"><link rel="prefetch" href="/assets/js/140.c76b4d30.js"><link rel="prefetch" href="/assets/js/141.592ee9d6.js"><link rel="prefetch" href="/assets/js/142.d7d8dbaf.js"><link rel="prefetch" href="/assets/js/143.77583b74.js"><link rel="prefetch" href="/assets/js/144.2ce6c614.js"><link rel="prefetch" href="/assets/js/145.8fe852a4.js"><link rel="prefetch" href="/assets/js/146.86bb1e0f.js"><link rel="prefetch" href="/assets/js/147.e9009fb7.js"><link rel="prefetch" href="/assets/js/148.0c341180.js"><link rel="prefetch" href="/assets/js/149.46210223.js"><link rel="prefetch" href="/assets/js/15.7f957f4b.js"><link rel="prefetch" href="/assets/js/150.220fd8cf.js"><link rel="prefetch" href="/assets/js/151.a1cacc6d.js"><link rel="prefetch" href="/assets/js/152.5323fd98.js"><link rel="prefetch" href="/assets/js/153.26e3ed31.js"><link rel="prefetch" href="/assets/js/154.40b97c4a.js"><link rel="prefetch" href="/assets/js/155.b55f4193.js"><link rel="prefetch" href="/assets/js/156.f4128841.js"><link rel="prefetch" href="/assets/js/157.fb299d51.js"><link rel="prefetch" href="/assets/js/158.49064f28.js"><link rel="prefetch" href="/assets/js/159.277037a1.js"><link rel="prefetch" href="/assets/js/16.2d42d5bc.js"><link rel="prefetch" href="/assets/js/160.0664832e.js"><link rel="prefetch" href="/assets/js/161.38ea1a1a.js"><link rel="prefetch" href="/assets/js/162.f96e9c80.js"><link rel="prefetch" href="/assets/js/163.cfb15292.js"><link rel="prefetch" href="/assets/js/164.46dd9498.js"><link rel="prefetch" href="/assets/js/165.86c8b8c1.js"><link rel="prefetch" href="/assets/js/166.3938fc5f.js"><link rel="prefetch" href="/assets/js/167.09cbb683.js"><link rel="prefetch" href="/assets/js/168.aab68e4f.js"><link rel="prefetch" href="/assets/js/169.b01d210b.js"><link rel="prefetch" href="/assets/js/17.59a459c4.js"><link rel="prefetch" href="/assets/js/170.e68bf3e7.js"><link rel="prefetch" href="/assets/js/171.4f0e7d6b.js"><link rel="prefetch" href="/assets/js/172.ae542eee.js"><link rel="prefetch" href="/assets/js/173.c985ca5c.js"><link rel="prefetch" href="/assets/js/174.ece20a6a.js"><link rel="prefetch" href="/assets/js/175.891c0a2f.js"><link rel="prefetch" href="/assets/js/176.93a74e23.js"><link rel="prefetch" href="/assets/js/177.20c492a7.js"><link rel="prefetch" href="/assets/js/178.a9c56f1f.js"><link rel="prefetch" href="/assets/js/179.b42bb139.js"><link rel="prefetch" href="/assets/js/18.318a79e1.js"><link rel="prefetch" href="/assets/js/180.d048122a.js"><link rel="prefetch" href="/assets/js/181.e3633acb.js"><link rel="prefetch" href="/assets/js/182.d30b9f69.js"><link rel="prefetch" href="/assets/js/183.802b20e7.js"><link rel="prefetch" href="/assets/js/184.90e5f242.js"><link rel="prefetch" href="/assets/js/185.5cca4d69.js"><link rel="prefetch" href="/assets/js/186.56dca3cc.js"><link rel="prefetch" href="/assets/js/187.405078e0.js"><link rel="prefetch" href="/assets/js/188.766e2a5e.js"><link rel="prefetch" href="/assets/js/189.c927c79a.js"><link rel="prefetch" href="/assets/js/19.175563ad.js"><link rel="prefetch" href="/assets/js/190.92378aeb.js"><link rel="prefetch" href="/assets/js/191.167ff3f3.js"><link rel="prefetch" href="/assets/js/192.53c8ab5d.js"><link rel="prefetch" href="/assets/js/193.05fa90e3.js"><link rel="prefetch" href="/assets/js/194.df254afb.js"><link rel="prefetch" href="/assets/js/195.1c40c74b.js"><link rel="prefetch" href="/assets/js/196.3dbd36a7.js"><link rel="prefetch" href="/assets/js/197.7fd8856f.js"><link rel="prefetch" href="/assets/js/198.2a531f59.js"><link rel="prefetch" href="/assets/js/199.7dc1f153.js"><link rel="prefetch" href="/assets/js/2.f4fe4405.js"><link rel="prefetch" href="/assets/js/20.6c5c8986.js"><link rel="prefetch" href="/assets/js/200.92165c5b.js"><link rel="prefetch" href="/assets/js/201.2953b2e7.js"><link rel="prefetch" href="/assets/js/202.de6ee6b8.js"><link rel="prefetch" href="/assets/js/203.ac627436.js"><link rel="prefetch" href="/assets/js/204.fb9289cb.js"><link rel="prefetch" href="/assets/js/205.90d0284c.js"><link rel="prefetch" href="/assets/js/206.2dbac1ab.js"><link rel="prefetch" href="/assets/js/207.d052f90b.js"><link rel="prefetch" href="/assets/js/208.0818aeb7.js"><link rel="prefetch" href="/assets/js/209.95753ceb.js"><link rel="prefetch" href="/assets/js/21.c0363ec5.js"><link rel="prefetch" href="/assets/js/210.0c9a3892.js"><link rel="prefetch" href="/assets/js/211.43a19344.js"><link rel="prefetch" href="/assets/js/212.f9dee082.js"><link rel="prefetch" href="/assets/js/213.f55d441e.js"><link rel="prefetch" href="/assets/js/214.0836f39e.js"><link rel="prefetch" href="/assets/js/215.807d3ade.js"><link rel="prefetch" href="/assets/js/216.a7c3d830.js"><link rel="prefetch" href="/assets/js/217.ad95582b.js"><link rel="prefetch" href="/assets/js/218.059e8703.js"><link rel="prefetch" href="/assets/js/219.70d1d263.js"><link rel="prefetch" href="/assets/js/22.4fdaa56f.js"><link rel="prefetch" href="/assets/js/220.69e2bb54.js"><link rel="prefetch" href="/assets/js/221.51aa50d8.js"><link rel="prefetch" href="/assets/js/222.8f955066.js"><link rel="prefetch" href="/assets/js/223.3230e791.js"><link rel="prefetch" href="/assets/js/224.35c9623f.js"><link rel="prefetch" href="/assets/js/225.8687c2ec.js"><link rel="prefetch" href="/assets/js/226.d982aa8d.js"><link rel="prefetch" href="/assets/js/227.c297d2cb.js"><link rel="prefetch" href="/assets/js/228.4dcdd69c.js"><link rel="prefetch" href="/assets/js/229.91061a53.js"><link rel="prefetch" href="/assets/js/23.87c6db58.js"><link rel="prefetch" href="/assets/js/24.bf1834df.js"><link rel="prefetch" href="/assets/js/25.869317d7.js"><link rel="prefetch" href="/assets/js/26.e656381b.js"><link rel="prefetch" href="/assets/js/27.d1fa65c2.js"><link rel="prefetch" href="/assets/js/28.fbba6f6f.js"><link rel="prefetch" href="/assets/js/29.e809e77a.js"><link rel="prefetch" href="/assets/js/3.cc1736a7.js"><link rel="prefetch" href="/assets/js/30.b84a8f21.js"><link rel="prefetch" href="/assets/js/31.dca209c1.js"><link rel="prefetch" href="/assets/js/32.c0efa5ac.js"><link rel="prefetch" href="/assets/js/33.8b948e2d.js"><link rel="prefetch" href="/assets/js/34.9dff7b9d.js"><link rel="prefetch" href="/assets/js/35.a9c7aa47.js"><link rel="prefetch" href="/assets/js/36.d9eeb78f.js"><link rel="prefetch" href="/assets/js/37.7ecb6ef5.js"><link rel="prefetch" href="/assets/js/38.260a994c.js"><link rel="prefetch" href="/assets/js/39.c3d0c942.js"><link rel="prefetch" href="/assets/js/4.2eb3fd02.js"><link rel="prefetch" href="/assets/js/40.31216541.js"><link rel="prefetch" href="/assets/js/41.7b70eaf0.js"><link rel="prefetch" href="/assets/js/42.057d8df6.js"><link rel="prefetch" href="/assets/js/43.b17a6aae.js"><link rel="prefetch" href="/assets/js/44.5f61dab7.js"><link rel="prefetch" href="/assets/js/45.381b04c9.js"><link rel="prefetch" href="/assets/js/46.1c911d7c.js"><link rel="prefetch" href="/assets/js/47.692e2e27.js"><link rel="prefetch" href="/assets/js/48.6747a87a.js"><link rel="prefetch" href="/assets/js/49.e636869b.js"><link rel="prefetch" href="/assets/js/5.0941abdb.js"><link rel="prefetch" href="/assets/js/50.57b758f4.js"><link rel="prefetch" href="/assets/js/51.4c0d2270.js"><link rel="prefetch" href="/assets/js/52.61d5b4f1.js"><link rel="prefetch" href="/assets/js/53.56438d06.js"><link rel="prefetch" href="/assets/js/54.4afb8008.js"><link rel="prefetch" href="/assets/js/55.a7c27448.js"><link rel="prefetch" href="/assets/js/56.8a9849da.js"><link rel="prefetch" href="/assets/js/57.371d9d12.js"><link rel="prefetch" href="/assets/js/58.3d2501b6.js"><link rel="prefetch" href="/assets/js/59.ab37b38d.js"><link rel="prefetch" href="/assets/js/6.15c5e328.js"><link rel="prefetch" href="/assets/js/60.7043cbf5.js"><link rel="prefetch" href="/assets/js/61.470fa853.js"><link rel="prefetch" href="/assets/js/62.b51637d5.js"><link rel="prefetch" href="/assets/js/63.ff70c9ee.js"><link rel="prefetch" href="/assets/js/64.4621481d.js"><link rel="prefetch" href="/assets/js/65.2d58a524.js"><link rel="prefetch" href="/assets/js/66.5df03e62.js"><link rel="prefetch" href="/assets/js/67.73c671d9.js"><link rel="prefetch" href="/assets/js/68.4de1c271.js"><link rel="prefetch" href="/assets/js/69.46ed47d5.js"><link rel="prefetch" href="/assets/js/7.9aacc405.js"><link rel="prefetch" href="/assets/js/70.a85fca0c.js"><link rel="prefetch" href="/assets/js/71.f6151eb7.js"><link rel="prefetch" href="/assets/js/72.2c5ab8cf.js"><link rel="prefetch" href="/assets/js/73.dcf07497.js"><link rel="prefetch" href="/assets/js/74.3253492f.js"><link rel="prefetch" href="/assets/js/75.bef82a69.js"><link rel="prefetch" href="/assets/js/76.29cac87f.js"><link rel="prefetch" href="/assets/js/77.8fef1f03.js"><link rel="prefetch" href="/assets/js/78.28647d83.js"><link rel="prefetch" href="/assets/js/79.1a0eb05b.js"><link rel="prefetch" href="/assets/js/8.cb5899ca.js"><link rel="prefetch" href="/assets/js/80.8eacbc37.js"><link rel="prefetch" href="/assets/js/81.f8e7c85e.js"><link rel="prefetch" href="/assets/js/82.a6b89300.js"><link rel="prefetch" href="/assets/js/83.daf1b549.js"><link rel="prefetch" href="/assets/js/84.f330e398.js"><link rel="prefetch" href="/assets/js/85.f647b247.js"><link rel="prefetch" href="/assets/js/86.e82005d4.js"><link rel="prefetch" href="/assets/js/87.e1f95a69.js"><link rel="prefetch" href="/assets/js/88.9709422a.js"><link rel="prefetch" href="/assets/js/89.4ff5c882.js"><link rel="prefetch" href="/assets/js/9.f995bbe8.js"><link rel="prefetch" href="/assets/js/90.fff47bcf.js"><link rel="prefetch" href="/assets/js/91.9eb501f7.js"><link rel="prefetch" href="/assets/js/92.7b12896a.js"><link rel="prefetch" href="/assets/js/93.54d0e6b6.js"><link rel="prefetch" href="/assets/js/94.c6e7a2f7.js"><link rel="prefetch" href="/assets/js/95.bf70fc45.js"><link rel="prefetch" href="/assets/js/96.b382caf8.js"><link rel="prefetch" href="/assets/js/97.14909b27.js"><link rel="prefetch" href="/assets/js/98.8023c3ac.js"><link rel="prefetch" href="/assets/js/99.3db30893.js">
<link rel="stylesheet" href="/assets/css/0.styles.9ca8d33d.css">
</head>
<body>
<div id="app" data-server-rendered="true"><div class="theme-container"><div class="theme-default-content"><h1>404</h1> <blockquote>How did we get here?</blockquote> <a href="/" class="router-link-active">
Take me home.
</a></div></div><div class="global-ui"></div></div>
<script src="/assets/js/app.189f52e4.js" defer></script><script src="/assets/js/129.88b4391d.js" defer></script>
</body>
</html>
================================================
FILE: docs/assets/css/0.styles.9ca8d33d.css
================================================
code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu Mono,monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{padding:1em;margin:.5em 0;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background:#2d2d2d}:not(pre)>code[class*=language-]{padding:.1em;border-radius:.3em;white-space:normal}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#999}.token.punctuation{color:#ccc}.token.attr-name,.token.deleted,.token.namespace,.token.tag{color:#e2777a}.token.function-name{color:#6196cc}.token.boolean,.token.function,.token.number{color:#f08d49}.token.class-name,.token.constant,.token.property,.token.symbol{color:#f8c555}.token.atrule,.token.builtin,.token.important,.token.keyword,.token.selector{color:#cc99cd}.token.attr-value,.token.char,.token.regex,.token.string,.token.variable{color:#7ec699}.token.entity,.token.operator,.token.url{color:#67cdcc}.token.bold,.token.important{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.inserted{color:green}.theme-default-content code{color:#476582;padding:.25rem .5rem;margin:0;font-size:.85em;background-color:rgba(27,31,35,.05);border-radius:3px}.theme-default-content code .token.deleted{color:#ec5975}.theme-default-content code .token.inserted{color:#1389fd}.theme-default-content pre,.theme-default-content pre[class*=language-]{line-height:1.4;padding:1.25rem 1.5rem;margin:.85rem 0;background-color:#282c34;border-radius:6px;overflow:auto}.theme-default-content pre[class*=language-] code,.theme-default-content pre code{color:#fff;padding:0;background-color:transparent;border-radius:0}div[class*=language-]{position:relative;background-color:#282c34;border-radius:6px}div[class*=language-] .highlight-lines{-webkit-user-select:none;user-select:none;padding-top:1.3rem;position:absolute;top:0;left:0;width:100%;line-height:1.4}div[class*=language-] .highlight-lines .highlighted{background-color:rgba(0,0,0,.66)}div[class*=language-] pre,div[class*=language-] pre[class*=language-]{background:transparent;position:relative;z-index:1}div[class*=language-]:before{position:absolute;z-index:3;top:.8em;right:1em;font-size:.75rem;color:hsla(0,0%,100%,.4)}div[class*=language-]:not(.line-numbers-mode) .line-numbers-wrapper{display:none}div[class*=language-].line-numbers-mode .highlight-lines .highlighted{position:relative}div[class*=language-].line-numbers-mode .highlight-lines .highlighted:before{content:" ";position:absolute;z-index:3;left:0;top:0;display:block;width:3.5rem;height:100%;background-color:rgba(0,0,0,.66)}div[class*=language-].line-numbers-mode pre{padding-left:4.5rem;vertical-align:middle}div[class*=language-].line-numbers-mode .line-numbers-wrapper{position:absolute;top:0;width:3.5rem;text-align:center;color:hsla(0,0%,100%,.3);padding:1.25rem 0;line-height:1.4}div[class*=language-].line-numbers-mode .line-numbers-wrapper br{-webkit-user-select:none;user-select:none}div[class*=language-].line-numbers-mode .line-numbers-wrapper .line-number{position:relative;z-index:4;-webkit-user-select:none;user-select:none;font-size:.85em}div[class*=language-].line-numbers-mode:after{content:"";position:absolute;z-index:2;top:0;left:0;width:3.5rem;height:100%;border-radius:6px 0 0 6px;border-right:1px solid rgba(0,0,0,.66);background-color:#282c34}div[class~=language-js]:before{content:"js"}div[class~=language-ts]:before{content:"ts"}div[class~=language-html]:before{content:"html"}div[class~=language-md]:before{content:"md"}div[class~=language-vue]:before{content:"vue"}div[class~=language-css]:before{content:"css"}div[class~=language-sass]:before{content:"sass"}div[class~=language-scss]:before{content:"scss"}div[class~=language-less]:before{content:"less"}div[class~=language-stylus]:before{content:"stylus"}div[class~=language-go]:before{content:"go"}div[class~=language-java]:before{content:"java"}div[class~=language-c]:before{content:"c"}div[class~=language-sh]:before{content:"sh"}div[class~=language-yaml]:before{content:"yaml"}div[class~=language-py]:before{content:"py"}div[class~=language-docker]:before{content:"docker"}div[class~=language-dockerfile]:before{content:"dockerfile"}div[class~=language-makefile]:before{content:"makefile"}div[class~=language-javascript]:before{content:"js"}div[class~=language-typescript]:before{content:"ts"}div[class~=language-markup]:before{content:"html"}div[class~=language-markdown]:before{content:"md"}div[class~=language-json]:before{content:"json"}div[class~=language-ruby]:before{content:"rb"}div[class~=language-python]:before{content:"py"}div[class~=language-bash]:before{content:"sh"}div[class~=language-php]:before{content:"php"}.custom-block .custom-block-title{font-weight:600;margin-bottom:-.4rem}.custom-block.danger,.custom-block.tip,.custom-block.warning{padding:.1rem 1.5rem;border-left-width:.5rem;border-left-style:solid;margin:1rem 0}.custom-block.tip{background-color:#f3f5f7;border-color:#42b983}.custom-block.warning{background-color:rgba(255,229,100,.3);border-color:#e7c000;color:#6b5900}.custom-block.warning .custom-block-title{color:#b29400}.custom-block.warning a{color:#2c3e50}.custom-block.danger{background-color:#ffe6e6;border-color:#c00;color:#4d0000}.custom-block.danger .custom-block-title{color:#900}.custom-block.danger a{color:#2c3e50}.custom-block.details{display:block;position:relative;border-radius:2px;margin:1.6em 0;padding:1.6em;background-color:#eee}.custom-block.details h4{margin-top:0}.custom-block.details figure:last-child,.custom-block.details p:last-child{margin-bottom:0;padding-bottom:0}.custom-block.details summary{outline:none;cursor:pointer}.arrow{display:inline-block;width:0;height:0}.arrow.up{border-bottom:6px solid #ccc}.arrow.down,.arrow.up{border-left:4px solid transparent;border-right:4px solid transparent}.arrow.down{border-top:6px solid #ccc}.arrow.right{border-left:6px solid #ccc}.arrow.left,.arrow.right{border-top:4px solid transparent;border-bottom:4px solid transparent}.arrow.left{border-right:6px solid #ccc}.theme-default-content:not(.custom){max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.theme-default-content:not(.custom){padding:2rem}}@media (max-width:419px){.theme-default-content:not(.custom){padding:1.5rem}}.table-of-contents .badge{vertical-align:middle}body,html{padding:0;margin:0;background-color:#fff}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,Cantarell,Fira Sans,Droid Sans,Helvetica Neue,sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-size:16px;color:#2c3e50}.page{padding-left:20rem}.navbar{z-index:20;right:0;height:3.6rem;background-color:#fff;box-sizing:border-box;border-bottom:1px solid #eaecef}.navbar,.sidebar-mask{position:fixed;top:0;left:0}.sidebar-mask{z-index:9;width:100vw;height:100vh;display:none}.sidebar{font-size:16px;background-color:#fff;width:20rem;position:fixed;z-index:10;margin:0;top:3.6rem;left:0;bottom:0;box-sizing:border-box;border-right:1px solid #eaecef;overflow-y:auto}.theme-default-content:not(.custom)>:first-child{margin-top:3.6rem}.theme-default-content:not(.custom) a:hover{text-decoration:underline}.theme-default-content:not(.custom) p.demo{padding:1rem 1.5rem;border:1px solid #ddd;border-radius:4px}.theme-default-content:not(.custom) img{max-width:100%}.theme-default-content.custom{padding:0;margin:0}.theme-default-content.custom img{max-width:100%}a{font-weight:500;text-decoration:none}a,p a code{color:#1389fd}p a code{font-weight:400}kbd{background:#eee;border:.15rem solid #ddd;border-bottom:.25rem solid #ddd;border-radius:.15rem;padding:0 .15em}blockquote{font-size:1rem;color:#999;border-left:.2rem solid #dfe2e5;margin:1rem 0;padding:.25rem 0 .25rem 1rem}blockquote>p{margin:0}ol,ul{padding-left:1.2em}strong{font-weight:600}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25}.theme-default-content:not(.custom)>h1,.theme-default-content:not(.custom)>h2,.theme-default-content:not(.custom)>h3,.theme-default-content:not(.custom)>h4,.theme-default-content:not(.custom)>h5,.theme-default-content:not(.custom)>h6{margin-top:-3.1rem;padding-top:4.6rem;margin-bottom:0}.theme-default-content:not(.custom)>h1:first-child,.theme-default-content:not(.custom)>h2:first-child,.theme-default-content:not(.custom)>h3:first-child,.theme-default-content:not(.custom)>h4:first-child,.theme-default-content:not(.custom)>h5:first-child,.theme-default-content:not(.custom)>h6:first-child{margin-top:-1.5rem;margin-bottom:1rem}.theme-default-content:not(.custom)>h1:first-child+.custom-block,.theme-default-content:not(.custom)>h1:first-child+p,.theme-default-content:not(.custom)>h1:first-child+pre,.theme-default-content:not(.custom)>h2:first-child+.custom-block,.theme-default-content:not(.custom)>h2:first-child+p,.theme-default-content:not(.custom)>h2:first-child+pre,.theme-default-content:not(.custom)>h3:first-child+.custom-block,.theme-default-content:not(.custom)>h3:first-child+p,.theme-default-content:not(.custom)>h3:first-child+pre,.theme-default-content:not(.custom)>h4:first-child+.custom-block,.theme-default-content:not(.custom)>h4:first-child+p,.theme-default-content:not(.custom)>h4:first-child+pre,.theme-default-content:not(.custom)>h5:first-child+.custom-block,.theme-default-content:not(.custom)>h5:first-child+p,.theme-default-content:not(.custom)>h5:first-child+pre,.theme-default-content:not(.custom)>h6:first-child+.custom-block,.theme-default-content:not(.custom)>h6:first-child+p,.theme-default-content:not(.custom)>h6:first-child+pre{margin-top:2rem}h1:focus .header-anchor,h1:hover .header-anchor,h2:focus .header-anchor,h2:hover .header-anchor,h3:focus .header-anchor,h3:hover .header-anchor,h4:focus .header-anchor,h4:hover .header-anchor,h5:focus .header-anchor,h5:hover .header-anchor,h6:focus .header-anchor,h6:hover .header-anchor{opacity:1}h1{font-size:2.2rem}h2{font-size:1.65rem;padding-bottom:.3rem;border-bottom:1px solid #eaecef}h3{font-size:1.35rem}a.header-anchor{font-size:.85em;float:left;margin-left:-.87em;padding-right:.23em;margin-top:.125em;opacity:0}a.header-anchor:focus,a.header-anchor:hover{text-decoration:none}.line-number,code,kbd{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}ol,p,ul{line-height:1.7}hr{border:0;border-top:1px solid #eaecef}table{border-collapse:collapse;margin:1rem 0;display:block;overflow-x:auto}tr{border-top:1px solid #dfe2e5}tr:nth-child(2n){background-color:#f6f8fa}td,th{border:1px solid #dfe2e5;padding:.6em 1em}.theme-container.sidebar-open .sidebar-mask{display:block}.theme-container.no-navbar .theme-default-content:not(.custom)>h1,.theme-container.no-navbar h2,.theme-container.no-navbar h3,.theme-container.no-navbar h4,.theme-container.no-navbar h5,.theme-container.no-navbar h6{margin-top:1.5rem;padding-top:0}.theme-container.no-navbar .sidebar{top:0}@media (min-width:720px){.theme-container.no-sidebar .sidebar{display:none}.theme-container.no-sidebar .page{padding-left:0}}@media (max-width:959px){.sidebar{font-size:15px;width:16.4rem}.page{padding-left:16.4rem}}@media (max-width:719px){.sidebar{top:0;padding-top:3.6rem;transform:translateX(-100%);transition:transform .2s ease}.page{padding-left:0}.theme-container.sidebar-open .sidebar{transform:translateX(0)}.theme-container.no-navbar .sidebar{padding-top:0}}@media (max-width:419px){h1{font-size:1.9rem}.theme-default-content div[class*=language-]{margin:.85rem -1.5rem;border-radius:0}}#nprogress{pointer-events:none}#nprogress .bar{background:#1389fd;position:fixed;z-index:1031;top:0;left:0;width:100%;height:2px}#nprogress .peg{display:block;position:absolute;right:0;width:100px;height:100%;box-shadow:0 0 10px #1389fd,0 0 5px #1389fd;opacity:1;transform:rotate(3deg) translateY(-4px)}#nprogress .spinner{display:block;position:fixed;z-index:1031;top:15px;right:15px}#nprogress .spinner-icon{width:18px;height:18px;box-sizing:border-box;border-color:#1389fd transparent transparent #1389fd;border-style:solid;border-width:2px;border-radius:50%;-webkit-animation:nprogress-spinner .4s linear infinite;animation:nprogress-spinner .4s linear infinite}.nprogress-custom-parent{overflow:hidden;position:relative}.nprogress-custom-parent #nprogress .bar,.nprogress-custom-parent #nprogress .spinner{position:absolute}@-webkit-keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@keyframes nprogress-spinner{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.icon.outbound{color:#aaa;display:inline-block;vertical-align:middle;position:relative;top:-1px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}.home{padding:3.6rem 2rem 0;max-width:960px;margin:0 auto;display:block}.home .hero{text-align:center}.home .hero img{max-width:100%;max-height:280px;display:block;margin:3rem auto 1.5rem}.home .hero h1{font-size:3rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.8rem auto}.home .hero .description{max-width:35rem;font-size:1.6rem;line-height:1.3;color:#6a8bad}.home .hero .action-button{display:inline-block;font-size:1.2rem;color:#fff;background-color:#1389fd;padding:.8rem 1.6rem;border-radius:4px;transition:background-color .1s ease;box-sizing:border-box;border-bottom:1px solid #027bf3}.home .hero .action-button:hover{background-color:#2b95fd}.home .features{border-top:1px solid #eaecef;padding:1.2rem 0;margin-top:2.5rem;display:flex;flex-wrap:wrap;align-items:flex-start;align-content:stretch;justify-content:space-between}.home .feature{flex-grow:1;flex-basis:30%;max-width:30%}.home .feature h2{font-size:1.4rem;font-weight:500;border-bottom:none;padding-bottom:0;color:#3a5169}.home .feature p{color:#4e6e8e}.home .footer{padding:2.5rem;border-top:1px solid #eaecef;text-align:center;color:#4e6e8e}@media (max-width:719px){.home .features{flex-direction:column}.home .feature{max-width:100%;padding:0 2.5rem}}@media (max-width:419px){.home{padding-left:1.5rem;padding-right:1.5rem}.home .hero img{max-height:210px;margin:2rem auto 1.2rem}.home .hero h1{font-size:2rem}.home .hero .action,.home .hero .description,.home .hero h1{margin:1.2rem auto}.home .hero .description{font-size:1.2rem}.home .hero .action-button{font-size:1rem;padding:.6rem 1.2rem}.home .feature h2{font-size:1.25rem}}.search-box{display:inline-block;position:relative;margin-right:1rem}.search-box input{cursor:text;width:10rem;height:2rem;color:#4e6e8e;display:inline-block;border:1px solid #cfd4db;border-radius:2rem;font-size:.9rem;line-height:2rem;padding:0 .5rem 0 2rem;outline:none;transition:all .2s ease;background:#fff url(/assets/img/search.83621669.svg) .6rem .5rem no-repeat;background-size:1rem}.search-box input:focus{cursor:auto;border-color:#1389fd}.search-box .suggestions{background:#fff;width:20rem;position:absolute;top:2rem;border:1px solid #cfd4db;border-radius:6px;padding:.4rem;list-style-type:none}.search-box .suggestions.align-right{right:0}.search-box .suggestion{line-height:1.4;padding:.4rem .6rem;border-radius:4px;cursor:pointer}.search-box .suggestion a{white-space:normal;color:#5d82a6}.search-box .suggestion a .page-title{font-weight:600}.search-box .suggestion a .header{font-size:.9em;margin-left:.25em}.search-box .suggestion.focused{background-color:#f3f4f5}.search-box .suggestion.focused a{color:#1389fd}@media (max-width:959px){.search-box input{cursor:pointer;width:0;border-color:transparent;position:relative}.search-box input:focus{cursor:text;left:0;width:10rem}}@media (-ms-high-contrast:none){.search-box input{height:2rem}}@media (max-width:959px) and (min-width:719px){.search-box .suggestions{left:0}}@media (max-width:719px){.search-box{margin-right:0}.search-box input{left:1rem}.search-box .suggestions{right:0}}@media (max-width:419px){.search-box .suggestions{width:calc(100vw - 4rem)}.search-box input:focus{width:8rem}}.sidebar-button{cursor:pointer;display:none;width:1.25rem;height:1.25rem;position:absolute;padding:.6rem;top:.6rem;left:1rem}.sidebar-button .icon{display:block;width:1.25rem;height:1.25rem}@media (max-width:719px){.sidebar-button{display:block}}.dropdown-enter,.dropdown-leave-to{height:0!important}.dropdown-wrapper{cursor:pointer}.dropdown-wrapper .dropdown-title,.dropdown-wrapper .mobile-dropdown-title{display:block;font-size:.9rem;font-family:inherit;cursor:inherit;padding:inherit;line-height:1.4rem;background:transparent;border:none;font-weight:500;color:#2c3e50}.dropdown-wrapper .dropdown-title:hover,.dropdown-wrapper .mobile-dropdown-title:hover{border-color:transparent}.dropdown-wrapper .dropdown-title .arrow,.dropdown-wrapper .mobile-dropdown-title .arrow{vertical-align:middle;margin-top:-1px;margin-left:.4rem}.dropdown-wrapper .mobile-dropdown-title{display:none;font-weight:600}.dropdown-wrapper .mobile-dropdown-title font-size inherit:hover{color:#1389fd}.dropdown-wrapper .nav-dropdown .dropdown-item{color:inherit;line-height:1.7rem}.dropdown-wrapper .nav-dropdown .dropdown-item h4{margin:.45rem 0 0;border-top:1px solid #eee;padding:1rem 1.5rem .45rem 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper{padding:0;list-style:none}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem-wrapper .dropdown-subitem{font-size:.9em}.dropdown-wrapper .nav-dropdown .dropdown-item a{display:block;line-height:1.7rem;position:relative;border-bottom:none;font-weight:400;margin-bottom:0;padding:0 1.5rem 0 1.25rem}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active,.dropdown-wrapper .nav-dropdown .dropdown-item a:hover{color:#1389fd}.dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{content:"";width:0;height:0;border-left:5px solid #1389fd;border-top:3px solid transparent;border-bottom:3px solid transparent;position:absolute;top:calc(50% - 2px);left:9px}.dropdown-wrapper .nav-dropdown .dropdown-item:first-child h4{margin-top:0;padding-top:0;border-top:0}@media (max-width:719px){.dropdown-wrapper.open .dropdown-title{margin-bottom:.5rem}.dropdown-wrapper .dropdown-title{display:none}.dropdown-wrapper .mobile-dropdown-title{display:block}.dropdown-wrapper .nav-dropdown{transition:height .1s ease-out;overflow:hidden}.dropdown-wrapper .nav-dropdown .dropdown-item h4{border-top:0;margin-top:0;padding-top:0}.dropdown-wrapper .nav-dropdown .dropdown-item>a,.dropdown-wrapper .nav-dropdown .dropdown-item h4{font-size:15px;line-height:2rem}.dropdown-wrapper .nav-dropdown .dropdown-item .dropdown-subitem{font-size:14px;padding-left:1rem}}@media (min-width:719px){.dropdown-wrapper{height:1.8rem}.dropdown-wrapper.open .nav-dropdown,.dropdown-wrapper:hover .nav-dropdown{display:block!important}.dropdown-wrapper.open:blur{display:none}.dropdown-wrapper .nav-dropdown{display:none;height:auto!important;box-sizing:border-box;max-height:calc(100vh - 2.7rem);overflow-y:auto;position:absolute;top:100%;right:0;background-color:#fff;padding:.6rem 0;border:1px solid;border-color:#ddd #ddd #ccc;text-align:left;border-radius:.25rem;white-space:nowrap;margin:0}}.nav-links{display:inline-block}.nav-links a{line-height:1.4rem;color:inherit}.nav-links a.router-link-active,.nav-links a:hover{color:#1389fd}.nav-links .nav-item{position:relative;display:inline-block;margin-left:1.5rem;line-height:2rem}.nav-links .nav-item:first-child{margin-left:0}.nav-links .repo-link{margin-left:1.5rem}@media (max-width:719px){.nav-links .nav-item,.nav-links .repo-link{margin-left:0}}@media (min-width:719px){.nav-links a.router-link-active,.nav-links a:hover{color:#2c3e50}.nav-item>a:not(.external).router-link-active,.nav-item>a:not(.external):hover{margin-bottom:-2px;border-bottom:2px solid #2692fd}}.navbar{padding:.7rem 1.5rem;line-height:2.2rem}.navbar a,.navbar img,.navbar span{display:inline-block}.navbar .logo{height:2.2rem;min-width:2.2rem;margin-right:.8rem;vertical-align:top}.navbar .site-name{font-size:1.3rem;font-weight:600;color:#2c3e50;position:relative}.navbar .links{padding-left:1.5rem;box-sizing:border-box;background-color:#fff;white-space:nowrap;font-size:.9rem;position:absolute;right:1.5rem;top:.7rem;display:flex}.navbar .links .search-box{flex:0 0 auto;vertical-align:top}@media (max-width:719px){.navbar{padding-left:4rem}.navbar .can-hide{display:none}.navbar .links{padding-left:1.5rem}.navbar .site-name{width:calc(100vw - 9.4rem);overflow:hidden;white-space:nowrap;text-overflow:ellipsis}}.page-edit{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-edit{padding:2rem}}@media (max-width:419px){.page-edit{padding:1.5rem}}.page-edit{padding-top:1rem;padding-bottom:1rem;overflow:auto}.page-edit .edit-link{display:inline-block}.page-edit .edit-link a{color:#4e6e8e;margin-right:.25rem}.page-edit .last-updated{float:right;font-size:.9em}.page-edit .last-updated .prefix{font-weight:500;color:#4e6e8e}.page-edit .last-updated .time{font-weight:400;color:#767676}@media (max-width:719px){.page-edit .edit-link{margin-bottom:.5rem}.page-edit .last-updated{font-size:.8em;float:none;text-align:left}}.page-nav{max-width:740px;margin:0 auto;padding:2rem 2.5rem}@media (max-width:959px){.page-nav{padding:2rem}}@media (max-width:419px){.page-nav{padding:1.5rem}}.page-nav{padding-top:1rem;padding-bottom:0}.page-nav .inner{min-height:2rem;margin-top:0;border-top:1px solid #eaecef;padding-top:1rem;overflow:auto}.page-nav .next{float:right}.page{padding-bottom:2rem;display:block}.sidebar-group .sidebar-group{padding-left:.5em}.sidebar-group:not(.collapsable) .sidebar-heading:not(.clickable){cursor:auto;color:inherit}.sidebar-group.is-sub-group{padding-left:0}.sidebar-group.is-sub-group>.sidebar-heading{font-size:.95em;line-height:1.4;font-weight:400;padding-left:2rem}.sidebar-group.is-sub-group>.sidebar-heading:not(.clickable){opacity:.5}.sidebar-group.is-sub-group>.sidebar-group-items{padding-left:1rem}.sidebar-group.is-sub-group>.sidebar-group-items>li>.sidebar-link{font-size:.95em;border-left:none}.sidebar-group.depth-2>.sidebar-heading{border-left:none}.sidebar-heading{color:#2c3e50;transition:color .15s ease;cursor:pointer;font-size:1.1em;font-weight:700;padding:.35rem 1.5rem .35rem 1.25rem;width:100%;box-sizing:border-box;margin:0;border-left:.25rem solid transparent}.sidebar-heading.open,.sidebar-heading:hover{color:inherit}.sidebar-heading .arrow{position:relative;top:-.12em;left:.5em}.sidebar-heading.clickable.active{font-weight:600;color:#1389fd;border-left-color:#1389fd}.sidebar-heading.clickable:hover{color:#1389fd}.sidebar-group-items{transition:height .1s ease-out;font-size:.95em;overflow:hidden}.sidebar .sidebar-sub-headers{padding-left:1rem;font-size:.95em}a.sidebar-link{font-size:1em;font-weight:400;display:inline-block;color:#2c3e50;border-left:.25rem solid transparent;padding:.35rem 1rem .35rem 1.25rem;line-height:1.4;width:100%;box-sizing:border-box}a.sidebar-link:hover{color:#1389fd}a.sidebar-link.active{font-weight:600;color:#1389fd;border-left-color:#1389fd}.sidebar-group a.sidebar-link{padding-left:2rem}.sidebar-sub-headers a.sidebar-link{padding-top:.25rem;padding-bottom:.25rem;border-left:none}.sidebar-sub-headers a.sidebar-link.active{font-weight:500}.sidebar ul{padding:0;margin:0;list-style-type:none}.sidebar a{display:inline-block}.sidebar .nav-links{display:none;border-bottom:1px solid #eaecef;padding:.5rem 0 .75rem}.sidebar .nav-links a{font-weight:600}.sidebar .nav-links .nav-item,.sidebar .nav-links .repo-link{display:block;line-height:1.25rem;font-size:1.1em;padding:.5rem 0 .5rem 1.5rem}.sidebar>.sidebar-links{padding:1.5rem 0}.sidebar>.sidebar-links>li>a.sidebar-link{font-size:1.1em;line-height:1.7;font-weight:700}.sidebar>.sidebar-links>li:not(:first-child){margin-top:.75rem}@media (max-width:719px){.sidebar .nav-links{display:block}.sidebar .nav-links .dropdown-wrapper .nav-dropdown .dropdown-item a.router-link-active:after{top:calc(1rem - 2px)}.sidebar>.sidebar-links{padding:1rem 0}}.copyright{text-align:center;margin:50px 16px 8px;color:grey;font-size:.9em}.f-links a{font-weight:400;text-decoration:underline;font-size:.9em;color:#1e90ff!important}.f-links a:hover{opacity:.8!important}.book{transition:box-shadow .2s;max-width:180px;box-shadow:2px 2px 5px #aaa;cursor:pointer}.book:hover{box-shadow:5px 5px 8px #888}.theme-code-block[data-v-759a7d02]{display:none}.theme-code-block__active[data-v-759a7d02]{display:block}.theme-code-block>pre[data-v-759a7d02]{background-color:orange}.badge[data-v-15b7b770]{display:inline-block;font-size:14px;height:18px;line-height:18px;border-radius:3px;padding:0 6px;color:#fff}.badge.green[data-v-15b7b770],.badge.tip[data-v-15b7b770],.badge[data-v-15b7b770]{background-color:#42b983}.badge.error[data-v-15b7b770]{background-color:#da5961}.badge.warn[data-v-15b7b770],.badge.warning[data-v-15b7b770],.badge.yellow[data-v-15b7b770]{background-color:#e7c000}.badge+.badge[data-v-15b7b770]{margin-left:5px}.theme-code-group__nav[data-v-deefee04]{margin-bottom:-35px;background-color:#282c34;padding-bottom:22px;border-top-left-radius:6px;border-top-right-radius:6px;padding-left:10px;padding-top:10px}.theme-code-group__ul[data-v-deefee04]{margin:auto 0;padding-left:0;display:inline-flex;list-style:none}.theme-code-group__nav-tab[data-v-deefee04]{border:0;padding:5px;cursor:pointer;background-color:transparent;font-size:.85em;line-height:1.4;color:hsla(0,0%,100%,.9);font-weight:600}.theme-code-group__nav-tab-active[data-v-deefee04]{border-bottom:1px solid #42b983}.pre-blank[data-v-deefee04]{color:#42b983}
================================================
FILE: docs/assets/js/10.5f481ee1.js
================================================
(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{583:function(t,s){t.exports="data:image/png;base64,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J598cvF5NIITjs6BoyOvvPKKGYzao+zJJ59MK6+8svVj5plrAy1da5R88cUX6eCDD07ff/990e8XXnghXX311QnnlBNiIwRynuISAj5833jjjfZxU/HM+a+//rrgGsfgHF9ORhZffHHLk+acfir77rvvpg8//NBsT5zC82mnnVZ8PPXtt99Od999dzrkkEMsENBGU6R2awB8yBJScfgbbrjBgMcQbr/9dsOUSHz44Ycb6eutt545JXW33Xbb9O233yaidVlwfp4KZ5xxRlphhRWGnN58882tjdtuuy0tsMAC9kWkY4891gIM7d58883m9BgbxEtOPPHEhPOfffbZ6b777rM25p133oQxvPzyy6pWKy2jrlWnKjpz/PHHm/PvvPPO6d5777UZ2hprrGFP8vPOO8+uwEl5YuP8zOjgigC96aabps8//zwdddRRabnllrMZxDLLLGPXnHrqqfYwqbilBQLugTz00ENFlcsuu8zS48ePt6DALOOUU04x57/ooovM8QlMBAcWFf3DpGikxonaBYClllrKouiCCy6Yll56aZuyg99TTz1lMAIwK+pzzDFHOv/889NCCy2UqIvTIhiEj/qUERxOOumktMUWW1iblEkgljaY/p9++ukqtkBCuzwZttlmGyt/8cUXi/O8XjCd3GSTTdJcc81lbfCqgNQ1ABSdr3ECx4YrsD3iiCPs89a8ox944IHW6zfeeMM0dsDskM+eM2ODK3gkMCPYCAGP1zYFPpy0/Bpnlf/3R68AOLaEmQei14pLL73UHhI77rhjWmedddJ8882Xll9++UQe4ZWlSVK7eaqmZAIRYhGe7ghTMqT8vXvIxcEfe+wxCxa777671eMPBHUjCy+8cFHN90Pvdrx6SFZccUXrE1NNHP7LL7+0g/M8JUKmDwGcFWx57+fpz5Se93N9rZoAgfzwww+mCb6amlPA6x/rAXJ6q9TlH2YMCG1zH3hkLYJXDq1B8TqK8O6voESemSuCLeyyyy6WrsMf4SBd7lPtAkC5g8qLeL1zewdVHQUL3vV6IeoDbTMDYNrJKwmGQ/CQUfbi3oPUJq9a7M/j9HBKANeakHBQQKiyA63TqG63GidZd911EzO99957z5ycazX9Jw3fiBYWLeP++HULV1zbZGMCgBDU05jIXBYt9LGT0EvhP9CQ89966622a8D9LrjgAivv5b1z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"},584:function(t,s){t.exports="data:image/png;base64,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"},585:function(t,s){t.exports="data:image/png;base64,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"},586:function(t,s){t.exports="data:image/png;base64,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"},587:function(t,s,a){t.exports=a.p+"assets/img/3-14.e8ad30dc.png"},588:function(t,s){t.exports="data:image/png;base64,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"},589:function(t,s){t.exports="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKoAAABQCAYAAACJf+79AAAMJWlDQ1BJQ0MgUHJvZmlsZQAASImVVwdUk8kWnr8kISGhBUKREnoTpUiXGloEAamCjZAEEkoMgSBiBVlUYC2oWLCiqyKKrgWQxYZdWRTsdUFERVlFXWyovEkC6LqvnHfPmZnv3Ln3znennRkAVCM5YnEGqgZApihHEhXsz5yckMgkPQIo0AbKgATGcrjZYr/IyDAAZbj9u7y7CRBZe81OFuuf/f9V1Hn8bC4ASCTEybxsbibEhwHAXbhiSQ4AhF6oN52VI4aYCFkCTQkkCLGZDKcqsJsMJytwmNwmJooFcRIASlQOR5IKgIqMFzOXmwrjqJRBbC/iCUUQN0HszRVweBB/hnh0ZuZMiFWtILZK/i5O6t9iJo/E5HBSR7AiF7koBQizxRmc2f/ndPxvycyQDo9hCgtVIAmJkuUsm7f0maEyTIX4gig5PAJiDYivC3lyexl+IpCGxA7Zf+Bms+CcAQYAKJXHCQiFWB9iE2l6rN8Q9uZI5L7QHk3MF8TEK+KjIsnMqKH4aL4oIzxsKE6ZgM8exlX87MDoYZsUYRAbYriGaIMwhx0zFPNCrjAuHGIViO9np0eHDvk+zxewwkfGkkbJOMM1x0Bm9nAumFmKJChKYY+5CITs8CF9WI4gJkThi03ncuQcdCBO42dPDhvmw+MHBCr4YIV8UewQT6xcnOMfNWS/Q5wROWSPNfEzgmV6E4hbs3Ojh337cuBmU+SCgzTOhEjFuLimOCcyRsENZ4IwwAIBgAmksCSDmSANCFt763vBcE8Q4AAJSAV8YDekGfaIl/eIYB0N8sGfEPFB9oifv7yXD3Kh/suIVlHbgRR5b67cIx08gTgT18O9cU88DNa+sDjibrj7sB9TdXhUYiAxgBhCDCJazxAWSn6IywRcmEEGLBIQCls+zErGQTTM/VscwhNCG+ER4Qahg3AHxIHH0E74jwy/RROO6CaCDhg1aCi75O+zwy0ga2fcH/eC/CF3nIHrATt8HMzED/eBuTlD7bdZ+3fcpcOsyfZklKxN9iVb/WinYqPiPOIjy+17ngpeySOZsEZ6fhyN9V1uPNiG/miJLcEOYeexU9hFrAmrB0zsBNaAtWDHZHhkbzyW743h0aLkfNJhHOGwjX2NfY/95x/G5gyNL5GvP8jh5+XIDg5rpni2RJgqyGH6wduaz2SLuGNGMx3tHeAtKrv7FVfLW4b8TkcYl77pCuYAMP7Q4OBg0zddGLxZjhgAQHn1TWf1Hh5newAuFHClklyFDpdVBEABqvCk6AJDeHdZwYwcgQvwBL4gEEwAESAGJIDpcJ4FIBOyngXmggJQDErBCrAGbABbwHawG+wDB0E9aAKnwDlwGVwFN8A9uFe6wQvQB96BAQRBSAgNoSO6iBFijtgijogb4o0EImFIFJKAJCGpiAiRInORRUgpUo5sQLYh1civyFHkFHIRaUPuIJ1ID/IG+YRiKBXVRA1QC3Qs6ob6oaFoDDoNTUWz0Hy0CF2GrkOr0L1oHXoKvYzeQDvQF2g/BjBljIEZY3aYG8bCIrBELAWTYPOxEqwCq8JqsUa40tewDqwX+4gTcTrOxO3gfg3BY3EunoXPx8vwDfhuvA4/g1/DO/E+/CuBRtAn2BI8CGzCZEIqYRahmFBB2Ek4QjgLz1Q34R2RSGQQLYmu8KwmENOIc4hlxE3E/cSTxDZiF7GfRCLpkmxJXqQIEoeUQyomrSftJZ0gtZO6SR+UlJWMlByVgpQSlURKhUoVSnuUjiu1Kz1VGiCrkc3JHuQIMo88m7ycvIPcSL5C7iYPUNQplhQvSgwljVJAWUeppZyl3Ke8VVZWNlF2V56kLFReqLxO+YDyBeVO5Y9UDaoNlUWdSpVSl1F3UU9S71Df0mg0C5ovLZGWQ1tGq6adpj2kfVChq4xRYavwVBaoVKrUqbSrvFQlq5qr+qlOV81XrVA9pHpFtVeNrGahxlLjqM1Xq1Q7qnZLrV+dru6gHqGeqV6mvkf9ovozDZKGhUagBk+jSGO7xmmNLjpGN6Wz6Fz6IvoO+ll6tyZR01KTrZmmWaq5T7NVs09LQ2ucVpxWnlal1jGtDgbGsGCwGRmM5YyDjJuMT9oG2n7afO2l2rXa7drvdUbp+OrwdUp09uvc0Pmky9QN1E3XXalbr/tAD9ez0ZukN0tvs95Zvd5RmqM8R3FHlYw6OOquPqpvox+lP0d/u36Lfr+BoUGwgdhgvcFpg15DhqGvYZrhasPjhj1GdCNvI6HRaqMTRs+ZWkw/ZgZzHfMMs89Y3zjEWGq8zbjVeMDE0iTWpNBkv8kDU4qpm2mK6WrTZtM+MyOziWZzzWrM7pqTzd3MBeZrzc+bv7ewtIi3WGxRb/HMUseSbZlvWWN534pm5WOVZVVldd2aaO1mnW69yfqqDWrjbCOwqbS5YovautgKbTfZto0mjHYfLRpdNfqWHdXOzy7XrsaucwxjTNiYwjH1Y16ONRubOHbl2PNjv9o722fY77C/56DhMMGh0KHR4Y2jjSPXsdLxuhPNKchpgVOD0+txtuP44zaPu+1Md57ovNi52fmLi6uLxKXWpcfVzDXJdaPrLTdNt0i3MrcL7gR3f/cF7k3uHz1cPHI8Dnq88rTzTPfc4/lsvOV4/vgd47u8TLw4Xtu8OryZ3kneW707fIx9OD5VPo98TX15vjt9n/pZ+6X57fV76W/vL/E/4v+e5cGaxzoZgAUEB5QEtAZqBMYGbgh8GGQSlBpUE9QX7Bw8J/hkCCEkNGRlyC22AZvLrmb3TXCdMG/CmVBqaHTohtBHYTZhkrDGiejECRNXTbwfbh4uCq+PABHsiFURDyItI7Mif5tEnBQ5qXLSkyiHqLlR56Pp0TOi90S/i/GPWR5zL9YqVhrbHKcaNzWuOu59fEB8eXzH5LGT502+nKCXIExoSCQlxiXuTOyfEjhlzZTuqc5Ti6fenGY5LW/axel60zOmH5uhOoMz41ASISk+aU/SZ04Ep4rTn8xO3pjcx2Vx13Jf8Hx5q3k9fC9+Of9pildKecqzVK/UVak9Ah9BhaBXyBJuEL5OC0nbkvY+PSJ9V/pgRnzG/kylzKTMoyINUbrozEzDmXkz28S24mJxR5ZH1pqsPkmoZGc2kj0tuyFHEz6yW6RW0p+knbneuZW5H2bFzTqUp54nymuZbTN76eyn+UH5v8zB53DnNM81nlswt3Oe37xt85H5yfObF5guKFrQvTB44e4CSkF6we+F9oXlhX8til/UWGRQtLCo66fgn2qKVYolxbcWey7esgRfIlzSutRp6fqlX0t4JZdK7UsrSj+Xccsu/ezw87qfB5elLGtd7rJ88wriCtGKmyt9Vu4uVy/PL+9aNXFV3Wrm6pLVf62ZseZixbiKLWspa6VrO9aFrWtYb7Z+xfrPGwQbblT6V+7fqL9x6cb3m3ib2jf7bq7dYrCldMunrcKtt7cFb6ursqiq2E7cnrv9yY64Hed/cfuleqfeztKdX3aJdnXsjtp9ptq1unqP/p7lNWiNtKZn79S9V/cF7Guotavdtp+xv/QAOCA98PzXpF9vHgw92HzI7VDtYfPDG4/Qj5TUIXWz6/rqBfUdDQkNbUcnHG1u9Gw88tuY33Y1GTdVHtM6tvw45XjR8cET+Sf6T4pP9p5KPdXVPKP53unJp6+fmXSm9Wzo2Qvngs6dPu93/sQFrwtNFz0uHr3kdqn+ssvluhbnliO/O/9+pNWlte6K65WGq+5XG9vGtx1v92k/dS3g2rnr7OuXb4TfaLsZe/P2ram3Om7zbj+7k3Hn9d3cuwP3Ft4n3C95oPag4qH+w6o/rP/Y3+HScawzoLPlUfSje13crhePsx9/7i56QntS8dToafUzx2dNPUE9V59Ped79QvxioLf4T/U/N760enn4le+rlr7Jfd2vJa8H35S91X27669xfzX3R/Y/fJf5buB9yQfdD7s/un08/yn+09OBWZ9Jn9d9sf7S+DX06/3BzMFBMUfCkT8FMFjQlBQA3uwCgJYAAP0qfD9MUfzN5IIo/pNyBP4TVvzf5OICQC1sZM9w1kkADsBi6QtjwyJ7jsf4AtTJaaQMSXaKk6MiFhX+cAgfBgffwncMqRGAL5LBwYFNg4NfdkCydwA4maX4E8pE9gfdKo/RzshbCH6QfwEOk3CtyyHjHgAAAAlwSFlzAAAWJQAAFiUBSVIk8AAADMxJREFUeAHtXXmMVdUZ/96+zJuFdQZxoCwCFYuUKApYiliX2pYICS4ttQqNwf5DaNEmtJYmtTFNU6vGBtu0SbV1aSuFSq1libSA2LBYJEFZisQZEGQZmO3t791+v/vmg8s4I8PM3HPvfZwvOXPPu+++e873/X7nO+d859w7vmw2a5AWbQGXW8Dv8vrp6mkLmBbQRNVE8IQFNFE9AZOupCaq5oAnLKCJ6gmYdCU1UTUHPGEBTVRPwKQrqYmqOeAJC2iiegImXUlNVM0BT1hAE9UTMOlKaqJqDnjCApqonoBJV1ITVXPAExbQRPUETLqSQa+YwDAMKhaLVCgUCPn2nEFHWg1qzUIDn1fUUFRPgyrDRFdW+qgi5COfz0eBQID8fr+ZV1SJfi3G1UQFIUHMs6k8rXyXaM0hH6ULRAXe6m0YIKcmaNdsOG8X5igFfAZFA3m6a4xBD19LVBMLmsQFgb0iPjfu8Ac5kZ7bXaDf7fVThsmpH0PoH0qBmpEA0aKJRVo8OWASFt7W7eIqoqJrz+fz9LPtBXrlgJ/yRbebz9v1C/IM5d5xRfr+1AAFg0FzaOBWjVxDVBB0a0OOlm72UzLvVnOVZ73iPAD85cwi3TQiZBLWjVo6TlSMQ3O5HH13U5E2Nvp0F+8QSzAk+FK9QU/e7KdQKOS6SZejREVXz2NkumM10bF27wzsHeKSkmKHVRj0z7lE4XDYVUMBx+Ko8KQg6S2rNEmVMLCHhcBhABNgA4zcIo4QFQZIp9N0KxvkVEp7UreQQeoBTIANMHILWZUTVTzpnNd8dEKTVLjhuiOwAUZu8axKiQqSYnb/1K4CNbRqT+o6dnaqEDACVsDMac+qjKhQFJOnY80Zev599weYO2F22X4EVsAM2DlJVqVERRhqwfqguQR62SLvMcWxXA3MgF3ZE1W86RYO6J9I6i7fY1w1MQN2TnpVJR4VREWLXLE9pAP6XmMp1xdBKmDnpFe1najiTQ835agprb2pB3lqVhnYAUOnvKoSomIn1OM7g9qbepWlXG94VWAILJ0Yq9pKVPGmiMXtbbK1KCUUuHqQn9bdEzdTVeTy6x2AIbB0wqvaunEaREU6zduhMgXecq5YEry7/ddfjtLnhvgpznlIOm/QgSaDFq9L0Yn2S1sijAZ9dNXAUoML2MzTH90UofuvCdHmxjwtfD1t1v0bE0O0gM8dOF2kJRtL58wvFP3JFHwmlsOjJVxVbry21c2JR11zyK+82/czkdbdG6dpwwOUCPMqWNKgw2eLBLJNrvXTRv5uRJWt6veJPtgrCh2ilhYxOO6j8dxQRlY7U280a2BZVh5VvCnGNG8eDfUJtN78+DtTwjQs4aMiW/crf07S/qbSLuwBUR+tmhejzzDY37shTEs2qPdMPdHn8bcy9NvdOTqZdNfucWD50OSC+WQAMFblVW3v+kHUo0n1RL2CSQppbDHOkRSfz6QN+uv+PHehQRpVXbrmsRkRenBSiHYcK9A9a1K4zJTn7ojSbaOC9Oq+HD26KSOnzeOS68M0b1zQHFLgUZltR/O0+I30ucWMtfPjNHGwn17am6MvjAjSsAqf6SHPcvmP8L1q2TsuuzFMNTzWRWNqbC3St9amzAcWUcAPpkfom9zNbztSoB9vzdB67gFEJg310wcPJ+iZnVl6aof5dKN8ZfvxaNLPEyr1wX/b+hCrR8XqhmrZ1MDsYRnBZPz25AvHx8/uytKNzydpzqvnSXmp9cP4sSllUENLkfhZObplZJCemBX9xG3u43FlgtvpwTMlzzgw5qNnb4vST74YoQKfgqdHNz+KPfzPZ3/y97hhE5P7V1znrUxayLG20uft3LBUC7CUmT8wViW2ERUKQBGMZ+AxVMuGw3l67WDefE51+bQw7XigglbeHqUpdf2zz2ApT2ZmvZSk2ZxWbCl527vYw9ay57TKG4fyNO2FdnP4sYA9JgTEXs1efcYfSueXvVkaflzDk76uBA3iF9uztOt4iZgnebyNz/C2qgVYOjFG7doy/ai9ylbXudog0wN/T5lebxB7sttHczc+N0abF1TQ9cP6RtjNjedJ8vJ7OWrjf9cFzzil9sL77j1VoGzHpTs+4qdrOxrtem5I8vDiwY7xc4wnel4QJzC1jahQRpJT5gcnQKibX0zSLE7L/53hjdqG+WKGF+fEaGofySqkAuFwXwgma90JSCq9pXWKJHkvPGYP7QRXlYS1jahWsBBmUS2Y8Q+v9JvPsINCGEu+wp5v5h/bzUkTvN8jPJnpL5EokpDuYvd1wCQXq1KPvncCS1RMCVHxpg7VsmpenLYsiNPXeTJjlTQ/iv3O8RKd6jviqIUONxftZQykkuO0dYmSKY+39ZSq1lp5J+8ElrCO7UTF+47GV14Y2lEBy9tHSwNDxEoRYhIZXeOnuTzpgezjFR7IEQ5hQSYMChC+h1zHwwIsFnQnj7I3lq56Ba8ihfhnLTxO/Q+PQ+2S9o5/W1sVsauEi98XWAJT1XIewX4uGYFgJCg1uy5FO5ti/VzCp9/usc0ZJp2Prh0aIMRDMdnBGBHeD90XPOtPt5UaEOKqS6eGqZpjmv+4O04pXmaV67oqBTPf+RNC9NWxvNGG81j5gjzNMU3ctyfSm67/3ROlhoXFij2LKujl9/L0xNtqnQCw9PtjJraqgv2wp+1NA8rMrONW2BtkeoJ4N9ck+W1/d69O0UMchEcg38/1wJvtPuKu+Te7sxxWaieZbbfxtff9LWWGf/gycza+8r9Z+tP7uS7vjvAQQk0N7IkjPFP/sNkgRBh+v6fr67u8SS9OvsPhqSc5LIVGF2CDnu6YwPXiVr36CTAElioJKhW17QUUiLXhobBMJkPNzc30tQ2DKFmwvV2IXvpogwXigSKtvfU0VVdXUyQSUfq+KtuYg1aHhK4fr4iZNbTVBtPpW6q0ADAElsBU8FVVvm1EhQJQCAlvils4psV8T6cqxXQ5/WsBzPaBobz1D7iqFNtKkxYHhfD+zep4mEZVqB34qzRkuZcF7IAhsASmgq8qvW0jqiggHhVjmuWf/Vh7VTGMh47wpsBO9bjUaiJbiSqtDq0QY5srqkI0pbrNWr7Oe8ACwAzYAUNgKbiqrLrtRIVHFa8ajUZp2YSTFPGX9+qNSgDtLgtYATNgZx2fgqwqxVaiQhEohFYIJfHOzZpEjH44roHjmqXVIJXK6rIuzQLACFgBM2AHDMWjXtqd+n61EqLCo0r3j5b5eX5m6c4hp/pee30HWy0AjIAVMJNuH1iq9qZQ0naiohDxqlAWA/JYLEaLxrbQjJoz+FqLCy0AbIARsAJmQlQnSArz2LbWb7U9lBOvii4EjzJg5Wrp+JP8LIZBb50daL1c5x22wIyaJsbmFCUS1aY3BWboEZ3ypjCHEqKiICEqNtuihYKoICwMUnMoR6+fqsVlWhy2wJ2DP6aFY5qZpAmTpBKSEqI6VT1lRIWCICsG5LJDXJR+kA1zdaKVnv5wNGUNJaMRKVofOywQ9vFLLUZ+QDfUFk2SVlRUnBubymzfSWMpJaoMAaC4VXB+eiBJ9bF99MKROtrZqocCVvvYnb+usonuv/I41Q+IUDxeySl+rssXkjo1NhXdbds9JQV0dYRHRbeP3VV4lxF2WKVSKTMlk0na0xSgvxwfRgdTVV39XJ/rJwtcFWuh+XXHaNLAgklOTJxk8uR0OKqzio4QFZWwklW2A+K/cAhpkd/fHKR/nR5A21qGUE4PCTpj16vPIe7ip1edpFmDztD46rzpOYWcCEPJmBSeFONSpz2pKOkYUVEBkFX2rcLDwruKhwVhJZ9M5+hAW5QOtMfof6lKaszE6Ww+ovx9VmI0rxyxdlQTzFB9JEljY600riJF4xJpikdLYUJ4TRATCXmZ3bulu7fa2VGioiJCVokCyHAAbzcGUXGUhO+QcG2WXzOSzAeInxphwqpdzrMa0I15/KNOvCIgHixQOHB+CRsERDxUEoiJPI7iQTHhdTIM1Z09L5zVdHeVjefRtUjoA3kJY4kBQUwQFUd4XSQQFQkk19K9BcSeYlPYWciKoySxv5u6+s5aOe5RrRUC8aweVryslaCaqFaLfXq+M1GthBVy4hwSrkVyqzjuUa2GEWOJgUFaGNRKXsnjCJGj9T46X1q2hh3ElnIUUspRbO52m7mKqGIsq/FgUJBREq6x5uU3+ti1Bay2lLwcu/6FO8+6kqhWU3U2qtWDWvPW3+h8yQKwnYg1L+e8dHQ9UTsb02pwa77zdfpzeVlAL6yXF55lq40matlCW16KaaKWF55lq40matlCW16KaaKWF55lq40matlCW16KaaKWF55lq42yOKqs0ZetJS8DxbBKiCVtJ0QJUbF7H0TV4n0LgKjYaK1a/g8ZMDj/cr4kRgAAAABJRU5ErkJggg=="},884:function(t,s,a){"use strict";a.r(s);var n=a(45),r=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"_3-4-按钮"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-4-按钮"}},[t._v("#")]),t._v(" 3.4 按钮")]),t._v(" "),n("h2",{attrs:{id:"_3-4-1-material组件库中的按钮"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-4-1-material组件库中的按钮"}},[t._v("#")]),t._v(" 3.4.1 Material组件库中的按钮")]),t._v(" "),n("p",[t._v("Material 组件库中提供了多种按钮组件如"),n("code",[t._v("RaisedButton")]),t._v("、"),n("code",[t._v("FlatButton")]),t._v("、"),n("code",[t._v("OutlineButton")]),t._v("等,它们都是直接或间接对"),n("code",[t._v("RawMaterialButton")]),t._v("组件的包装定制,所以他们大多数属性都和"),n("code",[t._v("RawMaterialButton")]),t._v("一样。在介绍各个按钮时我们先介绍其默认外观,而按钮的外观大都可以通过属性来自定义,我们在后面统一介绍这些属性。另外,所有Material 库中的按钮都有如下相同点:")]),t._v(" "),n("ol",[n("li",[t._v("按下时都会有“水波动画”(又称“涟漪动画”,就是点击时按钮上会出现水波荡漾的动画)。")]),t._v(" "),n("li",[t._v("有一个"),n("code",[t._v("onPressed")]),t._v("属性来设置点击回调,当按钮按下时会执行该回调,如果不提供该回调则按钮会处于禁用状态,禁用状态不响应用户点击。")])]),t._v(" "),n("h3",{attrs:{id:"raisedbutton"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#raisedbutton"}},[t._v("#")]),t._v(" RaisedButton")]),t._v(" "),n("p",[n("code",[t._v("RaisedButton")]),t._v(' 即"漂浮"按钮,它默认带有阴影和灰色背景。按下后,阴影会变大,如图3-10所示:')]),t._v(" "),n("p",[n("img",{attrs:{src:a(583),alt:"图3-10"}})]),t._v(" "),n("p",[t._v("使用"),n("code",[t._v("RaisedButton")]),t._v("非常简单,如:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("RaisedButton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"normal"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n")])])]),n("h3",{attrs:{id:"flatbutton"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#flatbutton"}},[t._v("#")]),t._v(" FlatButton")]),t._v(" "),n("p",[n("code",[t._v("FlatButton")]),t._v("即扁平按钮,默认背景透明并不带阴影。按下后,会有背景色,如图3-11所示:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(584),alt:"图3-11"}})]),t._v(" "),n("p",[t._v("使用FlatButton也很简单,代码如下:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("FlatButton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"normal"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("h3",{attrs:{id:"outlinebutton"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#outlinebutton"}},[t._v("#")]),t._v(" OutlineButton")]),t._v(" "),n("p",[n("code",[t._v("OutlineButton")]),t._v("默认有一个边框,不带阴影且背景透明。按下后,边框颜色会变亮、同时出现背景和阴影(较弱),如图3-12所示:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(585),alt:"图3-12"}})]),t._v(" "),n("p",[t._v("使用"),n("code",[t._v("OutlineButton")]),t._v("也很简单,代码如下:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("OutlineButton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"normal"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("h3",{attrs:{id:"iconbutton"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#iconbutton"}},[t._v("#")]),t._v(" IconButton")]),t._v(" "),n("p",[n("code",[t._v("IconButton")]),t._v("是一个可点击的Icon,不包括文字,默认没有背景,点击后会出现背景,如图3-13所示:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(586),alt:"图3-13"}})]),t._v(" "),n("p",[t._v("代码如下:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("IconButton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n icon"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Icon")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Icons"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("thumb_up"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("h3",{attrs:{id:"带图标的按钮"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#带图标的按钮"}},[t._v("#")]),t._v(" 带图标的按钮")]),t._v(" "),n("p",[n("code",[t._v("RaisedButton")]),t._v("、"),n("code",[t._v("FlatButton")]),t._v("、"),n("code",[t._v("OutlineButton")]),t._v("都有一个"),n("code",[t._v("icon")]),t._v(" 构造函数,通过它可以轻松创建带图标的按钮,如图3-14所示:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(587),alt:"图3-14"}})]),t._v(" "),n("p",[t._v("代码如下:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[t._v("RaisedButton"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("icon")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n icon"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Icon")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Icons"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("send"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n label"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"发送"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" _onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\nOutlineButton"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("icon")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n icon"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Icon")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Icons"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("add"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n label"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"添加"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" _onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\nFlatButton"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("icon")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n icon"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Icon")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("Icons"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("info"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n label"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"详情"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" _onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),n("h2",{attrs:{id:"_3-4-2-自定义按钮外观"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_3-4-2-自定义按钮外观"}},[t._v("#")]),t._v(" 3.4.2 自定义按钮外观")]),t._v(" "),n("p",[t._v("按钮外观可以通过其属性来定义,不同按钮属性大同小异,我们以FlatButton为例,介绍一下常见的按钮属性,详细的信息可以查看API文档。")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("FlatButton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@required")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮点击回调")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("textColor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮文字颜色")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("disabledTextColor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮禁用时的文字颜色")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("color"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮背景颜色")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("disabledColor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮禁用时的背景颜色")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("highlightColor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮按下时的背景颜色")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("splashColor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//点击时,水波动画中水波的颜色")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("colorBrightness"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮主题,默认是浅色主题 ")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("padding"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮的填充")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("shape"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//外形")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@required")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按钮的内容")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("p",[t._v("其中大多数属性名都是自解释的,我们不赘述。下面我们通过一个示例来看看如何自定义按钮。")]),t._v(" "),n("h4",{attrs:{id:"示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#示例"}},[t._v("#")]),t._v(" 示例")]),t._v(" "),n("p",[t._v("定义一个背景蓝色,两边圆角的按钮。效果如图3-15所示:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(588),alt:"图3-15"}})]),t._v(" "),n("p",[t._v("代码如下:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("FlatButton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n color"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Colors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("blue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n highlightColor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Colors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("blue"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("700")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n colorBrightness"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Brightness"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dark"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n splashColor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Colors"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("grey"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Submit"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n shape"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("RoundedRectangleBorder")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("borderRadius"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" BorderRadius"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("circular")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("20.0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPressed"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("p",[t._v("很简单吧,在上面的代码中,我们主要通过"),n("code",[t._v("shape")]),t._v("来指定其外形为一个圆角矩形。因为按钮背景是蓝色(深色),我们需要指定按钮主题"),n("code",[t._v("colorBrightness")]),t._v("为"),n("code",[t._v("Brightness.dark")]),t._v(",这是为了保证按钮文字颜色为浅色。")]),t._v(" "),n("p",[t._v("Flutter 中没有提供去除背景的设置,假若我们需要去除背景,则可以通过将背景颜色设置为全透明来实现。对应上面的代码,便是将 "),n("code",[t._v("color: Colors.blue")]),t._v(" 替换为 "),n("code",[t._v("color: Color(0x000000)")]),t._v("。")]),t._v(" "),n("p",[t._v("细心的读者可能会发现这个按钮没有阴影(点击之后也没有),这样会显得没有质感。其实这也很容易,将上面的"),n("code",[t._v("FlatButton")]),t._v("换成"),n("code",[t._v("RaisedButton")]),t._v("就行,其它代码不用改(这里 color 也不做更改),换了之后的效果如图3-16所示:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(589),alt:"图3-16"}})]),t._v(" "),n("p",[t._v("是不是有质感了!之所以会这样,是因为"),n("code",[t._v("RaisedButton")]),t._v("默认有配置阴影:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("RaisedButton")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("elevation "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//正常状态下的阴影")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("highlightElevation "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//按下时的阴影")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("disabledElevation "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("0.0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 禁用时的阴影")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("值得注意的是,在Material 组件库中,我们会在很多组件中见到elevation相关的属性,它们都是用来控制阴影的,这是因为阴影在Material设计风格中是一种很重要的表现形式,以后在介绍其它组件时,便不再赘述。")]),t._v(" "),n("p",[t._v('如果我们想实现一个背景渐变的圆角按钮,按钮有没有相应的属性呢?答案是否定的,但是,我们可以通过其它方式来实现,我们将在后面"自定义组件"一章中实现。')])])}),[],!1,null,null,null);s.default=r.exports}}]);
================================================
FILE: docs/assets/js/100.ce32ed9e.js
================================================
(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{472:function(t,s,n){t.exports=n.p+"assets/img/5-1.239dadc0.png"},795:function(t,s,n){"use strict";n.r(s);var a=n(45),e=Object(a.a)({},(function(){var t=this,s=t.$createElement,a=t._self._c||s;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h2",{attrs:{id:"_5-1-填充-padding"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_5-1-填充-padding"}},[t._v("#")]),t._v(" 5.1 填充(Padding)")]),t._v(" "),a("p",[a("code",[t._v("Padding")]),t._v("可以给其子节点添加填充(留白),和边距效果类似。我们在前面很多示例中都已经使用过它了,现在来看看它的定义:")]),t._v(" "),a("div",{staticClass:"language-dart extra-class"},[a("pre",{pre:!0,attrs:{class:"language-dart"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n EdgeInsetsGeometry padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Widget child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[a("code",[t._v("EdgeInsetsGeometry")]),t._v("是一个抽象类,开发中,我们一般都使用"),a("code",[t._v("EdgeInsets")]),t._v("类,它是"),a("code",[t._v("EdgeInsetsGeometry")]),t._v("的一个子类,定义了一些设置填充的便捷方法。")]),t._v(" "),a("h3",{attrs:{id:"edgeinsets"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#edgeinsets"}},[t._v("#")]),t._v(" EdgeInsets")]),t._v(" "),a("p",[t._v("我们看看"),a("code",[t._v("EdgeInsets")]),t._v("提供的便捷方法:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("fromLTRB(double left, double top, double right, double bottom)")]),t._v(":分别指定四个方向的填充。")]),t._v(" "),a("li",[a("code",[t._v("all(double value)")]),t._v(" : 所有方向均使用相同数值的填充。")]),t._v(" "),a("li",[a("code",[t._v("only({left, top, right ,bottom })")]),t._v(":可以设置具体某个方向的填充(可以同时指定多个方向)。")]),t._v(" "),a("li",[a("code",[t._v("symmetric({ vertical, horizontal })")]),t._v(":用于设置对称方向的填充,"),a("code",[t._v("vertical")]),t._v("指"),a("code",[t._v("top")]),t._v("和"),a("code",[t._v("bottom")]),t._v(","),a("code",[t._v("horizontal")]),t._v("指"),a("code",[t._v("left")]),t._v("和"),a("code",[t._v("right")]),t._v("。")])]),t._v(" "),a("h3",{attrs:{id:"示例"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#示例"}},[t._v("#")]),t._v(" 示例")]),t._v(" "),a("p",[t._v("下面的示例主要展示了"),a("code",[t._v("EdgeInsets")]),t._v("的不同用法,比较简单,源码如下:")]),t._v(" "),a("div",{staticClass:"language-dart extra-class"},[a("pre",{pre:!0,attrs:{class:"language-dart"}},[a("code",[a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("PaddingTestRoute")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatelessWidget")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n Widget "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BuildContext context"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//上下左右各添加16像素补白")]),t._v("\n padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" EdgeInsets"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("all")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Column")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//显式指定对齐方式为左对齐,排除对齐干扰")]),t._v("\n crossAxisAlignment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" CrossAxisAlignment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("start"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n children"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Widget"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//左边添加8像素补白")]),t._v("\n padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" EdgeInsets"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("only")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("left"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Hello world"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//上下各添加8像素补白")]),t._v("\n padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" EdgeInsets"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("symmetric")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("vertical"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("8.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"I am Jack"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Padding")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 分别指定四个方向的补白")]),t._v("\n padding"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" EdgeInsets"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("fromLTRB")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v(".0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("20.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Your friend"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),a("p",[t._v("运行效果如图5-1所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:n(472),alt:"图5-1"}})])])}),[],!1,null,null,null);s.default=e.exports}}]);
================================================
FILE: docs/assets/js/101.60ad385d.js
================================================
(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{494:function(t,s,a){t.exports=a.p+"assets/img/6-1.a5c8558b.png"},803:function(t,s,a){"use strict";a.r(s);var n=a(45),e=Object(n.a)({},(function(){var t=this,s=t.$createElement,n=t._self._c||s;return n("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[n("h1",{attrs:{id:"_6-2-singlechildscrollview"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#_6-2-singlechildscrollview"}},[t._v("#")]),t._v(" 6.2 SingleChildScrollView")]),t._v(" "),n("p",[n("code",[t._v("SingleChildScrollView")]),t._v("类似于Android中的"),n("code",[t._v("ScrollView")]),t._v(",它只能接收一个子组件。定义如下:")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SingleChildScrollView")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("scrollDirection "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" Axis"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("vertical"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//滚动方向,默认是垂直方向")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("reverse "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("false")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("padding"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n bool primary"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("physics"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("controller"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),n("p",[t._v("除了上一节我们介绍过的可滚动组件的通用属性外,我们重点看一下"),n("code",[t._v("reverse")]),t._v("和"),n("code",[t._v("primary")]),t._v("两个属性:")]),t._v(" "),n("ul",[n("li",[n("code",[t._v("reverse")]),t._v(":该属性API文档解释是:是否按照阅读方向相反的方向滑动,如:"),n("code",[t._v("scrollDirection")]),t._v("值为"),n("code",[t._v("Axis.horizontal")]),t._v(",如果阅读方向是从左到右(取决于语言环境,阿拉伯语就是从右到左)。"),n("code",[t._v("reverse")]),t._v("为"),n("code",[t._v("true")]),t._v("时,那么滑动方向就是从右往左。其实此属性本质上是决定可滚动组件的初始滚动位置是在“头”还是“尾”,取"),n("code",[t._v("false")]),t._v("时,初始滚动位置在“头”,反之则在“尾”,读者可以自己试验。")]),t._v(" "),n("li",[n("code",[t._v("primary")]),t._v(":指是否使用widget树中默认的"),n("code",[t._v("PrimaryScrollController")]),t._v(";当滑动方向为垂直方向("),n("code",[t._v("scrollDirection")]),t._v("值为"),n("code",[t._v("Axis.vertical")]),t._v(")并且没有指定"),n("code",[t._v("controller")]),t._v("时,"),n("code",[t._v("primary")]),t._v("默认为"),n("code",[t._v("true")]),t._v(".")])]),t._v(" "),n("p",[t._v("需要注意的是,通常"),n("code",[t._v("SingleChildScrollView")]),t._v("只应在期望的内容不会超过屏幕太多时使用,这是因为"),n("code",[t._v("SingleChildScrollView")]),t._v("不支持基于Sliver的延迟实例化模型,所以如果预计视口可能包含超出屏幕尺寸太多的内容时,那么使用"),n("code",[t._v("SingleChildScrollView")]),t._v("将会非常昂贵(性能差),此时应该使用一些支持Sliver延迟加载的可滚动组件,如"),n("code",[t._v("ListView")]),t._v("。")]),t._v(" "),n("h3",{attrs:{id:"示例"}},[n("a",{staticClass:"header-anchor",attrs:{href:"#示例"}},[t._v("#")]),t._v(" 示例")]),t._v(" "),n("p",[t._v("下面是一个将大写字母A-Z沿垂直方向显示的例子,由于垂直方向空间会超过屏幕视口高度,所以我们使用"),n("code",[t._v("SingleChildScrollView")]),t._v(":")]),t._v(" "),n("div",{staticClass:"language-dart extra-class"},[n("pre",{pre:!0,attrs:{class:"language-dart"}},[n("code",[n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("SingleChildScrollViewTestRoute")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatelessWidget")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n Widget "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BuildContext context"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n String str "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('"ABCDEFGHIJKLMNOPQRSTUVWXYZ"')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Scrollbar")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 显示进度条")]),t._v("\n child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("SingleChildScrollView")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n padding"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" EdgeInsets"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("all")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("16.0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Center")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Column")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//动态创建一个List<Widget> ")]),t._v("\n children"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" str"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("split")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//每一个字母都用一个Text显示,字体为原来的两倍")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("map")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),n("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("c"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" textScaleFactor"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),n("span",{pre:!0,attrs:{class:"token number"}},[t._v("2.0")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" \n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),n("span",{pre:!0,attrs:{class:"token function"}},[t._v("toList")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),n("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),n("p",[t._v("运行效果如图6-1所示:")]),t._v(" "),n("p",[n("img",{attrs:{src:a(494),alt:"图6-1"}})])])}),[],!1,null,null,null);s.default=e.exports}}]);
================================================
FILE: docs/assets/js/102.53edb23b.js
================================================
(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{509:function(t,a,s){t.exports=s.p+"assets/img/7-1.fc1ee2fb.png"},807:function(t,a,s){"use strict";s.r(a);var e=s(45),n=Object(e.a)({},(function(){var t=this,a=t.$createElement,e=t._self._c||a;return e("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[e("h1",{attrs:{id:"_7-2-数据共享-inheritedwidget"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#_7-2-数据共享-inheritedwidget"}},[t._v("#")]),t._v(" 7.2 数据共享(InheritedWidget)")]),t._v(" "),e("p",[e("code",[t._v("InheritedWidget")]),t._v("是Flutter中非常重要的一个功能型组件,它提供了一种数据在widget树中从上到下传递、共享的方式,比如我们在应用的根widget中通过"),e("code",[t._v("InheritedWidget")]),t._v("共享了一个数据,那么我们便可以在任意子widget中来获取该共享的数据!这个特性在一些需要在widget树中共享数据的场景中非常方便!如Flutter SDK中正是通过InheritedWidget来共享应用主题("),e("code",[t._v("Theme")]),t._v(")和Locale (当前语言环境)信息的。")]),t._v(" "),e("blockquote",[e("p",[e("code",[t._v("InheritedWidget")]),t._v("和React中的context功能类似,和逐级传递数据相比,它们能实现组件跨级传递数据。"),e("code",[t._v("InheritedWidget")]),t._v("的在widget树中数据传递方向是从上到下的,这和通知"),e("code",[t._v("Notification")]),t._v("(将在下一章中介绍)的传递方向正好相反。")])]),t._v(" "),e("h3",{attrs:{id:"didchangedependencies"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#didchangedependencies"}},[t._v("#")]),t._v(" didChangeDependencies")]),t._v(" "),e("p",[t._v("在之前介绍"),e("code",[t._v("StatefulWidget")]),t._v("时,我们提到"),e("code",[t._v("State")]),t._v("对象有一个"),e("code",[t._v("didChangeDependencies")]),t._v("回调,它会在“依赖”发生变化时被Flutter Framework调用。而这个“依赖”指的就是子widget是否使用了父widget中"),e("code",[t._v("InheritedWidget")]),t._v("的数据!如果使用了,则代表子widget依赖有依赖"),e("code",[t._v("InheritedWidget")]),t._v(";如果没有使用则代表没有依赖。这种机制可以使子组件在所依赖的"),e("code",[t._v("InheritedWidget")]),t._v("变化时来更新自身!比如当主题、locale(语言)等发生变化时,依赖其的子widget的"),e("code",[t._v("didChangeDependencies")]),t._v("方法将会被调用。")]),t._v(" "),e("p",[t._v("下面我们看一下之前“计数器”示例应用程序的"),e("code",[t._v("InheritedWidget")]),t._v("版本。需要说明的是,本示例主要是为了演示"),e("code",[t._v("InheritedWidget")]),t._v("的功能特性,并不是计数器的推荐实现方式。")]),t._v(" "),e("p",[t._v("首先,我们通过继承"),e("code",[t._v("InheritedWidget")]),t._v(",将当前计数器点击次数保存在"),e("code",[t._v("ShareDataWidget")]),t._v("的"),e("code",[t._v("data")]),t._v("属性中:")]),t._v(" "),e("div",{staticClass:"language-dart extra-class"},[e("pre",{pre:!0,attrs:{class:"language-dart"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("ShareDataWidget")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InheritedWidget")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ShareDataWidget")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@required")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n Widget child\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("child"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" child"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n \n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" int data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//需要在子树中共享的数据,保存点击次数")]),t._v("\n \n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//定义一个便捷方法,方便子树中的widget获取共享数据 ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" ShareDataWidget "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("of")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BuildContext context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("dependOnInheritedWidgetOfExactType"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("ShareDataWidget"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//该回调决定当data发生变化时,是否通知子树中依赖data的Widget ")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n bool "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateShouldNotify")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ShareDataWidget old"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//如果返回true,则子树中依赖(build函数中有调用)本widget")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//的子widget的`state.didChangeDependencies`会被调用")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" old"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("然后我们实现一个子组件"),e("code",[t._v("_TestWidget")]),t._v(",在其"),e("code",[t._v("build")]),t._v("方法中引用"),e("code",[t._v("ShareDataWidget")]),t._v("中的数据。同时,在其"),e("code",[t._v("didChangeDependencies()")]),t._v(" 回调中打印日志:")]),t._v(" "),e("div",{staticClass:"language-dart extra-class"},[e("pre",{pre:!0,attrs:{class:"language-dart"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("_TestWidget")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatefulWidget")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n __TestWidgetState "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("createState")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("__TestWidgetState")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("__TestWidgetState")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("State")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("_TestWidget"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n Widget "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BuildContext context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//使用InheritedWidget中的共享数据")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ShareDataWidget\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("of")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("data\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("toString")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("didChangeDependencies")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("didChangeDependencies")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//父或祖先widget中的InheritedWidget改变(updateShouldNotify返回true)时会被调用。")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//如果build中没有依赖InheritedWidget,则此回调不会被调用。")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("print")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Dependencies change"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("最后,我们创建一个按钮,每点击一次,就将"),e("code",[t._v("ShareDataWidget")]),t._v("的值自增:")]),t._v(" "),e("div",{staticClass:"language-dart extra-class"},[e("pre",{pre:!0,attrs:{class:"language-dart"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InheritedWidgetTestRoute")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("StatefulWidget")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n _InheritedWidgetTestRouteState "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("createState")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("new")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("_InheritedWidgetTestRouteState")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("_InheritedWidgetTestRouteState")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("State")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("InheritedWidgetTestRoute"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n int count "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n Widget "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BuildContext context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Center")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("ShareDataWidget")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//使用ShareDataWidget")]),t._v("\n data"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" count"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Column")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n mainAxisAlignment"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" MainAxisAlignment"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("center"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n children"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Widget"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Padding")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n padding"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("const")]),t._v(" EdgeInsets"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("only")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("bottom"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token number"}},[t._v("20.0")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("_TestWidget")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//子widget中依赖ShareDataWidget")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("RaisedButton")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Increment"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//每点击一次,将count自增,然后重新build,ShareDataWidget的data将被更新 ")]),t._v("\n onPressed"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("setState")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("++")]),t._v("count"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("运行后界面如图7-1所示:")]),t._v(" "),e("p",[e("img",{attrs:{src:s(509),alt:"图7-1"}})]),t._v(" "),e("p",[t._v("每点击一次按钮,计数器就会自增,控制台就会打印一句日志:")]),t._v(" "),e("div",{staticClass:"language- extra-class"},[e("pre",{pre:!0,attrs:{class:"language-text"}},[e("code",[t._v("I/flutter ( 8513): Dependencies change\n")])])]),e("p",[t._v("可见依赖发生变化后,其"),e("code",[t._v("didChangeDependencies()")]),t._v("会被调用。但是读者要注意,"),e("strong",[t._v("如果_TestWidget的build方法中没有使用ShareDataWidget的数据,那么它的"),e("code",[t._v("didChangeDependencies()")]),t._v("将不会被调用,因为它并没有依赖ShareDataWidget")]),t._v("。例如,我们将"),e("code",[t._v("__TestWidgetState")]),t._v("代码改为下面这样,"),e("code",[t._v("didChangeDependencies()")]),t._v("将不会被调用:")]),t._v(" "),e("div",{staticClass:"language-dart extra-class"},[e("pre",{pre:!0,attrs:{class:"language-dart"}},[e("code",[e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("class")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("__TestWidgetState")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("State")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("_TestWidget"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n Widget "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("build")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BuildContext context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// 使用InheritedWidget中的共享数据")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// return Text(ShareDataWidget")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// .of(context)")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// .data")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// .toString());")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"text"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n\n "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("void")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("didChangeDependencies")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("super")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("didChangeDependencies")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("// build方法中没有依赖InheritedWidget,此回调不会被调用。")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("print")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Dependencies change"')]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("上面的代码中,我们将"),e("code",[t._v("build()")]),t._v("方法中依赖"),e("code",[t._v("ShareDataWidget")]),t._v("的代码注释掉了,然后返回一个固定"),e("code",[t._v("Text")]),t._v(",这样一来,当点击Increment按钮后,"),e("code",[t._v("ShareDataWidget")]),t._v("的"),e("code",[t._v("data")]),t._v("虽然发生变化,但由于"),e("code",[t._v("__TestWidgetState")]),t._v("并未依赖"),e("code",[t._v("ShareDataWidget")]),t._v(",所以"),e("code",[t._v("__TestWidgetState")]),t._v("的"),e("code",[t._v("didChangeDependencies")]),t._v("方法不会被调用。其实,这个机制很好理解,因为在数据发生变化时只对使用该数据的Widget更新是合理并且性能友好的。")]),t._v(" "),e("blockquote",[e("p",[t._v("思考题:Flutter framework是怎么知道子widget有没有依赖InheritedWidget的?")])]),t._v(" "),e("h4",{attrs:{id:"应该在didchangedependencies-中做什么"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#应该在didchangedependencies-中做什么"}},[t._v("#")]),t._v(" 应该在didChangeDependencies()中做什么?")]),t._v(" "),e("p",[t._v("一般来说,子widget很少会重写此方法,因为在依赖改变后framework也都会调用"),e("code",[t._v("build()")]),t._v("方法。但是,如果你需要在依赖改变后执行一些昂贵的操作,比如网络请求,这时最好的方式就是在此方法中执行,这样可以避免每次"),e("code",[t._v("build()")]),t._v("都执行这些昂贵操作。")]),t._v(" "),e("h3",{attrs:{id:"深入了解inheritedwidget"}},[e("a",{staticClass:"header-anchor",attrs:{href:"#深入了解inheritedwidget"}},[t._v("#")]),t._v(" 深入了解InheritedWidget")]),t._v(" "),e("p",[t._v("现在来思考一下,如果我们只想在"),e("code",[t._v("__TestWidgetState")]),t._v("中引用"),e("code",[t._v("ShareDataWidget")]),t._v("数据,但却不希望在"),e("code",[t._v("ShareDataWidget")]),t._v("发生变化时调用"),e("code",[t._v("__TestWidgetState")]),t._v("的"),e("code",[t._v("didChangeDependencies()")]),t._v("方法应该怎么办?其实答案很简单,我们只需要将"),e("code",[t._v("ShareDataWidget.of()")]),t._v("的实现改一下即可:")]),t._v(" "),e("div",{staticClass:"language-dart extra-class"},[e("pre",{pre:!0,attrs:{class:"language-dart"}},[e("code",[e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//定义一个便捷方法,方便子树中的widget获取共享数据")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("static")]),t._v(" ShareDataWidget "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("of")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("BuildContext context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//return context.dependOnInheritedWidgetOfExactType<ShareDataWidget>();")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" context"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("getElementForInheritedWidgetOfExactType"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("ShareDataWidget"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("widget"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("唯一的改动就是获取"),e("code",[t._v("ShareDataWidget")]),t._v("对象的方式,把"),e("code",[t._v("dependOnInheritedWidgetOfExactType()")]),t._v("方法换成了"),e("code",[t._v("context.getElementForInheritedWidgetOfExactType<ShareDataWidget>().widget")]),t._v(",那么他们到底有什么区别呢,我们看一下这两个方法的源码(实现代码在"),e("code",[t._v("Element")]),t._v("类中,"),e("code",[t._v("Context")]),t._v("和"),e("code",[t._v("Element")]),t._v("的关系我们将在后面专门介绍):")]),t._v(" "),e("div",{staticClass:"language-dart extra-class"},[e("pre",{pre:!0,attrs:{class:"language-dart"}},[e("code",[e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\nInheritedElement getElementForInheritedWidgetOfExactType"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("T "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("extends")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token class-name"}},[t._v("InheritedWidget")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assert")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("_debugCheckStateIsActiveForAncestorLookup")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" InheritedElement ancestor "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" _inheritedWidgets "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" _inheritedWidgets"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("T"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" ancestor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\nInheritedWidget "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("dependOnInheritedWidgetOfExactType")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Object aspect "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assert")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("_debugCheckStateIsActiveForAncestorLookup")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("final")]),t._v(" InheritedElement ancestor "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" _inheritedWidgets "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("==")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" _inheritedWidgets"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("T"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("]")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//多出的部分")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("if")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ancestor "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assert")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ancestor "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("is")]),t._v(" InheritedElement"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("dependOnInheritedElement")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ancestor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" aspect"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" aspect"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("as")]),t._v(" T"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n _hadUnsatisfiedDependencies "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token boolean"}},[t._v("true")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("我们可以看到,"),e("code",[t._v("dependOnInheritedWidgetOfExactType()")]),t._v(" 比 "),e("code",[t._v("getElementForInheritedWidgetOfExactType()")]),t._v("多调了"),e("code",[t._v("dependOnInheritedElement")]),t._v("方法,"),e("code",[t._v("dependOnInheritedElement")]),t._v("源码如下:")]),t._v(" "),e("div",{staticClass:"language-dart extra-class"},[e("pre",{pre:!0,attrs:{class:"language-dart"}},[e("code",[t._v(" "),e("span",{pre:!0,attrs:{class:"token metadata symbol"}},[t._v("@override")]),t._v("\n InheritedWidget "),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("dependOnInheritedElement")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("InheritedElement ancestor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v(" Object aspect "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("assert")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ancestor "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("!=")]),t._v(" "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("null")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n _dependencies "),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" HashSet"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("InheritedElement"),e("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n _dependencies"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("add")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("ancestor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n ancestor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),e("span",{pre:!0,attrs:{class:"token function"}},[t._v("updateDependencies")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" aspect"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("return")]),t._v(" ancestor"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("widget"),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n "),e("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),t._v("\n")])])]),e("p",[t._v("可以看到"),e("code",[t._v("dependOnInheritedElement")]),t._v("方法中主要是注册了依赖关系!看到这里也就清晰了,"),e("strong",[t._v("调用"),e("code",[t._v("dependOnInheritedWidgetOfExactType()")]),t._v(" 和 "),e("code",[t._v("getElementForInheritedWidgetOfExactType()")]),t._v("的区别就是前者会注册依赖关系,而后者不会")]),t._v(",所以在调用"),e("code",[t._v("dependOnInheritedWidgetOfExactType()")]),t._v("时,"),e("code",[t._v("InheritedWidget")]),t._v("和依赖它的子孙组件关系便完成了注册,之后当"),e("code",[t._v("InheritedWidget")]),t._v("发生变化时,就会更新依赖它的子孙组件,也就是会调这些子孙组件的"),e("code",[t._v("didChangeDependencies()")]),t._v("方法和"),e("code",[t._v("build()")]),t._v("方法。而当调用的是 "),e("code",[t._v("getElementForInheritedWidgetOfExactType()")]),t._v("时,由于没有注册依赖关系,所以之后当"),e("code",[t._v("InheritedWidget")]),t._v("发生变化时,就不会更新相应的子孙Widget。")]),t._v(" "),e("p",[t._v("注意,如果将上面示例中"),e("code",[t._v("ShareDataWidget.of()")]),t._v("方法实现改成调用"),e("code",[t._v("getElementForInheritedWidgetOfExactType()")]),t._v(',运行示例后,点击"Increment"按钮,会发现'),e("code",[t._v("__TestWidgetState")]),t._v("的"),e("code",[t._v("didChangeDependencies()")]),t._v("方法确实不会再被调用,但是其"),e("code",[t._v("build()")]),t._v('仍然会被调用!造成这个的原因其实是,点击"Increment"按钮后,会调用'),e("code",[t._v("_InheritedWidgetTestRouteState")]),t._v("的"),e("code",[t._v("setState()")]),t._v("方法,此时会重新构建整个页面,由于示例中,"),e("code",[t._v("__TestWidget")]),t._v(" 并没有任何缓存,所以它也都会被重新构建,所以也会调用"),e("code",[t._v("build()")]),t._v("方法。")]),t._v(" "),e("p",[t._v("那么,现在就带来了一个问题:实际上,我们只想更新子树中依赖了"),e("code",[t._v("ShareDataWidget")]),t._v("的组件,而现在只要调用"),e("code",[t._v("_InheritedWidgetTestRouteState")]),t._v("的"),e("code",[t._v("setState()")]),t._v("方法,所有子节点都会被重新build,这很没必要,那么有什么办法可以避免呢?答案是缓存!一个简单的做法就是通过封装一个"),e("code",[t._v("StatefulWidget")]),t._v(",将子Widget树缓存起来,具体做法下一节我们将通过实现一个"),e("code",[t._v("Provider")]),t._v(" Widget 来演示如何缓存,以及如何利用"),e("code",[t._v("InheritedWidget")]),t._v(" 来实现Flutter全局状态共享。")])])}),[],!1,null,null,null);a.default=n.exports}}]);
================================================
FILE: docs/assets/js/103.21193c45.js
================================================
(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{520:function(t,n,s){t.exports=s.p+"assets/img/8-1.fd0e65f1.png"},814:function(t,n,s){"use strict";s.r(n);var a=s(45),e=Object(a.a)({},(function(){var t=this,n=t.$createElement,a=t._self._c||n;return a("ContentSlotsDistributor",{attrs:{"slot-key":t.$parent.slotKey}},[a("h1",{attrs:{id:"_8-1-原始指针事件处理"}},[a("a",{staticClass:"header-anchor",attrs:{href:"#_8-1-原始指针事件处理"}},[t._v("#")]),t._v(" 8.1 原始指针事件处理")]),t._v(" "),a("p",[t._v("本节先来介绍一下原始指针事件(Pointer Event,在移动设备上通常为触摸事件),下一节再介绍手势处理。")]),t._v(" "),a("p",[t._v("在移动端,各个平台或UI系统的原始指针事件模型基本都是一致,即:一次完整的事件分为三个阶段:手指按下、手指移动、和手指抬起,而更高级别的手势(如点击、双击、拖动等)都是基于这些原始事件的。")]),t._v(" "),a("p",[t._v("当指针按下时,Flutter会对应用程序执行"),a("strong",[t._v("命中测试(Hit Test)")]),t._v(",以确定指针与屏幕接触的位置存在哪些组件(widget), 指针按下事件(以及该指针的后续事件)然后被分发到由命中测试发现的最内部的组件,然后从那里开始,事件会在组件树中向上冒泡,这些事件会从最内部的组件被分发到组件树根的路径上的所有组件,这和Web开发中浏览器的"),a("strong",[t._v("事件冒泡")]),t._v("机制相似, 但是Flutter中没有机制取消或停止“冒泡”过程,而浏览器的冒泡是可以停止的。注意,只有通过命中测试的组件才能触发事件。")]),t._v(" "),a("p",[t._v("Flutter中可以使用"),a("code",[t._v("Listener")]),t._v("来监听原始触摸事件,按照本书对组件的分类,则"),a("code",[t._v("Listener")]),t._v("也是一个功能性组件。下面是"),a("code",[t._v("Listener")]),t._v("的构造函数定义:")]),t._v(" "),a("div",{staticClass:"language-dart extra-class"},[a("pre",{pre:!0,attrs:{class:"language-dart"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Listener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("{")]),t._v("\n Key key"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("onPointerDown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//手指按下回调")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("onPointerMove"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//手指移动回调")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("onPointerUp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//手指抬起回调")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("onPointerCancel"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//触摸事件取消回调")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token keyword"}},[t._v("this")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("behavior "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v(" HitTestBehavior"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("deferToChild"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//在命中测试期间如何表现")]),t._v("\n Widget child\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("}")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n")])])]),a("p",[t._v("我们先看一个示例,后面再单独讨论一下"),a("code",[t._v("behavior")]),t._v("属性。")]),t._v(" "),a("div",{staticClass:"language-dart extra-class"},[a("pre",{pre:!0,attrs:{class:"language-dart"}},[a("code",[a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//定义一个状态,保存当前指针位置")]),t._v("\nPointerEvent _event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(";")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Listener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Container")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n alignment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Alignment"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("center"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n color"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Colors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("blue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n width"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("300.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n height"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("150.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("_event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("toString")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("?")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('""')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("style"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("TextStyle")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("color"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Colors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("white"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPointerDown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PointerDownEvent event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("_event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPointerMove"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PointerMoveEvent event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("_event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPointerUp"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("PointerUpEvent event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("setState")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v("_event"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),a("p",[t._v("运行后效果如图8-1所示:")]),t._v(" "),a("p",[a("img",{attrs:{src:s(520),alt:"图8-1"}})]),t._v(" "),a("p",[t._v("手指在蓝色矩形区域内移动即可看到当前指针偏移,当触发指针事件时,参数"),a("code",[t._v("PointerDownEvent")]),t._v("、"),a("code",[t._v("PointerMoveEvent")]),t._v("、"),a("code",[t._v("PointerUpEvent")]),t._v("都是"),a("code",[t._v("PointerEvent")]),t._v("的一个子类,"),a("code",[t._v("PointerEvent")]),t._v("类中包括当前指针的一些信息,如:")]),t._v(" "),a("ul",[a("li",[a("code",[t._v("position")]),t._v(":它是鼠标相对于当对于全局坐标的偏移。")]),t._v(" "),a("li",[a("code",[t._v("delta")]),t._v(":两次指针移动事件("),a("code",[t._v("PointerMoveEvent")]),t._v(")的距离。")]),t._v(" "),a("li",[a("code",[t._v("pressure")]),t._v(":按压力度,如果手机屏幕支持压力传感器(如iPhone的3D Touch),此属性会更有意义,如果手机不支持,则始终为1。")]),t._v(" "),a("li",[a("code",[t._v("orientation")]),t._v(":指针移动方向,是一个角度值。")])]),t._v(" "),a("p",[t._v("上面只是"),a("code",[t._v("PointerEvent")]),t._v("一些常用属性,除了这些它还有很多属性,读者可以查看API文档。")]),t._v(" "),a("p",[t._v("现在,我们重点来介绍一下"),a("code",[t._v("behavior")]),t._v("属性,它决定子组件如何响应命中测试,它的值类型为"),a("code",[t._v("HitTestBehavior")]),t._v(",这是一个枚举类,有三个枚举值:")]),t._v(" "),a("ul",[a("li",[a("p",[a("code",[t._v("deferToChild")]),t._v(":子组件会一个接一个的进行命中测试,如果子组件中有测试通过的,则当前组件通过,这就意味着,如果指针事件作用于子组件上时,其父级组件也肯定可以收到该事件。")])]),t._v(" "),a("li",[a("p",[a("code",[t._v("opaque")]),t._v(":在命中测试时,将当前组件当成不透明处理(即使本身是透明的),最终的效果相当于当前Widget的整个区域都是点击区域。举个例子:")]),t._v(" "),a("div",{staticClass:"language-dart extra-class"},[a("pre",{pre:!0,attrs:{class:"language-dart"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Listener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ConstrainedBox")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n constraints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" BoxConstraints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("tight")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("300.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("150.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Center")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"Box A"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v("//behavior: HitTestBehavior.opaque,")]),t._v("\n onPointerDown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("print")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"down A"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n")])])]),a("p",[t._v("上例中,只有点击文本内容区域才会触发点击事件,因为 "),a("code",[t._v("deferToChild")]),t._v(" 会去子组件判断是否命中测试,而该例中子组件就是 "),a("code",[t._v('Text("Box A")')]),t._v(" 。\n如果我们想让整个300×150的矩形区域都能点击我们可以将"),a("code",[t._v("behavior")]),t._v("设为"),a("code",[t._v("HitTestBehavior.opaque")]),t._v("。注意,该属性并不能用于在组件树中拦截(忽略)事件,它只是决定命中测试时的组件大小。")])]),t._v(" "),a("li",[a("p",[a("code",[t._v("translucent")]),t._v(":当点击组件透明区域时,可以对自身边界内及底部可视区域都进行命中测试,这意味着点击顶部组件透明区域时,顶部组件和底部组件都可以接收到事件,例如:")]),t._v(" "),a("div",{staticClass:"language-dart extra-class"},[a("pre",{pre:!0,attrs:{class:"language-dart"}},[a("code",[a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Stack")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n children"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("<")]),t._v("Widget"),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("[")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Listener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ConstrainedBox")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n constraints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" BoxConstraints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("tight")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("300.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("DecoratedBox")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n decoration"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("BoxDecoration")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("color"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" Colors"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),t._v("blue"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPointerDown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("print")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"down0"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Listener")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("ConstrainedBox")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("\n constraints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" BoxConstraints"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(".")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("tight")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Size")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("200.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token number"}},[t._v("100.0")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Center")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("child"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("Text")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"左上角200*100范围内非文本区域点击"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n onPointerDown"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(":")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),t._v("event"),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v("=")]),a("span",{pre:!0,attrs:{class:"token operator"}},[t._v(">")]),t._v(" "),a("span",{pre:!0,attrs:{class:"token function"}},[t._v("print")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v("(")]),a("span",{pre:!0,attrs:{class:"token string"}},[t._v('"down1"')]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(",")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token comment"}},[t._v('//behavior: HitTestBehavior.translucent, //放开此行注释后可以"点透"')]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v(")")]),t._v("\n "),a("span",{pre:!0,attrs:{class:"token punctuation"}},[t._v
gitextract_ygze40pb/
├── .github/
│ └── FUNDING.yml
├── .gitignore
├── README.MD
├── docs/
│ ├── 404.html
│ ├── assets/
│ │ ├── css/
│ │ │ └── 0.styles.9ca8d33d.css
│ │ └── js/
│ │ ├── 10.5f481ee1.js
│ │ ├── 100.ce32ed9e.js
│ │ ├── 101.60ad385d.js
│ │ ├── 102.53edb23b.js
│ │ ├── 103.21193c45.js
│ │ ├── 104.02d5761d.js
│ │ ├── 105.b6044eeb.js
│ │ ├── 106.9b857fc8.js
│ │ ├── 107.188f42e4.js
│ │ ├── 108.47fd6022.js
│ │ ├── 109.9119c4a8.js
│ │ ├── 11.2026a71f.js
│ │ ├── 110.fec0c84f.js
│ │ ├── 111.95623244.js
│ │ ├── 112.e8e91632.js
│ │ ├── 113.d0f44add.js
│ │ ├── 114.df1f86a1.js
│ │ ├── 115.374ee72b.js
│ │ ├── 116.5453b788.js
│ │ ├── 117.f7002db2.js
│ │ ├── 118.d4908451.js
│ │ ├── 119.baead276.js
│ │ ├── 12.ef586fcc.js
│ │ ├── 120.681a706e.js
│ │ ├── 121.aef1325d.js
│ │ ├── 122.59b7f284.js
│ │ ├── 123.b83bac47.js
│ │ ├── 124.7a950a7c.js
│ │ ├── 125.275c37b1.js
│ │ ├── 126.a62ac904.js
│ │ ├── 127.76aaf7da.js
│ │ ├── 128.c75c7015.js
│ │ ├── 129.88b4391d.js
│ │ ├── 13.e93e35ca.js
│ │ ├── 130.f1922c51.js
│ │ ├── 131.7f51717c.js
│ │ ├── 132.4b82358d.js
│ │ ├── 133.85003caa.js
│ │ ├── 134.68a25fe9.js
│ │ ├── 135.765bad57.js
│ │ ├── 136.46f11ea2.js
│ │ ├── 137.0345664d.js
│ │ ├── 138.1a184d5a.js
│ │ ├── 139.94803f35.js
│ │ ├── 14.4d0ac363.js
│ │ ├── 140.c76b4d30.js
│ │ ├── 141.592ee9d6.js
│ │ ├── 142.d7d8dbaf.js
│ │ ├── 143.77583b74.js
│ │ ├── 144.2ce6c614.js
│ │ ├── 145.8fe852a4.js
│ │ ├── 146.86bb1e0f.js
│ │ ├── 147.e9009fb7.js
│ │ ├── 148.0c341180.js
│ │ ├── 149.46210223.js
│ │ ├── 15.7f957f4b.js
│ │ ├── 150.220fd8cf.js
│ │ ├── 151.a1cacc6d.js
│ │ ├── 152.5323fd98.js
│ │ ├── 153.26e3ed31.js
│ │ ├── 154.40b97c4a.js
│ │ ├── 155.b55f4193.js
│ │ ├── 156.f4128841.js
│ │ ├── 157.fb299d51.js
│ │ ├── 158.49064f28.js
│ │ ├── 159.277037a1.js
│ │ ├── 16.2d42d5bc.js
│ │ ├── 160.0664832e.js
│ │ ├── 161.38ea1a1a.js
│ │ ├── 162.f96e9c80.js
│ │ ├── 163.cfb15292.js
│ │ ├── 164.46dd9498.js
│ │ ├── 165.86c8b8c1.js
│ │ ├── 166.3938fc5f.js
│ │ ├── 167.09cbb683.js
│ │ ├── 168.aab68e4f.js
│ │ ├── 169.b01d210b.js
│ │ ├── 17.59a459c4.js
│ │ ├── 170.e68bf3e7.js
│ │ ├── 171.4f0e7d6b.js
│ │ ├── 172.ae542eee.js
│ │ ├── 173.c985ca5c.js
│ │ ├── 174.ece20a6a.js
│ │ ├── 175.891c0a2f.js
│ │ ├── 176.93a74e23.js
│ │ ├── 177.20c492a7.js
│ │ ├── 178.a9c56f1f.js
│ │ ├── 179.b42bb139.js
│ │ ├── 18.318a79e1.js
│ │ ├── 180.d048122a.js
│ │ ├── 181.e3633acb.js
│ │ ├── 182.d30b9f69.js
│ │ ├── 183.802b20e7.js
│ │ ├── 184.90e5f242.js
│ │ ├── 185.5cca4d69.js
│ │ ├── 186.56dca3cc.js
│ │ ├── 187.405078e0.js
│ │ ├── 188.766e2a5e.js
│ │ ├── 189.c927c79a.js
│ │ ├── 19.175563ad.js
│ │ ├── 190.92378aeb.js
│ │ ├── 191.167ff3f3.js
│ │ ├── 192.53c8ab5d.js
│ │ ├── 193.05fa90e3.js
│ │ ├── 194.df254afb.js
│ │ ├── 195.1c40c74b.js
│ │ ├── 196.3dbd36a7.js
│ │ ├── 197.7fd8856f.js
│ │ ├── 198.2a531f59.js
│ │ ├── 199.7dc1f153.js
│ │ ├── 2.f4fe4405.js
│ │ ├── 20.6c5c8986.js
│ │ ├── 200.92165c5b.js
│ │ ├── 201.2953b2e7.js
│ │ ├── 202.de6ee6b8.js
│ │ ├── 203.ac627436.js
│ │ ├── 204.fb9289cb.js
│ │ ├── 205.90d0284c.js
│ │ ├── 206.2dbac1ab.js
│ │ ├── 207.d052f90b.js
│ │ ├── 208.0818aeb7.js
│ │ ├── 209.95753ceb.js
│ │ ├── 21.c0363ec5.js
│ │ ├── 210.0c9a3892.js
│ │ ├── 211.43a19344.js
│ │ ├── 212.f9dee082.js
│ │ ├── 213.f55d441e.js
│ │ ├── 214.0836f39e.js
│ │ ├── 215.807d3ade.js
│ │ ├── 216.a7c3d830.js
│ │ ├── 217.ad95582b.js
│ │ ├── 218.059e8703.js
│ │ ├── 219.70d1d263.js
│ │ ├── 22.4fdaa56f.js
│ │ ├── 220.69e2bb54.js
│ │ ├── 221.51aa50d8.js
│ │ ├── 222.8f955066.js
│ │ ├── 223.3230e791.js
│ │ ├── 224.35c9623f.js
│ │ ├── 225.8687c2ec.js
│ │ ├── 226.d982aa8d.js
│ │ ├── 227.c297d2cb.js
│ │ ├── 228.4dcdd69c.js
│ │ ├── 229.91061a53.js
│ │ ├── 23.87c6db58.js
│ │ ├── 24.bf1834df.js
│ │ ├── 25.869317d7.js
│ │ ├── 26.e656381b.js
│ │ ├── 27.d1fa65c2.js
│ │ ├── 28.fbba6f6f.js
│ │ ├── 29.e809e77a.js
│ │ ├── 3.cc1736a7.js
│ │ ├── 30.b84a8f21.js
│ │ ├── 31.dca209c1.js
│ │ ├── 32.c0efa5ac.js
│ │ ├── 33.8b948e2d.js
│ │ ├── 34.9dff7b9d.js
│ │ ├── 35.a9c7aa47.js
│ │ ├── 36.d9eeb78f.js
│ │ ├── 37.7ecb6ef5.js
│ │ ├── 38.260a994c.js
│ │ ├── 39.c3d0c942.js
│ │ ├── 4.2eb3fd02.js
│ │ ├── 40.31216541.js
│ │ ├── 41.7b70eaf0.js
│ │ ├── 42.057d8df6.js
│ │ ├── 43.b17a6aae.js
│ │ ├── 44.5f61dab7.js
│ │ ├── 45.381b04c9.js
│ │ ├── 46.1c911d7c.js
│ │ ├── 47.692e2e27.js
│ │ ├── 48.6747a87a.js
│ │ ├── 49.e636869b.js
│ │ ├── 5.0941abdb.js
│ │ ├── 50.57b758f4.js
│ │ ├── 51.4c0d2270.js
│ │ ├── 52.61d5b4f1.js
│ │ ├── 53.56438d06.js
│ │ ├── 54.4afb8008.js
│ │ ├── 55.a7c27448.js
│ │ ├── 56.8a9849da.js
│ │ ├── 57.371d9d12.js
│ │ ├── 58.3d2501b6.js
│ │ ├── 59.ab37b38d.js
│ │ ├── 6.15c5e328.js
│ │ ├── 60.7043cbf5.js
│ │ ├── 61.470fa853.js
│ │ ├── 62.b51637d5.js
│ │ ├── 63.ff70c9ee.js
│ │ ├── 64.4621481d.js
│ │ ├── 65.2d58a524.js
│ │ ├── 66.5df03e62.js
│ │ ├── 67.73c671d9.js
│ │ ├── 68.4de1c271.js
│ │ ├── 69.46ed47d5.js
│ │ ├── 7.9aacc405.js
│ │ ├── 70.a85fca0c.js
│ │ ├── 71.f6151eb7.js
│ │ ├── 72.2c5ab8cf.js
│ │ ├── 73.dcf07497.js
│ │ ├── 74.3253492f.js
│ │ ├── 75.bef82a69.js
│ │ ├── 76.29cac87f.js
│ │ ├── 77.8fef1f03.js
│ │ ├── 78.28647d83.js
│ │ ├── 79.1a0eb05b.js
│ │ ├── 8.cb5899ca.js
│ │ ├── 80.8eacbc37.js
│ │ ├── 81.f8e7c85e.js
│ │ ├── 82.a6b89300.js
│ │ ├── 83.daf1b549.js
│ │ ├── 84.f330e398.js
│ │ ├── 85.f647b247.js
│ │ ├── 86.e82005d4.js
│ │ ├── 87.e1f95a69.js
│ │ ├── 88.9709422a.js
│ │ ├── 89.4ff5c882.js
│ │ ├── 9.f995bbe8.js
│ │ ├── 90.fff47bcf.js
│ │ ├── 91.9eb501f7.js
│ │ ├── 92.7b12896a.js
│ │ ├── 93.54d0e6b6.js
│ │ ├── 94.c6e7a2f7.js
│ │ ├── 95.bf70fc45.js
│ │ ├── 96.b382caf8.js
│ │ ├── 97.14909b27.js
│ │ ├── 98.8023c3ac.js
│ │ ├── 99.3db30893.js
│ │ └── app.189f52e4.js
│ ├── chapter1/
│ │ ├── dart.html
│ │ ├── flutter_intro.html
│ │ ├── index.html
│ │ ├── install_flutter.html
│ │ └── mobile_development_intro.html
│ ├── chapter10/
│ │ ├── combine.html
│ │ ├── custom_paint.html
│ │ ├── gradient_circular_progress_demo.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ └── turn_box.html
│ ├── chapter11/
│ │ ├── dio.html
│ │ ├── download_with_chunks.html
│ │ ├── file_operation.html
│ │ ├── http.html
│ │ ├── index.html
│ │ ├── json_model.html
│ │ ├── socket.html
│ │ └── websocket.html
│ ├── chapter12/
│ │ ├── android_implement.html
│ │ ├── develop_package.html
│ │ ├── develop_plugin.html
│ │ ├── index.html
│ │ ├── ios_implement.html
│ │ ├── platform-channel.html
│ │ └── texture_platformview.html
│ ├── chapter13/
│ │ ├── faq.html
│ │ ├── index.html
│ │ ├── intl.html
│ │ ├── locallization_implement.html
│ │ └── multi_languages_support.html
│ ├── chapter14/
│ │ ├── element_buildcontext.html
│ │ ├── flutter_app_startup.html
│ │ ├── flutter_ui_system.html
│ │ ├── image_and_cache.html
│ │ ├── index.html
│ │ └── render_object.html
│ ├── chapter15/
│ │ ├── code_structure.html
│ │ ├── entry.html
│ │ ├── globals.html
│ │ ├── intro.html
│ │ ├── language_and_theme_setting.html
│ │ ├── login_page.html
│ │ ├── models.html
│ │ └── network.html
│ ├── chapter2/
│ │ ├── first_flutter_app.html
│ │ ├── flutter_app_debug.html
│ │ ├── flutter_assets_mgr.html
│ │ ├── flutter_package_mgr.html
│ │ ├── flutter_router.html
│ │ ├── index.html
│ │ └── thread_model_and_error_report.html
│ ├── chapter3/
│ │ ├── buttons.html
│ │ ├── flutter_widget_intro.html
│ │ ├── img_and_icon.html
│ │ ├── index.html
│ │ ├── input_and_form.html
│ │ ├── progress.html
│ │ ├── radio_and_checkbox.html
│ │ ├── state_manage.html
│ │ └── text.html
│ ├── chapter4/
│ │ ├── alignment.html
│ │ ├── flex.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── row_and_column.html
│ │ ├── stack.html
│ │ └── wrap_and_flow.html
│ ├── chapter5/
│ │ ├── clip.html
│ │ ├── constrainedbox_and_sizebox.html
│ │ ├── container.html
│ │ ├── decoratedbox.html
│ │ ├── index.html
│ │ ├── material_scaffold.html
│ │ ├── padding.html
│ │ └── transform.html
│ ├── chapter6/
│ │ ├── custom_scrollview.html
│ │ ├── gridview.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── listview.html
│ │ ├── scroll_controller.html
│ │ └── single_child_scrollview.html
│ ├── chapter7/
│ │ ├── dailog.html
│ │ ├── futurebuilder_and_streambuilder.html
│ │ ├── index.html
│ │ ├── inherited_widget.html
│ │ ├── provider.html
│ │ ├── theme.html
│ │ └── willpopscope.html
│ ├── chapter8/
│ │ ├── eventbus.html
│ │ ├── gesture.html
│ │ ├── index.html
│ │ ├── listener.html
│ │ └── notification.html
│ ├── chapter9/
│ │ ├── animated_switcher.html
│ │ ├── animated_widgets.html
│ │ ├── animation_structure.html
│ │ ├── hero.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── route_transition.html
│ │ └── stagger_animation.html
│ ├── imgs/
│ │ └── index.html
│ ├── index.html
│ ├── intro.html
│ ├── join_us.html
│ ├── next.html
│ ├── preface.html
│ ├── reference.html
│ ├── summary.html
│ └── v2/
│ ├── chapter1/
│ │ ├── dart.html
│ │ ├── flutter_intro.html
│ │ ├── index.html
│ │ ├── install_flutter.html
│ │ └── mobile_development_intro.html
│ ├── chapter10/
│ │ ├── combine.html
│ │ ├── custom_paint.html
│ │ ├── gradient_circular_progress_demo.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ └── turn_box.html
│ ├── chapter11/
│ │ ├── dio.html
│ │ ├── download_with_chunks.html
│ │ ├── file_operation.html
│ │ ├── http.html
│ │ ├── index.html
│ │ ├── json_model.html
│ │ ├── socket.html
│ │ └── websocket.html
│ ├── chapter12/
│ │ ├── android_implement.html
│ │ ├── develop_package.html
│ │ ├── develop_plugin.html
│ │ ├── index.html
│ │ ├── ios_implement.html
│ │ ├── platform-channel.html
│ │ └── texture_platformview.html
│ ├── chapter13/
│ │ ├── faq.html
│ │ ├── index.html
│ │ ├── intl.html
│ │ ├── locallization_implement.html
│ │ └── multi_languages_support.html
│ ├── chapter14/
│ │ ├── element_buildcontext.html
│ │ ├── flutter_app_startup.html
│ │ ├── flutter_ui_system.html
│ │ ├── image_and_cache.html
│ │ ├── index.html
│ │ └── render_object.html
│ ├── chapter15/
│ │ ├── code_structure.html
│ │ ├── entry.html
│ │ ├── globals.html
│ │ ├── intro.html
│ │ ├── language_and_theme_setting.html
│ │ ├── login_page.html
│ │ ├── models.html
│ │ └── network.html
│ ├── chapter2/
│ │ ├── first_flutter_app.html
│ │ ├── flutter_app_debug.html
│ │ ├── flutter_assets_mgr.html
│ │ ├── flutter_package_mgr.html
│ │ ├── flutter_router.html
│ │ ├── index.html
│ │ └── thread_model_and_error_report.html
│ ├── chapter3/
│ │ ├── buttons.html
│ │ ├── flutter_widget_intro.html
│ │ ├── img_and_icon.html
│ │ ├── index.html
│ │ ├── input_and_form.html
│ │ ├── progress.html
│ │ ├── radio_and_checkbox.html
│ │ ├── state_manage.html
│ │ └── text.html
│ ├── chapter4/
│ │ ├── alignment.html
│ │ ├── flex.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── row_and_column.html
│ │ ├── stack.html
│ │ └── wrap_and_flow.html
│ ├── chapter5/
│ │ ├── clip.html
│ │ ├── constrainedbox_and_sizebox.html
│ │ ├── container.html
│ │ ├── decoratedbox.html
│ │ ├── index.html
│ │ ├── material_scaffold.html
│ │ ├── padding.html
│ │ └── transform.html
│ ├── chapter6/
│ │ ├── custom_scrollview.html
│ │ ├── gridview.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── listview.html
│ │ ├── scroll_controller.html
│ │ └── single_child_scrollview.html
│ ├── chapter7/
│ │ ├── dailog.html
│ │ ├── futurebuilder_and_streambuilder.html
│ │ ├── index.html
│ │ ├── inherited_widget.html
│ │ ├── provider.html
│ │ ├── theme.html
│ │ └── willpopscope.html
│ ├── chapter8/
│ │ ├── eventbus.html
│ │ ├── gesture.html
│ │ ├── index.html
│ │ ├── listener.html
│ │ └── notification.html
│ ├── chapter9/
│ │ ├── animated_switcher.html
│ │ ├── animated_widgets.html
│ │ ├── animation_structure.html
│ │ ├── hero.html
│ │ ├── index.html
│ │ ├── intro.html
│ │ ├── route_transition.html
│ │ └── stagger_animation.html
│ ├── imgs/
│ │ └── index.html
│ ├── index.html
│ ├── intro.html
│ ├── join_us.html
│ ├── next.html
│ ├── preface.html
│ ├── reference.html
│ └── summary.html
├── package.json
└── src/
├── .vuepress/
│ ├── config.js
│ ├── styles/
│ │ └── palette.styl
│ └── theme/
│ ├── index.js
│ └── layouts/
│ └── Layout.vue
├── README.md
├── _layouts/
│ ├── ebook/
│ │ ├── page.html
│ │ ├── pdf_footer.html
│ │ ├── pdf_header.html
│ │ └── summary.html
│ ├── layout.html
│ └── website/
│ ├── _page.html
│ ├── header.html
│ ├── languages.html
│ ├── layout.html
│ └── summary.html
├── chapter1/
│ ├── dart.md
│ ├── flutter_intro.md
│ ├── index.md
│ ├── install_flutter.md
│ └── mobile_development_intro.md
├── chapter10/
│ ├── combine.md
│ ├── custom_paint.md
│ ├── gradient_circular_progress_demo.md
│ ├── index.md
│ ├── intro.md
│ └── turn_box.md
├── chapter11/
│ ├── dio.md
│ ├── download_with_chunks.md
│ ├── file_operation.md
│ ├── http.md
│ ├── index.md
│ ├── json_model.md
│ ├── socket.md
│ └── websocket.md
├── chapter12/
│ ├── android_implement.md
│ ├── develop_package.md
│ ├── develop_plugin.md
│ ├── index.md
│ ├── ios_implement.md
│ ├── platform-channel.md
│ └── texture_platformview.md
├── chapter13/
│ ├── faq.md
│ ├── index.md
│ ├── intl.md
│ ├── locallization_implement.md
│ └── multi_languages_support.md
├── chapter14/
│ ├── element_buildcontext.md
│ ├── flutter_app_startup.md
│ ├── flutter_ui_system.md
│ ├── image_and_cache.md
│ ├── index.md
│ └── render_object.md
├── chapter15/
│ ├── code_structure.md
│ ├── entry.md
│ ├── globals.md
│ ├── intro.md
│ ├── language_and_theme_setting.md
│ ├── login_page.md
│ ├── models.md
│ └── network.md
├── chapter2/
│ ├── first_flutter_app.md
│ ├── flutter_app_debug.md
│ ├── flutter_assets_mgr.md
│ ├── flutter_package_mgr.md
│ ├── flutter_router.md
│ ├── index.md
│ └── thread_model_and_error_report.md
├── chapter3/
│ ├── buttons.md
│ ├── flutter_widget_intro.md
│ ├── img_and_icon.md
│ ├── index.md
│ ├── input_and_form.md
│ ├── progress.md
│ ├── radio_and_checkbox.md
│ ├── state_manage.md
│ └── text.md
├── chapter4/
│ ├── alignment.md
│ ├── flex.md
│ ├── index.md
│ ├── intro.md
│ ├── row_and_column.md
│ ├── stack.md
│ └── wrap_and_flow.md
├── chapter5/
│ ├── clip.md
│ ├── constrainedbox_and_sizebox.md
│ ├── container.md
│ ├── decoratedbox.md
│ ├── index.md
│ ├── material_scaffold.md
│ ├── padding.md
│ └── transform.md
├── chapter6/
│ ├── custom_scrollview.md
│ ├── gridview.md
│ ├── index.md
│ ├── intro.md
│ ├── listview.md
│ ├── scroll_controller.md
│ └── single_child_scrollview.md
├── chapter7/
│ ├── dailog.md
│ ├── futurebuilder_and_streambuilder.md
│ ├── index.md
│ ├── inherited_widget.md
│ ├── provider.md
│ ├── theme.md
│ └── willpopscope.md
├── chapter8/
│ ├── eventbus.md
│ ├── gesture.md
│ ├── index.md
│ ├── listener.md
│ └── notification.md
├── chapter9/
│ ├── animated_switcher.md
│ ├── animated_widgets.md
│ ├── animation_structure.md
│ ├── hero.md
│ ├── index.md
│ ├── intro.md
│ ├── route_transition.md
│ └── stagger_animation.md
├── gitbook/
│ └── pub.js
├── img_des.txt
├── imgs/
│ └── index.md
├── index.md
├── intro.md
├── join_us.md
├── next.md
├── preface.md
├── reference.md
├── summary.md
└── v2/
├── README.md
├── chapter1/
│ ├── dart.md
│ ├── flutter_intro.md
│ ├── index.md
│ ├── install_flutter.md
│ └── mobile_development_intro.md
├── chapter10/
│ ├── combine.md
│ ├── custom_paint.md
│ ├── gradient_circular_progress_demo.md
│ ├── index.md
│ ├── intro.md
│ └── turn_box.md
├── chapter11/
│ ├── dio.md
│ ├── download_with_chunks.md
│ ├── file_operation.md
│ ├── http.md
│ ├── index.md
│ ├── json_model.md
│ ├── socket.md
│ └── websocket.md
├── chapter12/
│ ├── android_implement.md
│ ├── develop_package.md
│ ├── develop_plugin.md
│ ├── index.md
│ ├── ios_implement.md
│ ├── platform-channel.md
│ └── texture_platformview.md
├── chapter13/
│ ├── faq.md
│ ├── index.md
│ ├── intl.md
│ ├── locallization_implement.md
│ └── multi_languages_support.md
├── chapter14/
│ ├── element_buildcontext.md
│ ├── flutter_app_startup.md
│ ├── flutter_ui_system.md
│ ├── image_and_cache.md
│ ├── index.md
│ └── render_object.md
├── chapter15/
│ ├── code_structure.md
│ ├── entry.md
│ ├── globals.md
│ ├── intro.md
│ ├── language_and_theme_setting.md
│ ├── login_page.md
│ ├── models.md
│ └── network.md
├── chapter2/
│ ├── first_flutter_app.md
│ ├── flutter_app_debug.md
│ ├── flutter_assets_mgr.md
│ ├── flutter_package_mgr.md
│ ├── flutter_router.md
│ ├── index.md
│ └── thread_model_and_error_report.md
├── chapter3/
│ ├── buttons.md
│ ├── flutter_widget_intro.md
│ ├── img_and_icon.md
│ ├── index.md
│ ├── input_and_form.md
│ ├── progress.md
│ ├── radio_and_checkbox.md
│ ├── state_manage.md
│ └── text.md
├── chapter4/
│ ├── alignment.md
│ ├── flex.md
│ ├── index.md
│ ├── intro.md
│ ├── row_and_column.md
│ ├── stack.md
│ └── wrap_and_flow.md
├── chapter5/
│ ├── clip.md
│ ├── constrainedbox_and_sizebox.md
│ ├── container.md
│ ├── decoratedbox.md
│ ├── index.md
│ ├── material_scaffold.md
│ ├── padding.md
│ └── transform.md
├── chapter6/
│ ├── custom_scrollview.md
│ ├── gridview.md
│ ├── index.md
│ ├── intro.md
│ ├── listview.md
│ ├── scroll_controller.md
│ └── single_child_scrollview.md
├── chapter7/
│ ├── dailog.md
│ ├── futurebuilder_and_streambuilder.md
│ ├── index.md
│ ├── inherited_widget.md
│ ├── provider.md
│ ├── theme.md
│ └── willpopscope.md
├── chapter8/
│ ├── eventbus.md
│ ├── gesture.md
│ ├── index.md
│ ├── listener.md
│ └── notification.md
├── chapter9/
│ ├── animated_switcher.md
│ ├── animated_widgets.md
│ ├── animation_structure.md
│ ├── hero.md
│ ├── index.md
│ ├── intro.md
│ ├── route_transition.md
│ └── stagger_animation.md
├── gitbook/
│ └── pub.js
├── img_des.txt
├── imgs/
│ └── index.md
├── index.md
├── intro.md
├── join_us.md
├── next.md
├── preface.md
├── reference.md
└── summary.md
SYMBOL INDEX (356 symbols across 4 files)
FILE: docs/assets/js/2.f4fe4405.js
function o (line 1) | function o(t){return decodeURI(t).replace(i,"").replace(r,"")}
function u (line 1) | function u(t){return s.test(t)}
function l (line 1) | function l(t){return/^mailto:/.test(t)}
function c (line 1) | function c(t){return/^tel:/.test(t)}
function f (line 1) | function f(t){if(u(t))return t;var e=t.match(i),n=e?e[0]:"",r=o(t);retur...
function p (line 1) | function p(t,e){var n=decodeURIComponent(t.hash),r=function(t){var e=t.m...
function h (line 1) | function h(t,e,n){if(u(e))return{type:"external",path:e};n&&(e=function(...
function d (line 1) | function d(t,e,n,i){var r=n.pages,a=n.themeConfig,s=i&&a.locales&&a.loca...
function g (line 1) | function g(t){var e=v(t.headers||[]);return[{type:"group",collapsable:!1...
function v (line 1) | function v(t){var e;return(t=t.map((function(t){return Object.assign({},...
function m (line 1) | function m(t){return Object.assign(t,{type:t.items&&t.items.length?"link...
function o (line 1) | function o(t,e,n,i,r){var a={props:{to:e,activeClass:"",exactActiveClass...
function u (line 1) | function u(t,e,n,r,a){var s=arguments.length>5&&void 0!==arguments[5]?ar...
function c (line 1) | function c(t,e){if("group"===e.type){var n=e.path&&Object(i.e)(t,e.path)...
function c (line 1) | function c(t,e){return t.ownerDocument.defaultView.getComputedStyle(t,nu...
function h (line 1) | function h(t,e){var n=e.$themeConfig,i=e.$page,s=e.$route,o=e.$site,u=e....
function d (line 1) | function d(t,e,n){var i=[];!function t(e,n){for(var i=0,r=e.length;i<r;i...
FILE: docs/assets/js/app.189f52e4.js
function e (line 1) | function e(e){for(var r,i,l=e[0],c=e[1],u=e[2],h=0,f=[];h<l.length;h++)i...
function n (line 1) | function n(){for(var t,e=0;e<o.length;e++){for(var n=o[e],r=!0,l=1;l<n.l...
function i (line 1) | function i(e){if(r[e])return r[e].exports;var n=r[e]={i:e,l:!1,exports:{...
function o (line 1) | function o(t){return function(t){if(Array.isArray(t))return Object(r.a)(...
function r (line 1) | function r(t,e){(null==e||e>t.length)&&(e=t.length);for(var n=0,r=new Ar...
function r (line 1) | function r(t,e,n,r,a,o,i,l){var c,u="function"==typeof t?t.options:t;if(...
function c (line 1) | function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var...
function a (line 1) | function a(t,e){if(t){if("string"==typeof t)return Object(r.a)(t,e);var ...
function a (line 3) | function a(t,e,n){return t<e?e:t>n?n:t}
function o (line 3) | function o(t){return 100*(-1+t)}
function e (line 3) | function e(){var n=t.shift();n&&n(e)}
function n (line 3) | function n(n){return n=n.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(...
function r (line 3) | function r(t,e,r){e=n(e),t.style[e]=r}
function c (line 3) | function c(t,e){return("string"==typeof t?t:h(t)).indexOf(" "+e+" ")>=0}
function u (line 3) | function u(t,e){var n=h(t),r=n+e;c(n,e)||(t.className=r.substring(1))}
function s (line 3) | function s(t,e){var n,r=h(t);c(t,e)&&(n=r.replace(" "+e+" "," "),t.class...
function h (line 3) | function h(t){return(" "+(t.className||"")+" ").replace(/\s+/gi," ")}
function f (line 3) | function f(t){t&&t.parentNode&&t.parentNode.removeChild(t)}
function c (line 3) | function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var...
function t (line 3) | function t(){}
function l (line 3) | function l(t,e,n){return Object.defineProperty(t,e,{value:n,enumerable:!...
function c (line 3) | function c(t,e,n,r){var a=e&&e.prototype instanceof h?e:h,o=Object.creat...
function u (line 3) | function u(t,e,n){try{return{type:"normal",arg:t.call(e,n)}}catch(t){ret...
function h (line 3) | function h(){}
function f (line 3) | function f(){}
function p (line 3) | function p(){}
function b (line 3) | function b(t){["next","throw","return"].forEach((function(e){l(t,e,(func...
function y (line 3) | function y(t,e){var r;this._invoke=function(a,o){function i(){return new...
function _ (line 3) | function _(t,e){var n=t.iterator[e.method];if(void 0===n){if(e.delegate=...
function x (line 3) | function x(t){var e={tryLoc:t[0]};1 in t&&(e.catchLoc=t[1]),2 in t&&(e.f...
function w (line 3) | function w(t){var e=t.completion||{};e.type="normal",delete e.arg,t.comp...
function P (line 3) | function P(t){this.tryEntries=[{tryLoc:"root"}],t.forEach(x,this),this.r...
function k (line 3) | function k(t){if(t){var e=t[a];if(e)return e.call(t);if("function"==type...
function E (line 3) | function E(){return{value:void 0,done:!0}}
function r (line 3) | function r(n,r){return i.type="throw",i.arg=t,e.next=n,r&&(e.method="nex...
function u (line 3) | function u(t){var e=this.__data__=new r(t);this.size=e.size}
function i (line 3) | function i(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new r;++e<...
function t (line 3) | function t(){}
function v (line 3) | function v(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}
function d (line 3) | function d(t){if("number"==typeof t)return t;if(function(t){return"symbo...
function b (line 3) | function b(e){var n=r,o=a;return r=a=void 0,u=e,i=t.apply(o,n)}
function y (line 3) | function y(t){return u=t,l=setTimeout(x,e),s?b(t):i}
function _ (line 3) | function _(t){var n=t-c;return void 0===c||n>=e||n<0||m&&t-u>=o}
function x (line 3) | function x(){var t=p();if(_(t))return w(t);l=setTimeout(x,function(t){va...
function w (line 3) | function w(t){return l=void 0,g&&r?b(t):(r=a=void 0,i)}
function P (line 3) | function P(){var t=p(),n=_(t);if(r=arguments,a=this,c=t,n){if(void 0===l...
function r (line 3) | function r(e){return"function"==typeof Symbol&&"symbol"==typeof Symbol.i...
function a (line 3) | function a(t,e){return RegExp(t,e)}
function c (line 3) | function c(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var...
function a (line 3) | function a(t,e){if("function"!=typeof t||null!=e&&"function"!=typeof e)t...
function r (line 3) | function r(t,e,n,r,a,o,i){try{var l=t[o](i),c=l.value}catch(t){return vo...
function a (line 3) | function a(t){return function(){var e=this,n=arguments;return new Promis...
function i (line 3) | function i(t){return null==t}
function l (line 3) | function l(t){return null!=t}
function c (line 3) | function c(t){return!0===t}
function u (line 3) | function u(t){return"string"==typeof t||"number"==typeof t||"symbol"==ty...
function s (line 3) | function s(t){return null!==t&&"object"==typeof t}
function f (line 3) | function f(t){return"[object Object]"===h.call(t)}
function p (line 3) | function p(t){return"[object RegExp]"===h.call(t)}
function v (line 3) | function v(t){var e=parseFloat(String(t));return e>=0&&Math.floor(e)===e...
function d (line 3) | function d(t){return l(t)&&"function"==typeof t.then&&"function"==typeof...
function m (line 3) | function m(t){return null==t?"":Array.isArray(t)||f(t)&&t.toString===h?J...
function g (line 3) | function g(t){var e=parseFloat(t);return isNaN(e)?t:e}
function b (line 3) | function b(t,e){for(var n=Object.create(null),r=t.split(","),a=0;a<r.len...
function _ (line 3) | function _(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(...
function w (line 3) | function w(t,e){return x.call(t,e)}
function P (line 3) | function P(t){var e=Object.create(null);return function(n){return e[n]||...
function n (line 3) | function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t...
function A (line 3) | function A(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n...
function C (line 3) | function C(t,e){for(var n in e)t[n]=e[n];return t}
function $ (line 3) | function $(t){for(var e={},n=0;n<t.length;n++)t[n]&&C(e,t[n]);return e}
function T (line 3) | function T(t,e,n){}
function F (line 3) | function F(t,e){if(t===e)return!0;var n=s(t),r=s(e);if(!n||!r)return!n&&...
function D (line 3) | function D(t,e){for(var n=0;n<t.length;n++)if(F(t[n],e))return n;return-1}
function M (line 3) | function M(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments...
function W (line 3) | function W(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,wr...
function lt (line 3) | function lt(t){return"function"==typeof t&&/native code/.test(t.toString...
function t (line 3) | function t(){this.set=Object.create(null)}
function vt (line 3) | function vt(t){pt.push(t),ft.target=t}
function dt (line 3) | function dt(){pt.pop(),ft.target=pt[pt.length-1]}
function yt (line 3) | function yt(t){return new mt(void 0,void 0,void 0,String(t))}
function _t (line 3) | function _t(t){var e=new mt(t.tag,t.data,t.children&&t.children.slice(),...
function Et (line 3) | function Et(t){kt=t}
function Ot (line 3) | function Ot(t,e){var n;if(s(t)&&!(t instanceof mt))return w(t,"__ob__")&...
function jt (line 3) | function jt(t,e,n,r,a){var o=new ft,i=Object.getOwnPropertyDescriptor(t,...
function Lt (line 3) | function Lt(t,e,n){if(Array.isArray(t)&&v(e))return t.length=Math.max(t....
function At (line 3) | function At(t,e){if(Array.isArray(t)&&v(e))t.splice(e,1);else{var n=t.__...
function Ct (line 3) | function Ct(t){for(var e=void 0,n=0,r=t.length;n<r;n++)(e=t[n])&&e.__ob_...
function Tt (line 3) | function Tt(t,e){if(!e)return t;for(var n,r,a,o=ut?Reflect.ownKeys(e):Ob...
function It (line 3) | function It(t,e,n){return n?function(){var r="function"==typeof e?e.call...
function Rt (line 3) | function Rt(t,e){var n=e?t?t.concat(e):Array.isArray(e)?e:[e]:t;return n...
function Ft (line 3) | function Ft(t,e,n,r){var a=Object.create(t||null);return e?C(a,e):a}
function Mt (line 3) | function Mt(t,e,n){if("function"==typeof e&&(e=e.options),function(t,e){...
function Nt (line 3) | function Nt(t,e,n,r){if("string"==typeof n){var a=t[e];if(w(a,n))return ...
function Bt (line 3) | function Bt(t,e,n,r){var a=e[t],o=!w(n,t),i=n[t],l=Wt(Boolean,a.type);if...
function zt (line 3) | function zt(t){var e=t&&t.toString().match(/^\s*function (\w+)/);return ...
function Ut (line 3) | function Ut(t,e){return zt(t)===zt(e)}
function Wt (line 3) | function Wt(t,e){if(!Array.isArray(e))return Ut(e,t)?0:-1;for(var n=0,r=...
function Vt (line 3) | function Vt(t,e,n){vt();try{if(e)for(var r=e;r=r.$parent;){var a=r.$opti...
function qt (line 3) | function qt(t,e,n,r,a){var o;try{(o=n?t.apply(e,n):t.call(e))&&!o._isVue...
function Ht (line 3) | function Ht(t,e,n){if(z.errorHandler)try{return z.errorHandler.call(null...
function Gt (line 3) | function Gt(t,e,n){if(!G&&!K||"undefined"==typeof console)throw t;consol...
function Yt (line 3) | function Yt(){Qt=!1;var t=Xt.slice(0);Xt.length=0;for(var e=0;e<t.length...
function re (line 3) | function re(t,e){var n;if(Xt.push((function(){if(t)try{t.call(e)}catch(t...
function oe (line 3) | function oe(t){!function t(e,n){var r,a,o=Array.isArray(e);if(!o&&!s(e)|...
function le (line 3) | function le(t,e){function n(){var t=arguments,r=n.fns;if(!Array.isArray(...
function ce (line 3) | function ce(t,e,n,r,a,o){var l,u,s,h;for(l in t)u=t[l],s=e[l],h=ie(l),i(...
function ue (line 3) | function ue(t,e,n){var r;t instanceof mt&&(t=t.data.hook||(t.data.hook={...
function se (line 3) | function se(t,e,n,r,a){if(l(e)){if(w(e,n))return t[n]=e[n],a||delete e[n...
function he (line 3) | function he(t){return u(t)?[yt(t)]:Array.isArray(t)?function t(e,n){var ...
function fe (line 3) | function fe(t){return l(t)&&l(t.text)&&!1===t.isComment}
function pe (line 3) | function pe(t,e){if(t){for(var n=Object.create(null),r=ut?Reflect.ownKey...
function ve (line 3) | function ve(t,e){if(!t||!t.length)return{};for(var n={},r=0,a=t.length;r...
function de (line 3) | function de(t){return t.isComment&&!t.asyncFactory||" "===t.text}
function me (line 3) | function me(t,e,n){var r,a=Object.keys(e).length>0,i=t?!!t.$stable:!a,l=...
function ge (line 3) | function ge(t,e,n){var r=function(){var t=arguments.length?n.apply(null,...
function be (line 3) | function be(t,e){return function(){return t[e]}}
function ye (line 3) | function ye(t,e){var n,r,a,o,i;if(Array.isArray(t)||"string"==typeof t)f...
function _e (line 3) | function _e(t,e,n,r){var a,o=this.$scopedSlots[t];o?(n=n||{},r&&(n=C(C({...
function xe (line 3) | function xe(t){return Nt(this.$options,"filters",t)||R}
function we (line 3) | function we(t,e){return Array.isArray(t)?-1===t.indexOf(e):t!==e}
function Pe (line 3) | function Pe(t,e,n,r,a){var o=z.keyCodes[e]||n;return a&&r&&!z.keyCodes[e...
function ke (line 3) | function ke(t,e,n,r,a){if(n)if(s(n)){var o;Array.isArray(n)&&(n=$(n));va...
function Ee (line 3) | function Ee(t,e){var n=this._staticTrees||(this._staticTrees=[]),r=n[t];...
function Se (line 3) | function Se(t,e,n){return Oe(t,"__once__"+e+(n?"_"+n:""),!0),t}
function Oe (line 3) | function Oe(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&...
function je (line 3) | function je(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}
function Le (line 3) | function Le(t,e){if(e)if(f(e)){var n=t.on=t.on?C({},t.on):{};for(var r i...
function Ae (line 3) | function Ae(t,e,n,r){e=e||{$stable:!n};for(var a=0;a<t.length;a++){var o...
function Ce (line 3) | function Ce(t,e){for(var n=0;n<e.length;n+=2){var r=e[n];"string"==typeo...
function $e (line 3) | function $e(t,e){return"string"==typeof t?e+t:t}
function Te (line 3) | function Te(t){t._o=Se,t._n=g,t._s=m,t._l=ye,t._t=_e,t._q=F,t._i=D,t._m=...
function Ie (line 3) | function Ie(t,e,n,r,a){var i,l=this,u=a.options;w(r,"_uid")?(i=Object.cr...
function Re (line 3) | function Re(t,e,n,r,a){var o=_t(t);return o.fnContext=n,o.fnOptions=r,e....
function Fe (line 3) | function Fe(t,e){for(var n in e)t[E(n)]=e[n]}
function Ne (line 3) | function Ne(t,e,n,r,a){if(!i(t)){var u=n.$options._base;if(s(t)&&(t=u.ex...
function Be (line 3) | function Be(t,e){var n=function(n,r){t(n,r),e(n,r)};return n._merged=!0,n}
function ze (line 3) | function ze(t,e,n,r,a,o){return(Array.isArray(n)||u(n))&&(a=r,r=n,n=void...
function Ve (line 3) | function Ve(t,e){return(t.__esModule||ut&&"Module"===t[Symbol.toStringTa...
function qe (line 3) | function qe(t){return t.isComment&&t.asyncFactory}
function He (line 3) | function He(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e...
function Ge (line 3) | function Ge(t,e){Ue.$on(t,e)}
function Ke (line 3) | function Ke(t,e){Ue.$off(t,e)}
function Je (line 3) | function Je(t,e){var n=Ue;return function r(){var a=e.apply(null,argumen...
function Xe (line 3) | function Xe(t,e,n){Ue=t,ce(e,n||{},Ge,Ke,Je,t),Ue=void 0}
function Ye (line 3) | function Ye(t){var e=Qe;return Qe=t,function(){Qe=e}}
function Ze (line 3) | function Ze(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}
function tn (line 3) | function tn(t,e){if(e){if(t._directInactive=!1,Ze(t))return}else if(t._d...
function en (line 3) | function en(t,e){vt();var n=t.$options[e],r=e+" hook";if(n)for(var a=0,o...
function fn (line 3) | function fn(){var t,e;for(un=sn(),ln=!0,nn.sort((function(t,e){return t....
function mn (line 3) | function mn(t,e,n){dn.get=function(){return this[e][n]},dn.set=function(...
function gn (line 3) | function gn(t){t._watchers=[];var e=t.$options;e.props&&function(t,e){va...
function yn (line 3) | function yn(t,e,n){var r=!ot();"function"==typeof n?(dn.get=r?_n(e):xn(n...
function _n (line 3) | function _n(t){return function(){var e=this._computedWatchers&&this._com...
function xn (line 3) | function xn(t){return function(){return t.call(this,this)}}
function wn (line 3) | function wn(t,e,n,r){return f(n)&&(r=n,n=n.handler),"string"==typeof n&&...
function kn (line 3) | function kn(t){var e=t.options;if(t.super){var n=kn(t.super);if(n!==t.su...
function En (line 3) | function En(t){this._init(t)}
function Sn (line 3) | function Sn(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r...
function On (line 3) | function On(t){return t&&(t.Ctor.options.name||t.tag)}
function jn (line 3) | function jn(t,e){return Array.isArray(t)?t.indexOf(e)>-1:"string"==typeo...
function Ln (line 3) | function Ln(t,e){var n=t.cache,r=t.keys,a=t._vnode;for(var o in n){var i...
function An (line 3) | function An(t,e,n,r){var a=t[e];!a||r&&a.tag===r.tag||a.componentInstanc...
function r (line 3) | function r(){n.$off(t,r),e.apply(n,arguments)}
function Un (line 3) | function Un(t){for(var e=t.data,n=t,r=t;l(r.componentInstance);)(r=r.com...
function Wn (line 3) | function Wn(t,e){return{staticClass:Vn(t.staticClass,e.staticClass),clas...
function Vn (line 3) | function Vn(t,e){return t?e?t+" "+e:t:e||""}
function qn (line 3) | function qn(t){return Array.isArray(t)?function(t){for(var e,n="",r=0,a=...
function tr (line 3) | function tr(t,e){var n=t.data.ref;if(l(n)){var r=t.context,a=t.component...
function rr (line 3) | function rr(t,e){return t.key===e.key&&(t.tag===e.tag&&t.isComment===e.i...
function ar (line 3) | function ar(t,e,n){var r,a,o={};for(r=e;r<=n;++r)l(a=t[r].key)&&(o[a]=r)...
function ir (line 3) | function ir(t,e){(t.data.directives||e.data.directives)&&function(t,e){v...
function cr (line 3) | function cr(t,e){var n,r,a=Object.create(null);if(!t)return a;for(n=0;n<...
function ur (line 3) | function ur(t){return t.rawName||t.name+"."+Object.keys(t.modifiers||{})...
function sr (line 3) | function sr(t,e,n,r,a){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,a)}c...
function fr (line 3) | function fr(t,e){var n=e.componentOptions;if(!(l(n)&&!1===n.Ctor.options...
function pr (line 3) | function pr(t,e,n){t.tagName.indexOf("-")>-1?vr(t,e,n):Dn(e)?zn(n)?t.rem...
function vr (line 3) | function vr(t,e,n){if(zn(n))t.removeAttribute(e);else{if(Q&&!Y&&"TEXTARE...
function mr (line 3) | function mr(t,e){var n=e.elm,r=e.data,a=t.data;if(!(i(r.staticClass)&&i(...
function yr (line 3) | function yr(t,e,n){var r=gr;return function a(){var o=e.apply(null,argum...
function xr (line 3) | function xr(t,e,n,r){if(_r){var a=un,o=e;e=o._wrapper=function(t){if(t.t...
function wr (line 3) | function wr(t,e,n,r){(r||gr).removeEventListener(t,e._wrapper||e,n)}
function Pr (line 3) | function Pr(t,e){if(!i(t.data.on)||!i(e.data.on)){var n=e.data.on||{},r=...
function Sr (line 3) | function Sr(t,e){if(!i(t.data.domProps)||!i(e.data.domProps)){var n,r,a=...
function Or (line 3) | function Or(t,e){return!t.composing&&("OPTION"===t.tagName||function(t,e...
function Ar (line 3) | function Ar(t){var e=Cr(t.style);return t.staticStyle?C(t.staticStyle,e):e}
function Cr (line 3) | function Cr(t){return Array.isArray(t)?$(t):"string"==typeof t?Lr(t):t}
function Mr (line 3) | function Mr(t,e){var n=e.data,r=t.data;if(!(i(n.staticStyle)&&i(n.style)...
function zr (line 3) | function zr(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function Ur (line 3) | function Ur(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(" ")>-1?e.s...
function Wr (line 3) | function Wr(t){if(t){if("object"==typeof t){var e={};return!1!==t.css&&C...
function Qr (line 3) | function Qr(t){Xr((function(){Xr(t)}))}
function Yr (line 3) | function Yr(t,e){var n=t._transitionClasses||(t._transitionClasses=[]);n...
function Zr (line 3) | function Zr(t,e){t._transitionClasses&&_(t._transitionClasses,e),Ur(t,e)}
function ta (line 3) | function ta(t,e,n){var r=na(t,e),a=r.type,o=r.timeout,i=r.propCount;if(!...
function na (line 3) | function na(t,e){var n,r=window.getComputedStyle(t),a=(r[Hr+"Delay"]||""...
function ra (line 3) | function ra(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.a...
function aa (line 3) | function aa(t){return 1e3*Number(t.slice(0,-1).replace(",","."))}
function oa (line 3) | function oa(t,e){var n=t.elm;l(n._leaveCb)&&(n._leaveCb.cancelled=!0,n._...
function ia (line 3) | function ia(t,e){var n=t.elm;l(n._enterCb)&&(n._enterCb.cancelled=!0,n._...
function la (line 3) | function la(t){return"number"==typeof t&&!isNaN(t)}
function ca (line 3) | function ca(t){if(i(t))return!1;var e=t.fns;return l(e)?ca(Array.isArray...
function ua (line 3) | function ua(t,e){!0!==e.data.show&&oa(e)}
function s (line 3) | function s(t){var e=o.parentNode(t);l(e)&&o.removeChild(e,t)}
function h (line 3) | function h(t,e,n,a,i,u,s){if(l(t.elm)&&l(u)&&(t=u[s]=_t(t)),t.isRootInse...
function f (line 3) | function f(t,e){l(t.data.pendingInsert)&&(e.push.apply(e,t.data.pendingI...
function p (line 3) | function p(t,e,n){l(t)&&(l(n)?o.parentNode(n)===t&&o.insertBefore(t,e,n)...
function v (line 3) | function v(t,e,n){if(Array.isArray(e)){0;for(var r=0;r<e.length;++r)h(e[...
function d (line 3) | function d(t){for(;t.componentInstance;)t=t.componentInstance._vnode;ret...
function m (line 3) | function m(t,n){for(var a=0;a<r.create.length;++a)r.create[a](er,t);l(e=...
function g (line 3) | function g(t){var e;if(l(e=t.fnScopeId))o.setStyleScope(t.elm,e);else fo...
function y (line 3) | function y(t,e,n,r,a,o){for(;r<=a;++r)h(n[r],o,t,e,!1,n,r)}
function _ (line 3) | function _(t){var e,n,a=t.data;if(l(a))for(l(e=a.hook)&&l(e=e.destroy)&&...
function x (line 3) | function x(t,e,n){for(;e<=n;++e){var r=t[e];l(r)&&(l(r.tag)?(w(r),_(r)):...
function w (line 3) | function w(t,e){if(l(e)||l(t.data)){var n,a=r.remove.length+1;for(l(e)?e...
function P (line 3) | function P(t,e,n,r){for(var a=n;a<r;a++){var o=e[a];if(l(o)&&rr(t,o))ret...
function k (line 3) | function k(t,e,n,a,u,s){if(t!==e){l(e.elm)&&l(a)&&(e=a[u]=_t(e));var f=e...
function E (line 3) | function E(t,e,n){if(c(n)&&l(t.parent))t.parent.data.pendingInsert=e;els...
function O (line 3) | function O(t,e,n,r){var a,o=e.tag,i=e.data,u=e.children;if(r=r||i&&i.pre...
function fa (line 3) | function fa(t,e,n){pa(t,e,n),(Q||Z)&&setTimeout((function(){pa(t,e,n)}),0)}
function pa (line 3) | function pa(t,e,n){var r=e.value,a=t.multiple;if(!a||Array.isArray(r)){f...
function va (line 3) | function va(t,e){return e.every((function(e){return!F(e,t)}))}
function da (line 3) | function da(t){return"_value"in t?t._value:t.value}
function ma (line 3) | function ma(t){t.target.composing=!0}
function ga (line 3) | function ga(t){t.target.composing&&(t.target.composing=!1,ba(t.target,"i...
function ba (line 3) | function ba(t,e){var n=document.createEvent("HTMLEvents");n.initEvent(e,...
function ya (line 3) | function ya(t){return!t.componentInstance||t.data&&t.data.transition?t:y...
function wa (line 3) | function wa(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abst...
function Pa (line 3) | function Pa(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];...
function ka (line 3) | function ka(t,e){if(/\d-keep-alive$/.test(e.tag))return t("keep-alive",{...
function La (line 3) | function La(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._ent...
function Aa (line 3) | function Aa(t){t.data.newPos=t.elm.getBoundingClientRect()}
function Ca (line 3) | function Ca(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,a=e.top-...
function Ia (line 8) | function Ia(t,e){for(var n in e)t[n]=e[n];return t}
function Na (line 8) | function Na(t){try{return decodeURIComponent(t)}catch(t){0}return t}
function za (line 8) | function za(t){var e={};return(t=t.trim().replace(/^(\?|#|&)/,""))?(t.sp...
function Ua (line 8) | function Ua(t){var e=t?Object.keys(t).map((function(e){var n=t[e];if(voi...
function Va (line 8) | function Va(t,e,n,r){var a=r&&r.options.stringifyQuery,o=e.query||{};try...
function qa (line 8) | function qa(t){if(Array.isArray(t))return t.map(qa);if(t&&"object"==type...
function Ga (line 8) | function Ga(t){for(var e=[];t;)e.unshift(t),t=t.parent;return e}
function Ka (line 8) | function Ka(t,e){var n=t.path,r=t.query;void 0===r&&(r={});var a=t.hash;...
function Ja (line 8) | function Ja(t,e,n){return e===Ha?t===e:!!e&&(t.path&&e.path?t.path.repla...
function Xa (line 8) | function Xa(t,e){if(void 0===t&&(t={}),void 0===e&&(e={}),!t||!e)return ...
function Qa (line 8) | function Qa(t){for(var e=0;e<t.matched.length;e++){var n=t.matched[e];fo...
function Za (line 8) | function Za(t,e,n,r){var a=e.props=function(t,e){switch(typeof e){case"u...
function to (line 8) | function to(t,e,n){var r=t.charAt(0);if("/"===r)return t;if("?"===r||"#"...
function eo (line 8) | function eo(t){return t.replace(/\/\//g,"/")}
function uo (line 8) | function uo(t,e){for(var n,r=[],a=0,o=0,i="",l=e&&e.delimiter||"/";null!...
function so (line 8) | function so(t){return encodeURI(t).replace(/[\/?#]/g,(function(t){return...
function ho (line 8) | function ho(t,e){for(var n=new Array(t.length),r=0;r<t.length;r++)"objec...
function fo (line 8) | function fo(t){return t.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}
function po (line 8) | function po(t){return t.replace(/([=!:$\/()])/g,"\\$1")}
function vo (line 8) | function vo(t,e){return t.keys=e,t}
function mo (line 8) | function mo(t){return t&&t.sensitive?"":"i"}
function go (line 8) | function go(t,e,n){no(e)||(n=e||n,e=[]);for(var r=(n=n||{}).strict,a=!1!...
function bo (line 8) | function bo(t,e,n){return no(e)||(n=e||n,e=[]),n=n||{},t instanceof RegE...
function _o (line 8) | function _o(t,e,n){e=e||{};try{var r=yo[t]||(yo[t]=ro.compile(t));return...
function xo (line 8) | function xo(t,e,n,r){var a="string"==typeof t?{path:t}:t;if(a._normalize...
function Eo (line 8) | function Eo(t){if(!(t.metaKey||t.altKey||t.ctrlKey||t.shiftKey||t.defaul...
function Oo (line 8) | function Oo(t,e,n,r,a){var o=e||[],i=n||Object.create(null),l=r||Object....
function jo (line 8) | function jo(t,e){return ro(t,[],e)}
function Lo (line 8) | function Lo(t,e){var n=Oo(t),r=n.pathList,a=n.pathMap,o=n.nameMap;functi...
function Ao (line 8) | function Ao(t,e,n){var r=e.match(t);if(!r)return!1;if(!n)return!0;for(va...
function $o (line 8) | function $o(){return Co.now().toFixed(3)}
function Io (line 8) | function Io(){return To}
function Ro (line 8) | function Ro(t){return To=t}
function Do (line 8) | function Do(){"scrollRestoration"in window.history&&(window.history.scro...
function Mo (line 8) | function Mo(t,e,n,r){if(t.app){var a=t.options.scrollBehavior;a&&t.app.$...
function No (line 8) | function No(){var t=Io();t&&(Fo[t]={x:window.pageXOffset,y:window.pageYO...
function Bo (line 8) | function Bo(t){No(),t.state&&t.state.key&&Ro(t.state.key)}
function zo (line 8) | function zo(t){return Wo(t.x)||Wo(t.y)}
function Uo (line 8) | function Uo(t){return{x:Wo(t.x)?t.x:window.pageXOffset,y:Wo(t.y)?t.y:win...
function Wo (line 8) | function Wo(t){return"number"==typeof t}
function qo (line 8) | function qo(t,e){var n,r="object"==typeof t;if(r&&"string"==typeof t.sel...
function Ko (line 8) | function Ko(t,e){No();var n=window.history;try{if(e){var r=Ia({},n.state...
function Jo (line 8) | function Jo(t){Ko(t,!0)}
function Xo (line 8) | function Xo(t,e,n){var r=function(a){a>=t.length?n():t[a]?e(t[a],(functi...
function Yo (line 8) | function Yo(t,e){return ti(t,e,Qo.redirected,'Redirected when going from...
function Zo (line 8) | function Zo(t,e){return ti(t,e,Qo.cancelled,'Navigation cancelled from "...
function ti (line 8) | function ti(t,e,n,r){var a=new Error(r);return a._isRouter=!0,a.from=t,a...
function ni (line 8) | function ni(t){return Object.prototype.toString.call(t).indexOf("Error")...
function ri (line 8) | function ri(t,e){return ni(t)&&t._isRouter&&(null==e||t.type===e)}
function ai (line 8) | function ai(t){return function(e,n,r){var a=!1,o=0,i=null;oi(t,(function...
function oi (line 8) | function oi(t,e){return ii(t.map((function(t){return Object.keys(t.compo...
function ii (line 8) | function ii(t){return Array.prototype.concat.apply([],t)}
function ci (line 8) | function ci(t){var e=!1;return function(){for(var n=[],r=arguments.lengt...
function si (line 8) | function si(t,e,n,r){var a=oi(t,(function(t,r,a,o){var i=function(t,e){"...
function hi (line 8) | function hi(t,e){if(e)return function(){return t.apply(e,arguments)}}
function e (line 8) | function e(e,n){t.call(this,e,n),this._startLocation=pi(this.base)}
function pi (line 8) | function pi(t){var e=window.location.pathname;return t&&0===e.toLowerCas...
function e (line 8) | function e(e,n,r){t.call(this,e,n),r&&function(t){var e=pi(t);if(!/^\/#/...
function di (line 8) | function di(){var t=mi();return"/"===t.charAt(0)||(yi("/"+t),!1)}
function mi (line 8) | function mi(){var t=window.location.href,e=t.indexOf("#");return e<0?"":...
function gi (line 8) | function gi(t){var e=window.location.href,n=e.indexOf("#");return(n>=0?e...
function bi (line 8) | function bi(t){Go?Ko(gi(t)):window.location.hash=t}
function yi (line 8) | function yi(t){Go?Jo(gi(t)):window.location.replace(gi(t))}
function e (line 8) | function e(e,n){t.call(this,e,n),this.stack=[],this.index=-1}
function Pi (line 8) | function Pi(t,e){return t.push(e),function(){var n=t.indexOf(e);n>-1&&t....
function Ei (line 8) | function Ei(t){t.locales&&Object.keys(t.locales).forEach((function(e){t....
function Li (line 8) | function Li(t){var e=Object.create(null);return function(n){return e[n]|...
function Ri (line 8) | function Ri(t,e){if(e)return t(e)?t(e):e.includes("-")?t(Ii(Ci(e))):t(Ii...
function zi (line 8) | function zi(t){return Ri(Mi,t)}
function Ui (line 8) | function Ui(t){return Ri(Ni,t)}
function Wi (line 8) | function Wi(t){return Ri(Di,t)}
function Vi (line 8) | function Vi(t){return Ri(Bi,t)}
function qi (line 8) | function qi(){for(var t=arguments.length,e=new Array(t),n=0;n<t;n++)e[n]...
function Hi (line 8) | function Hi(t,e){"undefined"!=typeof window&&window.__VUEPRESS__&&(windo...
function Ki (line 8) | function Ki(t,e){return function(t){if(Array.isArray(t))return t}(t)||fu...
function Yi (line 8) | function Yi(){var t=document.querySelector("link[rel='canonical']");t&&t...
function Zi (line 8) | function Zi(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[...
function tl (line 8) | function tl(t,e){if(e&&Object(Si.a)(e).filter((function(t){return t.pare...
function el (line 8) | function el(t){for(var e=0,n=["name","property","itemprop"];e<n.length;e...
function vl (line 8) | function vl(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a...
function dl (line 8) | function dl(t,e){for(var n=0;n<e.length;n++){var r=e[n];r.enumerable=r.e...
function ml (line 8) | function ml(t,e,n){return e&&dl(t.prototype,e),n&&dl(t,n),t}
function gl (line 8) | function gl(t,e){return(gl=Object.setPrototypeOf||function(t,e){return t...
function bl (line 8) | function bl(t){return(bl=Object.setPrototypeOf?Object.getPrototypeOf:fun...
function xl (line 8) | function xl(t,e){return!e||"object"!==_l()(e)&&"function"!=typeof e?func...
function wl (line 8) | function wl(t){var e=function(){if("undefined"==typeof Reflect||!Reflect...
function n (line 8) | function n(){return vl(this,n),e.apply(this,arguments)}
function t (line 8) | function t(){vl(this,t),this.store=new Ta({data:{state:{}}})}
function El (line 8) | function El(t){t.beforeEach((function(e,n,r){if(Sl(t,e.path))r();else if...
function Sl (line 8) | function Sl(t,e){var n=e.toLowerCase();return t.options.routes.some((fun...
function Cl (line 8) | function Cl(){return(Cl=a(regeneratorRuntime.mark((function t(e){var n,r...
function e (line 8) | function e(){vl(this,e)}
FILE: src/gitbook/pub.js
function n (line 1) | function n(o){if(r[o])return r[o].exports;var e=r[o]={i:o,l:!1,exports:{...
function o (line 1) | function o(t,n){var r={};for(var o in t)r[o]=t[o];return r.target=r.curr...
function e (line 1) | function e(t){function n(n){return function(){var r=this.hasOwnProperty(...
function i (line 1) | function i(){window[c]&&(XMLHttpRequest=window[c]),window[c]=void 0}
function init (line 13) | function init() {
function _track (line 37) | function _track(p,url) {
function buy (line 44) | function buy(p){
FILE: src/v2/gitbook/pub.js
function n (line 1) | function n(o){if(r[o])return r[o].exports;var e=r[o]={i:o,l:!1,exports:{...
function o (line 1) | function o(t,n){var r={};for(var o in t)r[o]=t[o];return r.target=r.curr...
function e (line 1) | function e(t){function n(n){return function(){var r=this.hasOwnProperty(...
function i (line 1) | function i(){window[c]&&(XMLHttpRequest=window[c]),window[c]=void 0}
function init (line 13) | function init() {
function _track (line 37) | function _track(p,url) {
function buy (line 44) | function buy(p){
Copy disabled (too large)
Download .json
Condensed preview — 699 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (22,368K chars).
[
{
"path": ".github/FUNDING.yml",
"chars": 941,
"preview": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [u"
},
{
"path": ".gitignore",
"chars": 60,
"preview": "node_modules/\n*.DS_Store\nbook/\n.packages\n.dart_tool/\n.idea/\n"
},
{
"path": "README.MD",
"chars": 1931,
"preview": "# 注意\n\n本书第二版草稿已上传,**本 repo 将不再维护**,请大家移步:https://github.com/flutterchina/flutter_in_action_2nd\n\n---\n\n# 第一版简介\n\n本项目为Flutter"
},
{
"path": "docs/404.html",
"chars": 13412,
"preview": "<!DOCTYPE html>\n<html lang=\"en-US\">\n <head>\n <meta charset=\"utf-8\">\n <meta name=\"viewport\" content=\"width=device-"
},
{
"path": "docs/assets/css/0.styles.9ca8d33d.css",
"chars": 25685,
"preview": "code[class*=language-],pre[class*=language-]{color:#ccc;background:none;font-family:Consolas,Monaco,Andale Mono,Ubuntu M"
},
{
"path": "docs/assets/js/10.5f481ee1.js",
"chars": 74213,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[10],{583:function(t,s){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/100.ce32ed9e.js",
"chars": 10869,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[100],{472:function(t,s,n){t.exports=n.p+\"assets/img/5-1.239dadc0.pn"
},
{
"path": "docs/assets/js/101.60ad385d.js",
"chars": 10107,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[101],{494:function(t,s,a){t.exports=a.p+\"assets/img/6-1.a5c8558b.pn"
},
{
"path": "docs/assets/js/102.53edb23b.js",
"chars": 39493,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[102],{509:function(t,a,s){t.exports=s.p+\"assets/img/7-1.fc1ee2fb.pn"
},
{
"path": "docs/assets/js/103.21193c45.js",
"chars": 27114,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[103],{520:function(t,n,s){t.exports=s.p+\"assets/img/8-1.fd0e65f1.pn"
},
{
"path": "docs/assets/js/104.02d5761d.js",
"chars": 44912,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[104],{521:function(t,s,a){t.exports=a.p+\"assets/img/8-6.ce4b57e6.pn"
},
{
"path": "docs/assets/js/105.b6044eeb.js",
"chars": 8465,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[105],{532:function(t,r,a){t.exports=a.p+\"assets/img/1-1.41c572c4.pn"
},
{
"path": "docs/assets/js/106.9b857fc8.js",
"chars": 25794,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[106],{542:function(t,s,n){t.exports=n.p+\"assets/img/10-1.f2135ea6.p"
},
{
"path": "docs/assets/js/107.188f42e4.js",
"chars": 32446,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[107],{543:function(t,s,a){t.exports=a.p+\"assets/img/10-3.3989fea9.p"
},
{
"path": "docs/assets/js/108.47fd6022.js",
"chars": 90628,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[108],{544:function(t,s,n){t.exports=n.p+\"assets/img/gradient_circul"
},
{
"path": "docs/assets/js/109.9119c4a8.js",
"chars": 36518,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[109],{545:function(t,s,a){t.exports=a.p+\"assets/img/10-2.2a9ed156.p"
},
{
"path": "docs/assets/js/11.2026a71f.js",
"chars": 54680,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[11],{634:function(t,s,n){t.exports=n.p+\"assets/img/5-2.40b01667.png"
},
{
"path": "docs/assets/js/110.fec0c84f.js",
"chars": 44879,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[110],{546:function(t,s,a){t.exports=a.p+\"assets/img/11-1.dd10418c.p"
},
{
"path": "docs/assets/js/111.95623244.js",
"chars": 86718,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[111],{547:function(t,s,a){t.exports=a.p+\"assets/img/11-4.b1cfbd03.p"
},
{
"path": "docs/assets/js/112.e8e91632.js",
"chars": 6172,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[112],{548:function(t,s,n){t.exports=n.p+\"assets/img/11-2.f480cac6.p"
},
{
"path": "docs/assets/js/113.d0f44add.js",
"chars": 9613,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[113],{551:function(t,a,e){t.exports=e.p+\"assets/img/12-3.2326714a.p"
},
{
"path": "docs/assets/js/114.df1f86a1.js",
"chars": 19631,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[114],{554:function(t,a,s){t.exports=s.p+\"assets/img/13-1.fcda4f48.j"
},
{
"path": "docs/assets/js/115.374ee72b.js",
"chars": 94724,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[115],{558:function(t,a,s){t.exports=s.p+\"assets/img/14-4.4a6d698c.p"
},
{
"path": "docs/assets/js/116.5453b788.js",
"chars": 77561,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[116],{559:function(t,a){t.exports=\"data:image/png;base64,iVBORw0KGg"
},
{
"path": "docs/assets/js/117.f7002db2.js",
"chars": 34804,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[117],{567:function(t,s,n){t.exports=n.p+\"assets/img/15-5.bcaa565a.p"
},
{
"path": "docs/assets/js/118.d4908451.js",
"chars": 44556,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[118],{568:function(t,a,s){t.exports=s.p+\"assets/img/2-1.801e91b2.pn"
},
{
"path": "docs/assets/js/119.baead276.js",
"chars": 37120,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[119],{582:function(t,a,s){t.exports=s.p+\"assets/img/2-12.eb7484c9.p"
},
{
"path": "docs/assets/js/12.ef586fcc.js",
"chars": 57305,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[12],{662:function(t,s,a){t.exports=a.p+\"assets/img/6-2.1d35c6fc.png"
},
{
"path": "docs/assets/js/120.681a706e.js",
"chars": 10495,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[120],{611:function(t,s,a){t.exports=a.p+\"assets/img/3-23.a249df4c.p"
},
{
"path": "docs/assets/js/121.aef1325d.js",
"chars": 52269,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[121],{612:function(t,a,s){t.exports=s.p+\"assets/img/3-4.8e70e140.pn"
},
{
"path": "docs/assets/js/122.59b7f284.js",
"chars": 22006,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[122],{622:function(t,s,n){t.exports=n.p+\"assets/img/4-5.67110f64.pn"
},
{
"path": "docs/assets/js/123.b83bac47.js",
"chars": 11297,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[123],{643:function(t,a,n){t.exports=n.p+\"assets/img/5-9.47017753.pn"
},
{
"path": "docs/assets/js/124.7a950a7c.js",
"chars": 10869,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[124],{644:function(t,s,n){t.exports=n.p+\"assets/img/5-1.239dadc0.pn"
},
{
"path": "docs/assets/js/125.275c37b1.js",
"chars": 10107,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[125],{672:function(t,s,a){t.exports=a.p+\"assets/img/6-1.a5c8558b.pn"
},
{
"path": "docs/assets/js/126.a62ac904.js",
"chars": 39493,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[126],{675:function(t,a,s){t.exports=s.p+\"assets/img/7-1.fc1ee2fb.pn"
},
{
"path": "docs/assets/js/127.76aaf7da.js",
"chars": 27114,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[127],{686:function(t,n,s){t.exports=s.p+\"assets/img/8-1.fd0e65f1.pn"
},
{
"path": "docs/assets/js/128.c75c7015.js",
"chars": 44912,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[128],{687:function(t,s,a){t.exports=a.p+\"assets/img/8-6.ce4b57e6.pn"
},
{
"path": "docs/assets/js/129.88b4391d.js",
"chars": 704,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[129],{717:function(t,e,s){\"use strict\";s.r(e);var n=[\"There's nothi"
},
{
"path": "docs/assets/js/13.e93e35ca.js",
"chars": 67123,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[13],{416:function(t,a,s){t.exports=s.p+\"assets/img/3-17.a063365a.pn"
},
{
"path": "docs/assets/js/130.f1922c51.js",
"chars": 71579,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[130],{724:function(t,a,s){\"use strict\";s.r(a);var n=s(45),r=Object("
},
{
"path": "docs/assets/js/131.7f51717c.js",
"chars": 849,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[131],{722:function(t,r,e){\"use strict\";e.r(r);var l=e(45),a=Object("
},
{
"path": "docs/assets/js/132.4b82358d.js",
"chars": 20246,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[132],{728:function(t,a,e){\"use strict\";e.r(a);var s=e(45),v=Object("
},
{
"path": "docs/assets/js/133.85003caa.js",
"chars": 995,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[133],{727:function(t,r,e){\"use strict\";e.r(r);var a=e(45),o=Object("
},
{
"path": "docs/assets/js/134.68a25fe9.js",
"chars": 4691,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[134],{729:function(e,t,v){\"use strict\";v.r(t);var _=v(45),a=Object("
},
{
"path": "docs/assets/js/135.765bad57.js",
"chars": 31261,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[135],{732:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/136.46f11ea2.js",
"chars": 53109,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[136],{734:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/137.0345664d.js",
"chars": 21177,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[137],{735:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/138.1a184d5a.js",
"chars": 1190,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[138],{736:function(t,e,o){\"use strict\";o.r(e);var r=o(45),a=Object("
},
{
"path": "docs/assets/js/139.94803f35.js",
"chars": 28439,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[139],{738:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/14.4d0ac363.js",
"chars": 103099,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[14],{422:function(t,s,n){t.exports=n.p+\"assets/img/3-24.68d03561.pn"
},
{
"path": "docs/assets/js/140.c76b4d30.js",
"chars": 40477,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[140],{741:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/141.592ee9d6.js",
"chars": 12450,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[141],{740:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/142.d7d8dbaf.js",
"chars": 1124,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[142],{743:function(t,e,r){\"use strict\";r.r(e);var a=r(45),l=Object("
},
{
"path": "docs/assets/js/143.77583b74.js",
"chars": 29966,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[143],{768:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/144.2ce6c614.js",
"chars": 7692,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[144],{746:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/145.8fe852a4.js",
"chars": 870,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[145],{747:function(t,a,l){\"use strict\";l.r(a);var e=l(45),r=Object("
},
{
"path": "docs/assets/js/146.86bb1e0f.js",
"chars": 34703,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[146],{749:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/147.e9009fb7.js",
"chars": 14750,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[147],{750:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/148.0c341180.js",
"chars": 62085,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[148],{753:function(t,a,n){\"use strict\";n.r(a);var s=n(45),e=Object("
},
{
"path": "docs/assets/js/149.46210223.js",
"chars": 3396,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[149],{754:function(t,e,r){\"use strict\";r.r(e);var a=r(45),I=Object("
},
{
"path": "docs/assets/js/15.7f957f4b.js",
"chars": 68295,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[15],{466:function(t,a,s){t.exports=s.p+\"assets/img/5-18.f83914b2.pn"
},
{
"path": "docs/assets/js/150.220fd8cf.js",
"chars": 895,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[150],{756:function(t,e,r){\"use strict\";r.r(e);var l=r(45),n=Object("
},
{
"path": "docs/assets/js/151.a1cacc6d.js",
"chars": 2707,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[151],{758:function(t,s,n){\"use strict\";n.r(s);var a=n(45),e=Object("
},
{
"path": "docs/assets/js/152.5323fd98.js",
"chars": 32210,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[152],{759:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/153.26e3ed31.js",
"chars": 1360,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[153],{760:function(t,_,v){\"use strict\";v.r(_);var l=v(45),i=Object("
},
{
"path": "docs/assets/js/154.40b97c4a.js",
"chars": 21970,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[154],{763:function(t,s,a){\"use strict\";a.r(s);var r=a(45),n=Object("
},
{
"path": "docs/assets/js/155.b55f4193.js",
"chars": 53424,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[155],{764:function(t,s,a){\"use strict\";a.r(s);var n=a(45),p=Object("
},
{
"path": "docs/assets/js/156.f4128841.js",
"chars": 43317,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[156],{766:function(t,e,a){\"use strict\";a.r(e);var s=a(45),n=Object("
},
{
"path": "docs/assets/js/157.fb299d51.js",
"chars": 1272,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[157],{770:function(t,r,e){\"use strict\";e.r(r);var a=e(45),l=Object("
},
{
"path": "docs/assets/js/158.49064f28.js",
"chars": 1527,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[158],{775:function(t,e,r){\"use strict\";r.r(e);var a=r(45),i=Object("
},
{
"path": "docs/assets/js/159.277037a1.js",
"chars": 1073,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[159],{783:function(t,r,a){\"use strict\";a.r(r);var e=a(45),l=Object("
},
{
"path": "docs/assets/js/16.2d42d5bc.js",
"chars": 70078,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[16],{473:function(t,n,a){t.exports=a.p+\"assets/img/5-10.62f0e5d6.pn"
},
{
"path": "docs/assets/js/160.0664832e.js",
"chars": 3013,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[160],{784:function(e,t,d){\"use strict\";d.r(t);var _=d(45),v=Object("
},
{
"path": "docs/assets/js/161.38ea1a1a.js",
"chars": 1830,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[161],{793:function(t,e,i){\"use strict\";i.r(e);var r=i(45),a=Object("
},
{
"path": "docs/assets/js/162.f96e9c80.js",
"chars": 1102,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[162],{799:function(t,r,l){\"use strict\";l.r(r);var e=l(45),i=Object("
},
{
"path": "docs/assets/js/163.cfb15292.js",
"chars": 7017,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[163],{800:function(t,r,a){\"use strict\";a.r(r);var s=a(45),e=Object("
},
{
"path": "docs/assets/js/164.46dd9498.js",
"chars": 1505,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[164],{806:function(t,e,r){\"use strict\";r.r(e);var i=r(45),a=Object("
},
{
"path": "docs/assets/js/165.86c8b8c1.js",
"chars": 10043,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[165],{810:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/166.3938fc5f.js",
"chars": 16920,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[166],{811:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/167.09cbb683.js",
"chars": 1144,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[167],{813:function(t,e,r){\"use strict\";r.r(e);var a=r(45),i=Object("
},
{
"path": "docs/assets/js/168.aab68e4f.js",
"chars": 12753,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[168],{818:function(t,a,n){\"use strict\";n.r(a);var s=n(45),e=Object("
},
{
"path": "docs/assets/js/169.b01d210b.js",
"chars": 1667,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[169],{819:function(t,r,e){\"use strict\";e.r(r);var a=e(45),i=Object("
},
{
"path": "docs/assets/js/17.59a459c4.js",
"chars": 67123,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[17],{590:function(t,a,s){t.exports=s.p+\"assets/img/3-17.a063365a.pn"
},
{
"path": "docs/assets/js/170.e68bf3e7.js",
"chars": 24862,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[170],{820:function(t,a,n){\"use strict\";n.r(a);var s=n(45),e=Object("
},
{
"path": "docs/assets/js/171.4f0e7d6b.js",
"chars": 20518,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[171],{821:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/172.ae542eee.js",
"chars": 7163,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[172],{823:function(t,r,e){\"use strict\";e.r(r);var l=e(45),u=Object("
},
{
"path": "docs/assets/js/173.c985ca5c.js",
"chars": 7163,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[173],{731:function(t,r,e){\"use strict\";e.r(r);var l=e(45),u=Object("
},
{
"path": "docs/assets/js/174.ece20a6a.js",
"chars": 7163,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[174],{824:function(t,r,e){\"use strict\";e.r(r);var l=e(45),u=Object("
},
{
"path": "docs/assets/js/175.891c0a2f.js",
"chars": 7368,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[175],{825:function(v,_,t){\"use strict\";t.r(_);var a=t(45),r=Object("
},
{
"path": "docs/assets/js/176.93a74e23.js",
"chars": 622,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[176],{826:function(t,a,e){\"use strict\";e.r(a);var r=e(45),s=Object("
},
{
"path": "docs/assets/js/177.20c492a7.js",
"chars": 6020,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[177],{827:function(t,e,r){\"use strict\";r.r(e);var l=r(45),u=Object("
},
{
"path": "docs/assets/js/178.a9c56f1f.js",
"chars": 1415,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[178],{828:function(t,e,l){\"use strict\";l.r(e);var p=l(45),i=Object("
},
{
"path": "docs/assets/js/179.b42bb139.js",
"chars": 12245,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[179],{829:function(t,r,e){\"use strict\";e.r(r);var o=e(45),a=Object("
},
{
"path": "docs/assets/js/18.318a79e1.js",
"chars": 103099,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[18],{605:function(t,s,n){t.exports=n.p+\"assets/img/3-24.68d03561.pn"
},
{
"path": "docs/assets/js/180.d048122a.js",
"chars": 71579,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[180],{941:function(t,a,s){\"use strict\";s.r(a);var n=s(45),r=Object("
},
{
"path": "docs/assets/js/181.e3633acb.js",
"chars": 861,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[181],{833:function(t,r,e){\"use strict\";e.r(r);var l=e(45),a=Object("
},
{
"path": "docs/assets/js/182.d30b9f69.js",
"chars": 20246,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[182],{835:function(t,a,e){\"use strict\";e.r(a);var s=e(45),v=Object("
},
{
"path": "docs/assets/js/183.802b20e7.js",
"chars": 1010,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[183],{839:function(t,r,e){\"use strict\";e.r(r);var a=e(45),o=Object("
},
{
"path": "docs/assets/js/184.90e5f242.js",
"chars": 4691,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[184],{840:function(e,t,v){\"use strict\";v.r(t);var _=v(45),a=Object("
},
{
"path": "docs/assets/js/185.5cca4d69.js",
"chars": 31261,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[185],{842:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/186.56dca3cc.js",
"chars": 53109,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[186],{843:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/187.405078e0.js",
"chars": 21177,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[187],{844:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/188.766e2a5e.js",
"chars": 1211,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[188],{846:function(t,e,o){\"use strict\";o.r(e);var r=o(45),a=Object("
},
{
"path": "docs/assets/js/189.c927c79a.js",
"chars": 28439,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[189],{849:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/19.175563ad.js",
"chars": 68295,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[19],{645:function(t,a,s){t.exports=s.p+\"assets/img/5-18.f83914b2.pn"
},
{
"path": "docs/assets/js/190.92378aeb.js",
"chars": 40477,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[190],{850:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/191.167ff3f3.js",
"chars": 12450,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[191],{852:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/192.53c8ab5d.js",
"chars": 1142,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[192],{853:function(t,e,r){\"use strict\";r.r(e);var a=r(45),l=Object("
},
{
"path": "docs/assets/js/193.05fa90e3.js",
"chars": 29966,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[193],{854:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/194.df254afb.js",
"chars": 7692,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[194],{857:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/195.1c40c74b.js",
"chars": 882,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[195],{858:function(t,a,l){\"use strict\";l.r(a);var e=l(45),r=Object("
},
{
"path": "docs/assets/js/196.3dbd36a7.js",
"chars": 34703,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[196],{859:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/197.7fd8856f.js",
"chars": 14750,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[197],{860:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/198.2a531f59.js",
"chars": 62085,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[198],{863:function(t,a,n){\"use strict\";n.r(a);var s=n(45),e=Object("
},
{
"path": "docs/assets/js/199.7dc1f153.js",
"chars": 3396,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[199],{864:function(t,e,r){\"use strict\";r.r(e);var a=r(45),I=Object("
},
{
"path": "docs/assets/js/2.f4fe4405.js",
"chars": 32158,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[2],{305:function(t,e,n){\"use strict\";n.d(e,\"d\",(function(){return i"
},
{
"path": "docs/assets/js/20.6c5c8986.js",
"chars": 70078,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[20],{651:function(t,n,a){t.exports=a.p+\"assets/img/5-10.62f0e5d6.pn"
},
{
"path": "docs/assets/js/200.92165c5b.js",
"chars": 907,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[200],{866:function(t,e,r){\"use strict\";r.r(e);var l=r(45),n=Object("
},
{
"path": "docs/assets/js/201.2953b2e7.js",
"chars": 2707,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[201],{868:function(t,s,n){\"use strict\";n.r(s);var a=n(45),e=Object("
},
{
"path": "docs/assets/js/202.de6ee6b8.js",
"chars": 32210,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[202],{870:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/203.ac627436.js",
"chars": 1360,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[203],{871:function(t,_,v){\"use strict\";v.r(_);var l=v(45),i=Object("
},
{
"path": "docs/assets/js/204.fb9289cb.js",
"chars": 21970,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[204],{874:function(t,s,a){\"use strict\";a.r(s);var r=a(45),n=Object("
},
{
"path": "docs/assets/js/205.90d0284c.js",
"chars": 53424,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[205],{875:function(t,s,a){\"use strict\";a.r(s);var n=a(45),p=Object("
},
{
"path": "docs/assets/js/206.2dbac1ab.js",
"chars": 43317,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[206],{877:function(t,e,a){\"use strict\";a.r(e);var s=a(45),n=Object("
},
{
"path": "docs/assets/js/207.d052f90b.js",
"chars": 1290,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[207],{881:function(t,r,e){\"use strict\";e.r(r);var a=e(45),l=Object("
},
{
"path": "docs/assets/js/208.0818aeb7.js",
"chars": 1551,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[208],{885:function(t,e,r){\"use strict\";r.r(e);var a=r(45),i=Object("
},
{
"path": "docs/assets/js/209.95753ceb.js",
"chars": 1091,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[209],{893:function(t,r,a){\"use strict\";a.r(r);var e=a(45),l=Object("
},
{
"path": "docs/assets/js/21.c0363ec5.js",
"chars": 79077,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[21],{411:function(t,a,s){t.exports=s.p+\"assets/img/3-1.587e85ad.png"
},
{
"path": "docs/assets/js/210.0c9a3892.js",
"chars": 3013,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[210],{896:function(e,t,d){\"use strict\";d.r(t);var _=d(45),v=Object("
},
{
"path": "docs/assets/js/211.43a19344.js",
"chars": 1851,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[211],{904:function(t,e,i){\"use strict\";i.r(e);var r=i(45),a=Object("
},
{
"path": "docs/assets/js/212.f9dee082.js",
"chars": 1120,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[212],{909:function(t,r,l){\"use strict\";l.r(r);var e=l(45),i=Object("
},
{
"path": "docs/assets/js/213.f55d441e.js",
"chars": 7017,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[213],{911:function(t,r,a){\"use strict\";a.r(r);var s=a(45),e=Object("
},
{
"path": "docs/assets/js/214.0836f39e.js",
"chars": 1523,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[214],{916:function(t,e,r){\"use strict\";r.r(e);var i=r(45),a=Object("
},
{
"path": "docs/assets/js/215.807d3ade.js",
"chars": 10043,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[215],{920:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/216.a7c3d830.js",
"chars": 16920,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[216],{921:function(t,s,a){\"use strict\";a.r(s);var n=a(45),e=Object("
},
{
"path": "docs/assets/js/217.ad95582b.js",
"chars": 1156,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[217],{923:function(t,e,r){\"use strict\";r.r(e);var a=r(45),i=Object("
},
{
"path": "docs/assets/js/218.059e8703.js",
"chars": 12753,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[218],{929:function(t,a,n){\"use strict\";n.r(a);var s=n(45),e=Object("
},
{
"path": "docs/assets/js/219.70d1d263.js",
"chars": 1688,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[219],{930:function(t,r,e){\"use strict\";e.r(r);var a=e(45),i=Object("
},
{
"path": "docs/assets/js/22.4fdaa56f.js",
"chars": 54209,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[22],{434:function(t,a,s){t.exports=s.p+\"assets/img/3-5.e95eb747.png"
},
{
"path": "docs/assets/js/220.69e2bb54.js",
"chars": 24862,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[220],{931:function(t,a,n){\"use strict\";n.r(a);var s=n(45),e=Object("
},
{
"path": "docs/assets/js/221.51aa50d8.js",
"chars": 20518,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[221],{932:function(t,a,s){\"use strict\";s.r(a);var n=s(45),e=Object("
},
{
"path": "docs/assets/js/222.8f955066.js",
"chars": 7163,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[222],{934:function(t,r,e){\"use strict\";e.r(r);var l=e(45),u=Object("
},
{
"path": "docs/assets/js/223.3230e791.js",
"chars": 7163,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[223],{831:function(t,r,e){\"use strict\";e.r(r);var l=e(45),u=Object("
},
{
"path": "docs/assets/js/224.35c9623f.js",
"chars": 7163,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[224],{935:function(t,r,e){\"use strict\";e.r(r);var l=e(45),u=Object("
},
{
"path": "docs/assets/js/225.8687c2ec.js",
"chars": 7360,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[225],{936:function(v,_,t){\"use strict\";t.r(_);var a=t(45),r=Object("
},
{
"path": "docs/assets/js/226.d982aa8d.js",
"chars": 622,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[226],{937:function(t,a,e){\"use strict\";e.r(a);var r=e(45),s=Object("
},
{
"path": "docs/assets/js/227.c297d2cb.js",
"chars": 6020,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[227],{938:function(t,e,r){\"use strict\";r.r(e);var l=r(45),u=Object("
},
{
"path": "docs/assets/js/228.4dcdd69c.js",
"chars": 1415,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[228],{939:function(t,e,l){\"use strict\";l.r(e);var p=l(45),i=Object("
},
{
"path": "docs/assets/js/229.91061a53.js",
"chars": 12563,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[229],{940:function(t,r,e){\"use strict\";e.r(r);var o=e(45),a=Object("
},
{
"path": "docs/assets/js/23.87c6db58.js",
"chars": 79077,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[23],{600:function(t,a,s){t.exports=s.p+\"assets/img/3-1.587e85ad.png"
},
{
"path": "docs/assets/js/24.bf1834df.js",
"chars": 54209,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[24],{613:function(t,a,s){t.exports=s.p+\"assets/img/3-5.e95eb747.png"
},
{
"path": "docs/assets/js/25.869317d7.js",
"chars": 118479,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[25],{388:function(t,s,n){t.exports=n.p+\"assets/img/15-1.c59fd39e.pn"
},
{
"path": "docs/assets/js/26.e656381b.js",
"chars": 20750,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[26],{394:function(t,s,a){t.exports=a.p+\"assets/img/2-8.89d0af83.png"
},
{
"path": "docs/assets/js/27.d1fa65c2.js",
"chars": 52179,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[27],{428:function(t,s){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/28.fbba6f6f.js",
"chars": 67436,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[28],{439:function(t,n){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/29.e809e77a.js",
"chars": 34261,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[29],{444:function(t,n,s){t.exports=s.p+\"assets/img/4-1.86777353.png"
},
{
"path": "docs/assets/js/3.cc1736a7.js",
"chars": 184924,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[3],{495:function(t,s,a){t.exports=a.p+\"assets/img/7-10.47645234.png"
},
{
"path": "docs/assets/js/30.b84a8f21.js",
"chars": 58419,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[30],{512:function(t,a){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/31.dca209c1.js",
"chars": 70646,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{516:function(t,s,a){t.exports=a.p+\"assets/img/8-2.52bd91bd.png"
},
{
"path": "docs/assets/js/32.c0efa5ac.js",
"chars": 118479,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[32],{560:function(t,s,n){t.exports=n.p+\"assets/img/15-1.c59fd39e.pn"
},
{
"path": "docs/assets/js/33.8b948e2d.js",
"chars": 20750,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[33],{569:function(t,s,a){t.exports=a.p+\"assets/img/2-8.89d0af83.png"
},
{
"path": "docs/assets/js/34.9dff7b9d.js",
"chars": 52179,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[34],{596:function(t,s){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/35.a9c7aa47.js",
"chars": 67436,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[35],{618:function(t,n){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/36.d9eeb78f.js",
"chars": 34261,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[36],{623:function(t,n,s){t.exports=s.p+\"assets/img/4-1.86777353.png"
},
{
"path": "docs/assets/js/37.7ecb6ef5.js",
"chars": 58419,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[37],{678:function(t,a){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/38.260a994c.js",
"chars": 70646,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[38],{682:function(t,s,a){t.exports=a.p+\"assets/img/8-2.52bd91bd.png"
},
{
"path": "docs/assets/js/39.c3d0c942.js",
"chars": 4299,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[39],{328:function(t,e,a){},335:function(t,e,a){t.exports=a.p+\"asset"
},
{
"path": "docs/assets/js/4.2eb3fd02.js",
"chars": 184924,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[4],{698:function(t,s,a){t.exports=a.p+\"assets/img/7-10.47645234.png"
},
{
"path": "docs/assets/js/40.31216541.js",
"chars": 24095,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[40],{383:function(t,e,n){t.exports=n.p+\"assets/img/14-0.bd5c2d9d.pn"
},
{
"path": "docs/assets/js/41.7b70eaf0.js",
"chars": 20892,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[41],{401:function(t,s,a){t.exports=a.p+\"assets/img/15-6.92dd6b15.pn"
},
{
"path": "docs/assets/js/42.057d8df6.js",
"chars": 16416,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[42],{398:function(t,s,a){t.exports=a.p+\"assets/img/2-5.7456ef8f.png"
},
{
"path": "docs/assets/js/43.b17a6aae.js",
"chars": 51976,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[43],{576:function(t,a,s){t.exports=s.p+\"assets/img/2-2.de6feb35.png"
},
{
"path": "docs/assets/js/44.5f61dab7.js",
"chars": 50878,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[44],{450:function(t,s,a){t.exports=a.p+\"assets/img/4-6.563f1017.png"
},
{
"path": "docs/assets/js/45.381b04c9.js",
"chars": 39566,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[45],{481:function(t,s,a){t.exports=a.p+\"assets/img/6-9.865c35f8.png"
},
{
"path": "docs/assets/js/46.1c911d7c.js",
"chars": 45793,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[46],{491:function(t,s,a){t.exports=a.p+\"assets/img/6-14.1b612437.pn"
},
{
"path": "docs/assets/js/47.692e2e27.js",
"chars": 80634,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[47],{529:function(t,s){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/48.6747a87a.js",
"chars": 119473,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[48],{522:function(t,n){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/49.e636869b.js",
"chars": 24095,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[49],{555:function(t,e,n){t.exports=n.p+\"assets/img/14-0.bd5c2d9d.pn"
},
{
"path": "docs/assets/js/5.0941abdb.js",
"chars": 39246,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[5],{361:function(t,e,r){t.exports=r.p+\"assets/img/1-2.c3960e42.png\""
},
{
"path": "docs/assets/js/50.57b758f4.js",
"chars": 20892,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[50],{564:function(t,s,a){t.exports=a.p+\"assets/img/15-6.92dd6b15.pn"
},
{
"path": "docs/assets/js/51.4c0d2270.js",
"chars": 16416,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[51],{573:function(t,s,a){t.exports=a.p+\"assets/img/2-5.7456ef8f.png"
},
{
"path": "docs/assets/js/52.61d5b4f1.js",
"chars": 51976,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[52],{579:function(t,a,s){t.exports=s.p+\"assets/img/2-2.de6feb35.png"
},
{
"path": "docs/assets/js/53.56438d06.js",
"chars": 50878,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[53],{629:function(t,s,a){t.exports=a.p+\"assets/img/4-6.563f1017.png"
},
{
"path": "docs/assets/js/54.4afb8008.js",
"chars": 39566,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[54],{659:function(t,s,a){t.exports=a.p+\"assets/img/6-9.865c35f8.png"
},
{
"path": "docs/assets/js/55.a7c27448.js",
"chars": 45793,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[55],{669:function(t,s,a){t.exports=a.p+\"assets/img/6-14.1b612437.pn"
},
{
"path": "docs/assets/js/56.8a9849da.js",
"chars": 80634,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[56],{688:function(t,s){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/57.371d9d12.js",
"chars": 119473,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[57],{691:function(t,n){t.exports=\"data:image/png;base64,iVBORw0KGgo"
},
{
"path": "docs/assets/js/58.3d2501b6.js",
"chars": 510,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[58],{330:function(t,e,n){},711:function(t,e,n){\"use strict\";n(330)}"
},
{
"path": "docs/assets/js/59.ab37b38d.js",
"chars": 600,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[59],{329:function(t,e,a){},710:function(t,e,a){\"use strict\";a(329)}"
},
{
"path": "docs/assets/js/6.15c5e328.js",
"chars": 39246,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[6],{533:function(t,e,r){t.exports=r.p+\"assets/img/1-2.c3960e42.png\""
},
{
"path": "docs/assets/js/60.7043cbf5.js",
"chars": 1823,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[60],{331:function(e,t,a){},712:function(e,t,a){\"use strict\";a(331)}"
},
{
"path": "docs/assets/js/61.470fa853.js",
"chars": 30075,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[61],{375:function(A,a,t){A.exports=t.p+\"assets/img/12-1.456f4488.pn"
},
{
"path": "docs/assets/js/62.b51637d5.js",
"chars": 127337,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[62],{380:function(t,s,n){t.exports=n.p+\"assets/img/12-4.49c3c9bf.jp"
},
{
"path": "docs/assets/js/63.ff70c9ee.js",
"chars": 19940,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[63],{448:function(t,s,n){t.exports=n.p+\"assets/img/4-9.7897e012.png"
},
{
"path": "docs/assets/js/64.4621481d.js",
"chars": 28385,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[64],{453:function(t,s,a){t.exports=a.p+\"assets/img/5-24.f113edc6.pn"
},
{
"path": "docs/assets/js/65.2d58a524.js",
"chars": 33680,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[65],{462:function(t,n,s){t.exports=s.p+\"assets/img/5-16.24d30a6e.pn"
},
{
"path": "docs/assets/js/66.5df03e62.js",
"chars": 19246,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[66],{479:function(t,s,n){t.exports=n.p+\"assets/img/6-12.d5a5a078.pn"
},
{
"path": "docs/assets/js/67.73c671d9.js",
"chars": 24492,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{507:function(t,s,a){t.exports=a.p+\"assets/img/7-8.c316cc7f.png"
},
{
"path": "docs/assets/js/68.4de1c271.js",
"chars": 76674,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[68],{510:function(t,s,a){t.exports=a.p+\"assets/img/7-2.20458eff.png"
},
{
"path": "docs/assets/js/69.46ed47d5.js",
"chars": 50836,
"preview": "(window.webpackJsonp=window.webpackJsonp||[]).push([[69],{525:function(t,a,s){t.exports=s.p+\"assets/img/9-1.67235fc3.png"
}
]
// ... and 499 more files (download for full content)
About this extraction
This page contains the full source code of the flutterchina/flutter-in-action GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 699 files (20.0 MB), approximately 5.3M tokens, and a symbol index with 356 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.