[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-9445":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":16,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":21,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":43,"readmeContent":44,"aiSummary":45,"trendingCount":15,"starSnapshotCount":15,"syncStatus":46,"lastSyncTime":47,"discoverSource":48},9445,"jh_flutter_demo","iotjin\u002Fjh_flutter_demo","iotjin","flutter项目- 实现一些常用效果、封装通用组件和工具类","https:\u002F\u002Fiotjin.github.io\u002Fjh_flutter_demo\u002F",null,"Dart",1094,235,12,0,1,20.12,"BSD 2-Clause \"Simplified\" License",false,"master",true,[23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42],"aes","alert","bar","dark-mode","dart","dialog","echarts","flutter","form","indexlist","ios","jh","listview","lottie","picker","pie","pop","toast","video-player","wechat","2026-06-12 02:02:07","# jh_flutter_demo\n\n[![Flutter version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFlutter%20version-3.32.0-brightgreen)](https:\u002F\u002Fflutter.dev)\n[![Dart version](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDart%20version-3.8.0-brightgreen)](https:\u002F\u002Fdart.dev)\n[![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-BSD--2--Clause-green)](LICENSE)\n[![GitHub release (latest by date including pre-releases)](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fv\u002Frelease\u002Fiotjin\u002Fjh_flutter_demo?include_prereleases)](https:\u002F\u002Fgithub.com\u002Fiotjin\u002Fjh_flutter_demo\u002Freleases\u002F)\n\n\n## English | [简体中文](README.zh-CN.md)\n\nA new Flutter project - implement common UI effects, encapsulate components and utils. \u003Cbr>\n\u003Cbr>\n\npwd：123456\n\nThe code is updated irregularly.\n\u003Cbr>\n\u003Cbr>\n\n## Online preview\n\n  https:\u002F\u002Fiotjin.github.io\u002Fjh_flutter_demo\n\n## Project environment\n\n* Flutter version 3.32.0\n* Dart version 3.8.0\n\n\n## Some UI effects implemented\n\n* Common framework construction, common base class implementation\n* Macro Definitions for Font, Color, Frame, String, etc.\n* Dio network request encapsulation\n* API interface management and data management\n* Modularized management of routes\n* Screen adaptation\n* Dark Mode adaptation\n* Theme switch\n* Internationalization (GetX)\n* Material3 adaptation\n* Components\n  * BaseAppBar、BaseTabBar、BaseRefreshView、BaseWebView\n  * Dialogs (center、bottom、toast、dialog、custom dialogs)\n  * Time、Date、single-column、multi-column and bottom single\u002Fmultiple pickers\n  * Cascading picker (multi-dimensional array or tree structure, supports search)\n  * JhForm form input (single row、multi-row input style、select style、setting style、login style)\n  * JhTopTabBar(navigation bar page switching)\n  * Gradient color AppBar, multi-line title AppBar\n  * Imitation of WeChat's upper-right corner pop-up box\n  * Countdown button\n  * APP update dialog\n  * Picture\u002Fvideo picker based on WeChat UI (supports taking pictures and recording videos)\n  * Picture\u002FVideo Browser\n  * Taking photos, local image selection, nine-grid display, full-screen image viewing\n  * Highlighting specified text in text\n  * Empty data and network exceptions\n  * Skeleton screen\n  * Horizontal sliding menu (same effect as Pinduoduo homepage, Taobao My channel)\n  * Carousel image(full screen, zoom)\n  * Shake, zoom, translate animation\n  * wave animation\n  * lottie animation\n  * tag view\n  * collapse view\n* Utils\n  * AES encryption\u002Fdecryption, MD5 encryption, base64 encoding\u002Fdecoding\n  * Local data AES encrypted storage\n  * Real-time network monitoring\n  * Getting device information, screen information, and notch screen detection\n  * Loading image resources, color settings\n  * Status bar settings\n  * QR code scanning and generation\n  * Navigation route jumping\n  * Listening for page appearance or disappearance\n  * Time format conversion\n  * String processing\n  * Random numbers\n  * Exit the APP\u002Fjump to the app store\n  * Debounce \u002F Throttle\n  * Jump tripartite map APP navigation\n* UI related\n  * ListView related (paging up\u002Fdown refresh, grouping up\u002Fdown refresh, group sticking)\n  * GridView related\n  * Chart related (dynamic loading of multiple charts, gradient line charts, mixed line and bar charts)\n  * Badges\n  * AppBar search and header search\n  * Animation (tag cloud)\n  * List slide button\n  * City selection list\n  * ListView\u002FGridView drag and drop sorting\n  * Rich text\n  * log in \u002F Register\n  * Version new features\n  * Checking for updates\n  * Imitation of WeChat UI (home page, address book, discovery, and personal center, etc.)\n  * AppBar image pull-down zoom and gradient effect (WeChat Sports Ranking List, personal homepage)\n  * WeChat friends circle and image browsing\n  * Cross-slide (personal center effect)\n\n\nNote:\n* Packaged components and utils in the `jh_common` folder\n* For more, please download the project to view\n\n\u003Cbr>\n\n\n## Precautions\n\n* There will be some freezes in debug mode, which is normal. A good experience requires a release package. iOS can execute the command `flutter build ios` to create a release version. Android can execute the command `flutter build apk` to create a release version.\n* iOS14 crashes when running on a real machine, which can be run on a real machine through `flutter run --release`\n\n## \u003Ca id=\"Update record\">\u003C\u002Fa> Update record\n\u003Cdetails open id=\"Important update\">\n  \u003Csummary>\u003Cstrong>Important update\u003C\u002Fstrong>\u003C\u002Fsummary>\n   \n```\n* v3.32.0  - Update pubspec library and flutter version（Flutter 3.32.0，Dart 3.8.0），Android 16 adaptation ，Java11 to Java17\n* v3.27.0  - Update pubspec library and flutter version（Flutter 3.27.0，Dart 3.6.0），Android 15 adaptation\n* v3.22.0  - Update pubspec library and flutter version（Flutter 3.22.0，Dart 3.4.0），Android 14 adaptation\n* v3.16.0  - Update pubspec library and flutter version（Flutter 3.16.0，Dart 3.2.0），iOS minimum build version changed to 12.0 , Material3 adaptation\n* v3.13.0  - Update pubspec library and flutter version（Flutter 3.13.0，Dart 3.1.0）\n* v3.10.0  - Update pubspec library and flutter version（Flutter 3.10.0，Dart 3.0.0）\n* v3.7.0  - Update pubspec library and flutter version（Flutter 3.7.0，Dart 2.19.0）\n* v3.3.0  - Update pubspec library and flutter version（Flutter 3.3.0，Dart 2.18.0），iOS minimum build version changed to 11.0\n* v3.0.0  - Update pubspec library and flutter version（Flutter 3.0.0，Dart 2.17.0）\n* v2.10.1 - Dark Mode adaptation\n* v2.10.0 - Update pubspec library and flutter version（Flutter 2.10.0，Dart 2.16.0）\n* v2.0.0  - Update Flutter SDK（ 2.0.3 ）and pubspec library\n* v1.0.0  - environment：Flutter version 1.22.3，Dart version 2.10.3\n```\n\u003C\u002Fdetails>\n\n\n## Appreciate the support\n\n\n* If you think it's good, or my open source project is helpful to you, you can click \"Star\" in the upper right corner to support it. Your support is my motivation, thank you 🙂\n* You can also scan the QR code below, invite the author to have a cup of milk tea 🧋\n\n\u003Cbr>\n\n\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002Fres\u002Fraw\u002Fmaster\u002Fweapp\u002FPayCode.jpg\" width=\"400\" height=\"400\">\n\n\u003Cbr>\n\n## Preview\n\nSome page effects are as follows:\n\n\n\u003Cbr>\n\u003Cbr>\n\u003Cbr>\n\n\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FLogin.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fwx\u002Fwx_home.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fwx\u002Fwx_contacts.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fwx\u002Fwx_discover.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fwx\u002Fwx_mine.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002FBaseAppBar.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhToast.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FBootomSheet.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhDialog.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhCascadePicker.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhCascadeTreePicker1.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhCascadeTreePicker2.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhMultiPicker.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FAlert_iOS.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002FPhotoSelect.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FForm\u002FJhLoginTextField.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FForm\u002FJhTextField.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FForm\u002FJhFormInputCell.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FForm\u002FJhFormSelectCell.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FForm\u002FJhSetCell.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FtopTabBar\u002FJhTopTabBar.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FtopTabBar\u002FJhTopTabBar_redDot.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fsearch\u002FnavSearch_3.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fsearch\u002FSearchTest4Page.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002FTagCloudWidget.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002FTagCloudWidget2.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FeChart.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhPopMenus1.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhPopMenus2.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FAlert\u002FJhPopMenus3.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002Fimg_pull_down_big.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002Fimg_pull_down_big2.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002Fimg_pull_down_big.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fwx\u002Fhome\u002Fwx_motion_top.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fwx\u002Fdiscover\u002Fwx_friendsCircle.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Ftheme.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002FJhAssetPicker.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FBase\u002FBaseRefreshView.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FBase\u002FBaseRefreshViewShimmer.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FBase\u002FBaseRefreshViewFixed.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FBase\u002FBaseRefreshViewFollow.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fcomponents\u002FJhSlideMenuView.jpg\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002Fcomponents\u002FJhSwiperView.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FtopTabBar\u002FPersonalCenterPage2.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FtopTabBar\u002FPersonalCenterPage3.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FtopTabBar\u002FPersonalCenterPage5.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002FWavePage.gif\" width=\"208\" height=\"404\">\u003Cimg src=\"https:\u002F\u002Fgitee.com\u002Fiotjh\u002FPicture\u002Fraw\u002Fmaster\u002FFlutterDemoScreenShot\u002FOther\u002FLottiePage.gif\" width=\"208\" height=\"404\">\n\n\n\n\n\n\n\n\u003Cbr>\n\u003Cbr>\n\u003Cbr>\n\n## WeChat UI：\n\n| ![](.\u002FScreenShot\u002Fwx\u002Fwx_home.jpg)    |  ![](.\u002FScreenShot\u002Fwx\u002Fwx_contacts.jpg)    | ![](.\u002FScreenShot\u002Fwx\u002Fwx_discover.jpg)   |  ![](.\u002FScreenShot\u002Fwx\u002Fwx_mine.jpg)   |\n| :--------------------------------: | :---------------------------------: | :-------------------------------: | :-------------------------------:  |\n| ![](.\u002FScreenShot\u002Fwx\u002Fhome\u002Fwx_motion.jpg)            |  ![](.\u002FScreenShot\u002Fwx\u002Fhome\u002Fwx_motion_top.gif)        | ![](.\u002FScreenShot\u002Fwx\u002Fhome\u002Fwx_subscribeNum.jpg)    |  ![](.\u002FScreenShot\u002Fwx\u002Fhome\u002Fwx_subscribeNumList.jpg)       |\n|  ![](.\u002FScreenShot\u002Fwx\u002Fhome\u002Fwx_qqMessage.jpg)   |  ![](.\u002FScreenShot\u002Fwx\u002Fcontacts\u002Fwx_addFriend.jpg)    | ![](.\u002FScreenShot\u002Fwx\u002Fcontacts\u002Fwx_userInfo.jpg)          |  ![](.\u002FScreenShot\u002Fwx\u002Fcontacts\u002Fwx_newFriend.jpg)               | \n| ![](.\u002FScreenShot\u002Fwx\u002Fcontacts\u002Fwx_infoSet.jpg)       |  ![](.\u002FScreenShot\u002Fwx\u002Fmine\u002Fwx_personInfo.jpg)         | ![](.\u002FScreenShot\u002Fwx\u002Fmine\u002Fwx_pay.jpg)                        |  ![](.\u002FScreenShot\u002Fwx\u002Fmine\u002Fwx_payManager.jpg)                  |\n| ![](.\u002FScreenShot\u002Fwx\u002Fdiscover\u002Fwx_friendsCircle.gif)    |  ![](.\u002F)   | ![](.\u002F)  | ![](.\u002F)  |\n\n\u003Cbr>\n\n## \u003Ca id=\"Licenses\">\u003C\u002Fa> Licenses\n\u003Cdetails open id=\"Licenses\">\n  \u003Csummary>\u003Cstrong>Licenses\u003C\u002Fstrong>\u003C\u002Fsummary>\n\n```\n\nBSD 2-Clause License\n\nCopyright (c) 2020, iotjin\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n1. Redistributions of source code must retain the above copyright notice, this\n   list of conditions and the following disclaimer.\n\n2. Redistributions in binary form must reproduce the above copyright notice,\n   this list of conditions and the following disclaimer in the documentation\n   and\u002For other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\n```\n\n\u003C\u002Fdetails>\n","jh_flutter_demo 是一个基于 Flutter 的项目，旨在实现一些常用的效果并封装通用组件和工具类。该项目使用 Dart 语言开发，提供了丰富的 UI 效果和实用工具，包括但不限于：基础框架构建、网络请求封装、API 接口管理、路由模块化管理、屏幕适配、暗黑模式支持、主题切换、国际化支持以及 Material3 适配等。同时，它还提供了一系列的自定义组件，如各式各样的对话框、表单输入样式、选择器等，并集成了诸如 AES 加密解密、MD5 加密、Base64 编解码等功能性工具。此项目非常适合用于快速搭建具有多种常见功能需求的 Flutter 应用程序场景中，尤其是需要高度定制化UI与便捷开发体验的应用。",2,"2026-06-11 03:22:40","top_language"]