├── .gitignore
├── .metadata
├── LICENSE
├── README.md
├── README.zh-CN.md
├── ScreenShot
├── Alert_iOS.gif
├── BaseAppBar.gif
├── BaseRefreshView.gif
├── BaseRefreshViewFixed.gif
├── BaseRefreshViewFollow.gif
├── BaseRefreshViewShimmer.gif
├── BootomSheet.gif
├── JhAssetPicker.gif
├── JhCascadePicker.gif
├── JhCascadeTreePicker1.gif
├── JhCascadeTreePicker2.gif
├── JhDialog.gif
├── JhFormInputCell.jpg
├── JhFormSelectCell.jpg
├── JhLoginTextField.jpg
├── JhMultiPicker.gif
├── JhPopMenus1.jpg
├── JhPopMenus2.jpg
├── JhPopMenus3.jpg
├── JhSetCell.jpg
├── JhSlideMenuView.jpg
├── JhSwiperView.gif
├── JhTagView.jpg
├── JhTextField.jpg
├── JhToast.gif
├── JhTopTabBar.jpg
├── JhTopTabBar_redDot.jpg
├── Login.gif
├── LottiePage.gif
├── PersonalCenterPage2.gif
├── PersonalCenterPage3.gif
├── PersonalCenterPage5.gif
├── PhotoSelect.gif
├── SearchTest4Page.gif
├── TagCloudWidget.gif
├── TagCloudWidget2.gif
├── WavePage.gif
├── eChart.gif
├── img_pull_down_big.gif
├── img_pull_down_big2.gif
├── navSearch_3.jpg
├── theme.gif
└── wx
│ ├── contacts
│ ├── wx_addFriend.jpg
│ ├── wx_infoSet.jpg
│ ├── wx_newFriend.jpg
│ └── wx_userInfo.jpg
│ ├── discover
│ └── wx_friendsCircle.gif
│ ├── home
│ ├── wx_motion.jpg
│ ├── wx_motion_top.gif
│ ├── wx_qqMessage.jpg
│ ├── wx_subscribeNum.jpg
│ └── wx_subscribeNumList.jpg
│ ├── mine
│ ├── wx_pay.jpg
│ ├── wx_payManager.jpg
│ └── wx_personInfo.jpg
│ ├── wx_contacts.jpg
│ ├── wx_discover.jpg
│ ├── wx_home.jpg
│ └── wx_mine.jpg
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ ├── key
│ │ ├── key.jks
│ │ └── key.properties
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── java
│ │ │ └── com
│ │ │ │ └── example
│ │ │ │ └── jh_flutter_demo
│ │ │ │ └── MainActivity.java
│ │ └── res
│ │ │ ├── drawable
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-hdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-mdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xhdpi
│ │ │ └── ic_launcher.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launch_image.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── launch_image.png
│ │ │ ├── values
│ │ │ └── styles.xml
│ │ │ └── xml
│ │ │ └── filepaths.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── images
│ ├── PayCode.jpg
│ ├── common
│ │ ├── empty
│ │ │ ├── ic_empty.png
│ │ │ ├── ic_netErr.png
│ │ │ ├── 空.png
│ │ │ └── 网络错误.png
│ │ ├── ic_arrow_black.png
│ │ ├── ic_arrow_gray.png
│ │ ├── ic_arrow_white.png
│ │ ├── ic_nav_back_black.png
│ │ └── ic_nav_back_white.png
│ ├── demos
│ │ ├── symptom_ball_shadow@3x.png
│ │ ├── symptom_ballwithflare@3x.png
│ │ └── symptom_light@3x.png
│ ├── funcMenu
│ │ ├── 个人护理.png
│ │ ├── 休闲零食.png
│ │ ├── 充值中心.png
│ │ ├── 分类.png
│ │ ├── 厨房日用.png
│ │ ├── 外卖.png
│ │ ├── 天猫.png
│ │ ├── 天猫国际.png
│ │ ├── 天猫超市.png
│ │ ├── 奶品水饮.png
│ │ ├── 家清家居.png
│ │ ├── 拍卖.png
│ │ ├── 新人包邮.png
│ │ ├── 方便速食.png
│ │ ├── 母婴用品.png
│ │ ├── 粮油米面.png
│ │ ├── 聚划算.png
│ │ ├── 进口好货.png
│ │ ├── 领金币.png
│ │ └── 飞猪旅行.png
│ ├── ic_about.png
│ ├── ic_accountSafe.png
│ ├── ic_addFriends.png
│ ├── ic_comingSoon.png
│ ├── ic_demo1.png
│ ├── ic_demo2.png
│ ├── ic_exit.png
│ ├── ic_gengduo.png
│ ├── ic_more_black.png
│ ├── ic_more_white.png
│ ├── ic_nav_add.png
│ ├── ic_placeholder.png
│ ├── ic_placeholder2.png
│ ├── ic_placeholder3.png
│ ├── ic_pwd_close.png
│ ├── ic_pwd_open.png
│ ├── ic_saoyisao.png
│ ├── ic_set_black.png
│ ├── ic_set_gray.png
│ ├── ic_sort.png
│ ├── ic_update_head.png
│ ├── ic_update_head2.png
│ ├── ic_update_head3.png
│ ├── ic_update_head4.png
│ ├── loading.png
│ ├── lufei.png
│ ├── newFeature
│ │ ├── ad_background-667h@2x.png
│ │ ├── newFeature_0.jpeg
│ │ ├── newFeature_1.jpeg
│ │ ├── newFeature_2.jpeg
│ │ ├── newFeature_3.jpeg
│ │ └── start-now.jpg
│ ├── picture
│ │ ├── picture0.jpeg
│ │ ├── picture1.jpeg
│ │ ├── picture2.jpeg
│ │ ├── picture3.jpeg
│ │ ├── picture5.jpeg
│ │ ├── picture6.jpg
│ │ ├── picture7.jpg
│ │ ├── picture8.jpg
│ │ ├── picture9.jpg
│ │ ├── touxiang.jpeg
│ │ ├── touxiang_1.jpeg
│ │ ├── touxiang_2.jpeg
│ │ ├── touxiang_3.jpeg
│ │ ├── touxiang_4.jpeg
│ │ ├── touxiang_5.jpeg
│ │ ├── touxiang_6.jpg
│ │ └── tubiao.png
│ ├── popMenus
│ │ ├── ic_add.png
│ │ ├── ic_chat.png
│ │ ├── ic_menu_up_arrow.png
│ │ ├── ic_pay.png
│ │ ├── ic_scan.png
│ │ └── shoufukuan.png
│ ├── search.png
│ ├── selectPhoto_add.png
│ ├── selectPhoto_close.png
│ ├── service
│ │ ├── bg_service_baoxiu.png
│ │ ├── bg_service_fuwufankui.png
│ │ ├── bg_service_gongdan.png
│ │ ├── icon_baoxiu.png
│ │ ├── icon_fuwufankui.png
│ │ ├── icon_gongdan.png
│ │ └── lufei.png
│ ├── set.png
│ ├── shezhi.png
│ ├── swiper
│ │ ├── swiper_0.jpg
│ │ ├── swiper_1.jpg
│ │ ├── swiper_2.jpg
│ │ ├── swiper_3.jpg
│ │ ├── swiper_4.jpg
│ │ ├── swiper_5.jpg
│ │ ├── swiper_6.jpeg
│ │ ├── swiper_gif0.gif
│ │ ├── swiper_gif2.gif
│ │ ├── swiper_gif3.gif
│ │ ├── swiper_gif4.gif
│ │ └── swiper_gif5.gif
│ ├── tab
│ │ ├── nav_tab_1.png
│ │ ├── nav_tab_1_on.png
│ │ ├── nav_tab_2.png
│ │ ├── nav_tab_2_on.png
│ │ ├── nav_tab_3.png
│ │ ├── nav_tab_3_on.png
│ │ ├── nav_tab_4.png
│ │ └── nav_tab_4_on.png
│ ├── tianjiahaoyou.png
│ └── xi.png
├── lottie
│ ├── Aniki Hamster.json
│ ├── 星球.json
│ └── 首页.json
└── wechat
│ ├── contacts
│ ├── add
│ │ ├── add_friend_icon_addgroup_36x36_@2x.png
│ │ ├── add_friend_icon_addgroup_36x36_@3x.png
│ │ ├── add_friend_icon_contacts_36x36_@2x.png
│ │ ├── add_friend_icon_contacts_36x36_@3x.png
│ │ ├── add_friend_icon_invite_36x36_@2x.png
│ │ ├── add_friend_icon_invite_36x36_@3x.png
│ │ ├── add_friend_icon_newgroup_36x36_@2x.png
│ │ ├── add_friend_icon_newgroup_36x36_@3x.png
│ │ ├── add_friend_icon_offical_36x36_@2x.png
│ │ ├── add_friend_icon_offical_36x36_@3x.png
│ │ ├── add_friend_icon_reda_36x36_@2x.png
│ │ ├── add_friend_icon_reda_36x36_@3x.png
│ │ ├── add_friend_icon_scanqr_36x36_@2x.png
│ │ ├── add_friend_icon_scanqr_36x36_@3x.png
│ │ ├── add_friend_icon_search_36x36_@2x.png
│ │ ├── add_friend_icon_search_36x36_@3x.png
│ │ ├── add_friend_icon_search_wework_36x36_@1x.png
│ │ ├── add_friend_icon_search_wework_40x40_@2x.png
│ │ ├── add_friend_icon_search_wework_40x40_@3x.png
│ │ ├── add_friend_myQR_20x20_@2x.png
│ │ └── add_friend_searchicon_36x30_@2x.png
│ ├── contact_index_bar_bubble_0.png
│ ├── ic_favorite.png
│ ├── ic_group_chat.png
│ ├── ic_index_bar_bubble_gray.png
│ ├── ic_index_bar_bubble_white.png
│ ├── ic_new_friend.png
│ ├── ic_public_account.png
│ ├── ic_shipintonghua.png
│ ├── ic_tag.png
│ └── ic_xinxi.png
│ ├── discover
│ ├── friends
│ │ ├── IMG_3362.JPG
│ │ ├── image1.jpeg
│ │ ├── image2.jpeg
│ │ ├── image3.jpeg
│ │ ├── image4.jpeg
│ │ ├── image5.jpeg
│ │ ├── image6.jpeg
│ │ ├── image7.jpeg
│ │ ├── image8.jpeg
│ │ ├── image9.jpeg
│ │ ├── img1.jpg
│ │ ├── img10.jpg
│ │ ├── img2.jpg
│ │ ├── img3.jpg
│ │ ├── img4.jpg
│ │ ├── img5.jpg
│ │ ├── img6.jpg
│ │ ├── img7.jpg
│ │ ├── img8.jpg
│ │ ├── img9.jpg
│ │ ├── wx_bg0.jpeg
│ │ ├── wx_bg1.jpg
│ │ ├── wx_img10.JPG
│ │ ├── wx_img11.JPG
│ │ ├── wx_img12.JPG
│ │ ├── wx_img13.JPG
│ │ ├── wx_img14.JPG
│ │ ├── wx_img15.JPG
│ │ ├── wx_img16.JPG
│ │ ├── wx_img17.JPG
│ │ ├── wx_img18.JPG
│ │ ├── wx_img19.JPG
│ │ ├── wx_img2.JPG
│ │ ├── wx_img20.JPG
│ │ ├── wx_img21.JPG
│ │ ├── wx_img22.JPG
│ │ ├── wx_img23.JPG
│ │ ├── wx_img24.JPG
│ │ ├── wx_img25.JPG
│ │ ├── wx_img26.JPG
│ │ ├── wx_img27.JPG
│ │ ├── wx_img28.JPG
│ │ ├── wx_img29.JPG
│ │ ├── wx_img3.JPG
│ │ ├── wx_img30.JPG
│ │ ├── wx_img31.JPG
│ │ ├── wx_img32.JPG
│ │ ├── wx_img33.JPG
│ │ ├── wx_img4.JPG
│ │ ├── wx_img5.JPG
│ │ ├── wx_img6.JPG
│ │ ├── wx_img7.JPG
│ │ ├── wx_img8.JPG
│ │ └── wx_img9.JPG
│ ├── ic_bottle_msg.png
│ ├── ic_camera.png
│ ├── ic_diandian.png
│ ├── ic_feeds.png
│ ├── ic_fengchao.png
│ ├── ic_game_entry.png
│ ├── ic_mini_program.png
│ ├── ic_people_nearby.png
│ ├── ic_quick_scan.png
│ ├── ic_quick_search.png
│ ├── ic_shake_phone.png
│ ├── ic_shopping.png
│ ├── ic_social_circle.png
│ └── ic_video_number.png
│ ├── home
│ ├── Ic_email.png
│ ├── ic_about.png
│ ├── ic_file_transfer.png
│ ├── ic_qrcode_preview_tiny.png
│ ├── ic_subscription_number.png
│ ├── ic_top.jpg
│ ├── ic_tx_news.png
│ ├── ic_wx_games.png
│ ├── wechat_game.png
│ └── wechat_motion.png
│ ├── mine
│ ├── About_WeChat_AppIcon_64x64_@2x.png
│ ├── About_WeChat_AppIcon_64x64_@3x.png
│ ├── default_nor_avatar.png
│ ├── ic_about.png
│ ├── ic_album.png
│ ├── ic_cards_wallet.png
│ ├── ic_collections.png
│ ├── ic_emotions.png
│ ├── ic_qianbao.png
│ ├── ic_setting_myQR.png
│ ├── ic_settings.png
│ ├── ic_shoufukuan.png
│ └── ic_wallet.png
│ └── other
│ ├── AppIcon_1024x1024_@1x.png
│ ├── AppIcon_108x108_@2x.png
│ ├── AppIcon_24x24_@2x.png
│ ├── AppIcon_27x27_@2x.png
│ ├── AppIcon_29x29_@2x.png
│ ├── AppIcon_29x29_@3x.png
│ ├── AppIcon_40x40_@2x.png
│ ├── AppIcon_44x44_@2x.png
│ ├── AppIcon_50x50_@2x.png
│ ├── AppIcon_60x60_@2x.png
│ ├── AppIcon_60x60_@3x.png
│ ├── AppIcon_76x76_@1x.png
│ ├── AppIcon_76x76_@2x.png
│ ├── AppIcon_83x83_@2x.png
│ ├── AppIcon_86x86_@2x.png
│ ├── AppIcon_90x90_@2x.png
│ ├── AppIcon_98x98_@2x.png
│ ├── DeviceRankNoLikeIcon_96x96_@2x.png
│ ├── DownVideo_169x137_@2x.png
│ ├── News_VideoBIG_31x31_@2x.png
│ └── News_VideoSmall_16x16_@2x.png
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.h
│ ├── AppDelegate.m
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Icon-App-1024x1024@1x.png
│ │ ├── Icon-App-20x20@1x.png
│ │ ├── Icon-App-20x20@2x.png
│ │ ├── Icon-App-20x20@3x.png
│ │ ├── Icon-App-29x29@1x.png
│ │ ├── Icon-App-29x29@2x.png
│ │ ├── Icon-App-29x29@3x.png
│ │ ├── Icon-App-40x40@1x.png
│ │ ├── Icon-App-40x40@2x.png
│ │ ├── Icon-App-40x40@3x.png
│ │ ├── Icon-App-60x60@2x.png
│ │ ├── Icon-App-60x60@3x.png
│ │ ├── Icon-App-76x76@1x.png
│ │ ├── Icon-App-76x76@2x.png
│ │ └── Icon-App-83.5x83.5@2x.png
│ ├── Contents.json
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage_6.png
│ │ ├── LaunchImage_6@2x.png
│ │ ├── LaunchImage_6@3x.png
│ │ └── README.md
│ ├── Info.plist
│ ├── Launch Screen.storyboard
│ ├── LaunchImage_6.png
│ ├── Main.storyboard
│ └── main.m
├── lib
├── base_appbar.dart
├── data
│ └── data_utils.dart
├── demos
│ ├── alert
│ │ ├── alert_demo_list_page.dart
│ │ ├── alert_test.dart
│ │ ├── bottom_sheet_test.dart
│ │ ├── cascade_picker_test.dart
│ │ ├── cascade_tree_picker_test.dart
│ │ ├── dialog_test_page.dart
│ │ └── toast
│ │ │ ├── toast_demo_list_page.dart
│ │ │ └── toast_test.dart
│ ├── base
│ │ ├── base_demo_list_page.dart
│ │ ├── base_gridview_shimmer_test_page.dart
│ │ ├── base_listview_shimmer_test_page.dart
│ │ ├── base_refresh_view_header_fixed_page.dart
│ │ ├── base_refresh_view_header_follow_page.dart
│ │ ├── base_refresh_view_test_page.dart
│ │ ├── empty_demo_list_page.dart
│ │ └── nav_test.dart
│ ├── chart
│ │ ├── chart_demo_list_page.dart
│ │ ├── chart_page1.dart
│ │ ├── chart_page2.dart
│ │ ├── echarts
│ │ │ ├── echart_page1.dart
│ │ │ ├── echart_page2.dart
│ │ │ ├── echart_page3.dart
│ │ │ └── echart_page4.dart
│ │ ├── graphic
│ │ │ ├── data.dart
│ │ │ ├── echarts_data.dart
│ │ │ ├── graphic_bar_page.dart
│ │ │ ├── graphic_line_page.dart
│ │ │ └── graphic_pie_page.dart
│ │ ├── mp_chart_bar_page1.dart
│ │ ├── mp_chart_combined_page.dart
│ │ └── mp_chart_line_page1.dart
│ ├── components
│ │ ├── collapse_view_test_page.dart
│ │ ├── component_demo_list_page.dart
│ │ ├── slide_menu_test_page.dart
│ │ └── tag_view_test_page.dart
│ ├── demo_list_page.dart
│ ├── demos_router.dart
│ ├── dragSort
│ │ ├── drag_sort_demo_list_page.dart
│ │ ├── gridview_drag_sort_page.dart
│ │ ├── listview_drag_sort_page.dart
│ │ └── listview_drag_sort_page2.dart
│ ├── form
│ │ ├── form_demo_list_page.dart
│ │ ├── form_input_cell_test_page.dart
│ │ ├── form_select_cell_test_page.dart
│ │ ├── form_test_page.dart
│ │ ├── form_validate_page.dart
│ │ ├── input_text_field_test_page.dart
│ │ ├── login_text_field_test_page.dart
│ │ └── set_cell_test_page.dart
│ ├── gridView
│ │ ├── gridview_demo_list_page.dart
│ │ ├── gridview_test1.dart
│ │ ├── gridview_test2.dart
│ │ ├── gridview_test3.dart
│ │ ├── gridview_test4.dart
│ │ └── gridview_test5.dart
│ ├── http
│ │ ├── http_demo_list_page.dart
│ │ ├── http_page_test_cell.dart
│ │ ├── http_page_test_header_follow_page.dart
│ │ ├── http_page_test_model.dart
│ │ ├── http_page_test_page.dart
│ │ └── http_test1_page.dart
│ ├── listView
│ │ ├── listview_demo_list_page.dart
│ │ ├── listview_group_model.dart
│ │ ├── listview_group_page.dart
│ │ ├── listview_group_page2.dart
│ │ ├── listview_group_page3.dart
│ │ ├── listview_header_page.dart
│ │ ├── listview_test.dart
│ │ ├── listview_test2.dart
│ │ ├── listview_test3.dart
│ │ ├── listview_test4.dart
│ │ ├── listview_test5.dart
│ │ ├── listview_test_card.dart
│ │ ├── listview_test_custom_cell.dart
│ │ ├── listview_test_custom_vc.dart
│ │ └── listview_test_pull_down_vc.dart
│ ├── other
│ │ ├── aes_test_page.dart
│ │ ├── animation
│ │ │ ├── animation_demo_list_page.dart
│ │ │ ├── animation_test_page.dart
│ │ │ ├── ball_3d_page.dart
│ │ │ ├── ball_3d_page2.dart
│ │ │ ├── ball_3d_page3.dart
│ │ │ ├── ball_3d_page4.dart
│ │ │ ├── lottie_page.dart
│ │ │ ├── tag_cloud_page.dart
│ │ │ ├── wave_page.dart
│ │ │ └── xball_view.dart
│ │ ├── city_select_list_page.dart
│ │ ├── device_info_test.dart
│ │ ├── form_test.dart
│ │ ├── map_jump_test_page.dart
│ │ ├── permission_test.dart
│ │ ├── photo_select_test.dart
│ │ ├── qr_code_test.dart
│ │ ├── red_dot_page.dart
│ │ └── sideslip_test_page.dart
│ ├── route_test_page
│ │ ├── pass_value_page.dart
│ │ ├── pass_value_page2.dart
│ │ ├── pass_value_page3.dart
│ │ ├── route_demo_list_page.dart
│ │ ├── route_test_page1.dart
│ │ └── route_test_page2.dart
│ ├── search
│ │ ├── debounce_throttle_test_page.dart
│ │ ├── search_demo_list_page.dart
│ │ ├── search_test1_page.dart
│ │ ├── search_test2_page.dart
│ │ ├── search_test3_page.dart
│ │ ├── search_test4_page.dart
│ │ └── search_test5_page.dart
│ ├── swiper
│ │ ├── swiper_demo_list_page.dart
│ │ ├── swiper_test1_page.dart
│ │ ├── swiper_test2_page.dart
│ │ ├── swiper_test3_page.dart
│ │ ├── swiper_test4_page.dart
│ │ ├── swiper_test5_page.dart
│ │ ├── swiper_test6_page.dart
│ │ └── swiper_test7_page.dart
│ ├── topTabBar
│ │ ├── content_page.dart
│ │ ├── personal_center_page1.dart
│ │ ├── personal_center_page2.dart
│ │ ├── personal_center_page3.dart
│ │ ├── personal_center_page4.dart
│ │ ├── personal_center_page5.dart
│ │ ├── top_tabbar_demo_list_page.dart
│ │ ├── top_tabbar_test1_page.dart
│ │ ├── top_tabbar_test2_page.dart
│ │ ├── top_tabbar_test3_page.dart
│ │ └── top_tabbar_test4_page.dart
│ └── ui
│ │ ├── grammar_test_page.dart
│ │ ├── scroll_page.dart
│ │ ├── ui_demo_list_page.dart
│ │ ├── ui_page.dart
│ │ ├── ui_page2.dart
│ │ └── ui_page3.dart
├── http
│ ├── apis.dart
│ ├── dio_utils.dart
│ ├── error_handle.dart
│ ├── http_utils.dart
│ ├── intercept.dart
│ └── log_utils.dart
├── intl
│ ├── intl_config.dart
│ ├── intl_en.dart
│ ├── intl_zh.dart
│ └── locale_utils.dart
├── jh_common
│ ├── jh_form
│ │ ├── jh_count_down_btn.dart
│ │ ├── jh_form.dart
│ │ ├── jh_form_input_cell.dart
│ │ ├── jh_form_select_cell.dart
│ │ ├── jh_form_utils.dart
│ │ ├── jh_keyboard_utils.dart
│ │ ├── jh_login_text_field.dart
│ │ ├── jh_searchbar.dart
│ │ ├── jh_set_cell.dart
│ │ └── jh_text_field.dart
│ ├── utils
│ │ ├── jh_color_utils.dart
│ │ ├── jh_common_utils.dart
│ │ ├── jh_device_utils.dart
│ │ ├── jh_encrypt_utils.dart
│ │ ├── jh_extension.dart
│ │ ├── jh_image_utils.dart
│ │ ├── jh_map_utils.dart
│ │ ├── jh_monitor_network_utils.dart
│ │ ├── jh_nav_router_utils.dart
│ │ ├── jh_permission_utils.dart
│ │ ├── jh_qr_code_utils.dart
│ │ ├── jh_screen_utils.dart
│ │ ├── jh_status_bar_utils.dart
│ │ ├── jh_storage_utils.dart
│ │ ├── jh_string_utils.dart
│ │ ├── jh_theme_utils.dart
│ │ ├── jh_time_utils.dart
│ │ ├── jh_utc_time_utils.dart
│ │ └── jh_version_utils.dart
│ └── widgets
│ │ ├── base_refresh_view.dart
│ │ ├── base_web_view.dart
│ │ ├── click_item.dart
│ │ ├── gradient_appbar.dart
│ │ ├── jh_alert.dart
│ │ ├── jh_asset_picker.dart
│ │ ├── jh_badge.dart
│ │ ├── jh_bottom_sheet.dart
│ │ ├── jh_button.dart
│ │ ├── jh_cascade_picker.dart
│ │ ├── jh_cascade_tree_picker.dart
│ │ ├── jh_collapse_view.dart
│ │ ├── jh_dialog.dart
│ │ ├── jh_empty_view.dart
│ │ ├── jh_form.dart
│ │ ├── jh_gradient_btn.dart
│ │ ├── jh_highlight_text.dart
│ │ ├── jh_multi_picker.dart
│ │ ├── jh_network_image.dart
│ │ ├── jh_nine_picture.dart
│ │ ├── jh_photo_allscreen_show.dart
│ │ ├── jh_photo_allscreen_show2.dart
│ │ ├── jh_photo_browser.dart
│ │ ├── jh_photo_picker.dart
│ │ ├── jh_photo_picker2.dart
│ │ ├── jh_picker_tool.dart
│ │ ├── jh_pop_menus.dart
│ │ ├── jh_progress_hud.dart
│ │ ├── jh_pulse_animation_view.dart
│ │ ├── jh_pulse_animation_view2.dart
│ │ ├── jh_scale_animation_view.dart
│ │ ├── jh_scale_animation_view2.dart
│ │ ├── jh_scrollview.dart
│ │ ├── jh_shake_animation_view.dart
│ │ ├── jh_shimmer_view.dart
│ │ ├── jh_slide_menu_view.dart
│ │ ├── jh_swiper_view.dart
│ │ ├── jh_tabbar.dart
│ │ ├── jh_tag_view.dart
│ │ ├── jh_text_list.dart
│ │ ├── jh_top_tabbar.dart
│ │ ├── jh_update_dialog.dart
│ │ ├── mobile_scanner_page.dart
│ │ ├── progress_dialog.dart
│ │ ├── qr_code_grid_scanner_page.dart
│ │ ├── qr_code_scanner_page.dart
│ │ └── tag_cloud_widget.dart
├── main.dart
├── project
│ ├── base_tabbar.dart
│ ├── configs
│ │ ├── colors.dart
│ │ ├── common.dart
│ │ ├── dimens.dart
│ │ ├── gaps.dart
│ │ ├── project_config.dart
│ │ ├── strings.dart
│ │ └── styles.dart
│ ├── four
│ │ ├── four_page.dart
│ │ ├── models
│ │ │ └── wx_pay_model.dart
│ │ ├── pages
│ │ │ ├── about_ios_page.dart
│ │ │ ├── about_page.dart
│ │ │ ├── fade_app_bar_page.dart
│ │ │ ├── img_pull_down_big_page.dart
│ │ │ ├── img_pull_down_big_page2.dart
│ │ │ ├── img_pull_down_big_page3.dart
│ │ │ ├── info_page.dart
│ │ │ ├── locale_page.dart
│ │ │ ├── mine_page.dart
│ │ │ ├── person_center_page.dart
│ │ │ ├── person_center_page2.dart
│ │ │ ├── set_page.dart
│ │ │ ├── theme_page.dart
│ │ │ ├── wx_mine_page.dart
│ │ │ ├── wx_pay_manager_page.dart
│ │ │ ├── wx_pay_page.dart
│ │ │ └── wx_person_info_page.dart
│ │ └── widgets
│ │ │ └── wx_pay_cell.dart
│ ├── login
│ │ ├── login_router.dart
│ │ └── pages
│ │ │ ├── code_login_page.dart
│ │ │ ├── find_pwd_page.dart
│ │ │ ├── login_page.dart
│ │ │ └── register_page.dart
│ ├── main_router.dart
│ ├── model
│ │ └── user_model.dart
│ ├── new_feature
│ │ ├── full_screen_swiper_widget.dart
│ │ └── new_feature_page.dart
│ ├── one
│ │ ├── models
│ │ │ ├── wx_home_model.dart
│ │ │ ├── wx_motion_model.dart
│ │ │ ├── wx_motion_top_model.dart
│ │ │ ├── wx_qq_message_model.dart
│ │ │ ├── wx_subscription_number_list_model.dart
│ │ │ └── wx_subscription_number_model.dart
│ │ ├── one_page.dart
│ │ ├── pages
│ │ │ ├── wx_home_page.dart
│ │ │ ├── wx_motion_page.dart
│ │ │ ├── wx_motion_top_page.dart
│ │ │ ├── wx_qq_message_page.dart
│ │ │ ├── wx_subscription_number_list_page.dart
│ │ │ └── wx_subscription_number_page.dart
│ │ └── widgets
│ │ │ ├── wx_home_cell.dart
│ │ │ ├── wx_motion_cell.dart
│ │ │ ├── wx_motion_top_cell.dart
│ │ │ ├── wx_qq_message_cell.dart
│ │ │ ├── wx_subscription_number_cell.dart
│ │ │ └── wx_subscription_number_list_cell.dart
│ ├── provider
│ │ ├── tabbar_provider.dart
│ │ └── theme_provider.dart
│ ├── routes
│ │ ├── app_route_observer.dart
│ │ ├── jh_nav_utils.dart
│ │ ├── not_found_page.dart
│ │ ├── router_init.dart
│ │ ├── routes.dart
│ │ └── routes_old.dart
│ ├── three
│ │ ├── models
│ │ │ └── wx_friends_circle_model.dart
│ │ ├── pages
│ │ │ ├── wx_discover_page.dart
│ │ │ ├── wx_friends_circle_page.dart
│ │ │ └── wx_friends_circle_page2.dart
│ │ ├── three_page.dart
│ │ └── widgets
│ │ │ └── wx_friends_circle_cell.dart
│ ├── two
│ │ ├── models
│ │ │ ├── wx_add_friend_model.dart
│ │ │ ├── wx_contacts_model.dart
│ │ │ └── wx_new_friend_model.dart
│ │ ├── pages
│ │ │ ├── mh_index_bar.dart
│ │ │ ├── wx_add_friend_page.dart
│ │ │ ├── wx_contacts_page.dart
│ │ │ ├── wx_group_chat_page.dart
│ │ │ ├── wx_info_set_page.dart
│ │ │ ├── wx_new_friend_page.dart
│ │ │ └── wx_user_info_page.dart
│ │ ├── two_page.dart
│ │ └── widgets
│ │ │ ├── wx_add_friend_cell.dart
│ │ │ ├── wx_contacts_cell.dart
│ │ │ └── wx_new_friend_cell.dart
│ └── widgets
│ │ └── searchbar_view.dart
└── res
│ ├── JsonData
│ ├── JsonData2
│ ├── china.json
│ ├── list_data.dart
│ ├── note.md
│ ├── test.json
│ ├── wx_contacts.json
│ ├── wx_friends_circle.json
│ └── wx_motion_top.json
├── pubspec.yaml
├── test
└── widget_test.dart
└── web
├── favicon.png
├── icons
├── Icon-192.png
├── Icon-512.png
├── Icon-maskable-192.png
└── Icon-maskable-512.png
├── index.html
└── manifest.json
/.gitignore:
--------------------------------------------------------------------------------
1 | # Miscellaneous
2 | *.class
3 | *.log
4 | *.pyc
5 | *.swp
6 | *.lock
7 | .DS_Store
8 | .atom/
9 | .buildlog/
10 | .history
11 | .svn/
12 |
13 | # IntelliJ related
14 | *.iml
15 | *.ipr
16 | *.iws
17 | .idea/
18 |
19 | # Visual Studio Code related
20 | .vscode/
21 |
22 | # Flutter/Dart/Pub related
23 | **/doc/api/
24 | .dart_tool/
25 | .flutter-plugins
26 | .flutter-plugins-dependencies
27 | .packages
28 | .pub-cache/
29 | .pub/
30 | /build/
31 |
32 | # Android related
33 | **/android/**/gradle-wrapper.jar
34 | **/android/.gradle
35 | **/android/captures/
36 | **/android/gradlew
37 | **/android/gradlew.bat
38 | **/android/local.properties
39 | **/android/**/GeneratedPluginRegistrant.java
40 |
41 | # iOS/XCode related
42 | **/ios/**/*.mode1v3
43 | **/ios/**/*.mode2v3
44 | **/ios/**/*.moved-aside
45 | **/ios/**/*.pbxuser
46 | **/ios/**/*.perspectivev3
47 | **/ios/**/*sync/
48 | **/ios/**/.sconsign.dblite
49 | **/ios/**/.tags*
50 | **/ios/**/.vagrant/
51 | **/ios/**/DerivedData/
52 | **/ios/**/Icon?
53 | **/ios/**/Pods/
54 | **/ios/**/.symlinks/
55 | **/ios/**/profile
56 | **/ios/**/xcuserdata
57 | **/ios/.generated/
58 | **/ios/Flutter/App.framework
59 | **/ios/Flutter/Flutter.framework
60 | **/ios/Flutter/Generated.xcconfig
61 | **/ios/Flutter/app.flx
62 | **/ios/Flutter/app.zip
63 | **/ios/Flutter/flutter_assets/
64 | **/ios/ServiceDefinitions.json
65 | **/ios/Runner/GeneratedPluginRegistrant.*
66 | **/ios/Flutter/flutter_export_environment.sh
67 | **/ios/Flutter/.last_build_id
68 |
69 | # Web related
70 |
71 | # Exceptions to above rules.
72 | !**/ios/**/default.mode1v3
73 | !**/ios/**/default.mode2v3
74 | !**/ios/**/default.pbxuser
75 | !**/ios/**/default.perspectivev3
76 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
77 | /ios/build/
78 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled.
5 |
6 | version:
7 | revision: b06b8b2710955028a6b562f5aa6fe62941d6febf
8 | channel: stable
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf
17 | base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf
18 | - platform: web
19 | create_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf
20 | base_revision: b06b8b2710955028a6b562f5aa6fe62941d6febf
21 |
22 | # User provided section
23 |
24 | # List of Local paths (relative to this file) that should be
25 | # ignored by the migrate tool.
26 | #
27 | # Files that are not part of the templates will be ignored by default.
28 | unmanaged_files:
29 | - 'lib/main.dart'
30 | - 'ios/Runner.xcodeproj/project.pbxproj'
31 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | BSD 2-Clause License
2 |
3 | Copyright (c) 2020, iotjin
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 |
9 | 1. Redistributions of source code must retain the above copyright notice, this
10 | list of conditions and the following disclaimer.
11 |
12 | 2. Redistributions in binary form must reproduce the above copyright notice,
13 | this list of conditions and the following disclaimer in the documentation
14 | and/or other materials provided with the distribution.
15 |
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 |
--------------------------------------------------------------------------------
/ScreenShot/Alert_iOS.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/Alert_iOS.gif
--------------------------------------------------------------------------------
/ScreenShot/BaseAppBar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/BaseAppBar.gif
--------------------------------------------------------------------------------
/ScreenShot/BaseRefreshView.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/BaseRefreshView.gif
--------------------------------------------------------------------------------
/ScreenShot/BaseRefreshViewFixed.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/BaseRefreshViewFixed.gif
--------------------------------------------------------------------------------
/ScreenShot/BaseRefreshViewFollow.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/BaseRefreshViewFollow.gif
--------------------------------------------------------------------------------
/ScreenShot/BaseRefreshViewShimmer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/BaseRefreshViewShimmer.gif
--------------------------------------------------------------------------------
/ScreenShot/BootomSheet.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/BootomSheet.gif
--------------------------------------------------------------------------------
/ScreenShot/JhAssetPicker.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhAssetPicker.gif
--------------------------------------------------------------------------------
/ScreenShot/JhCascadePicker.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhCascadePicker.gif
--------------------------------------------------------------------------------
/ScreenShot/JhCascadeTreePicker1.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhCascadeTreePicker1.gif
--------------------------------------------------------------------------------
/ScreenShot/JhCascadeTreePicker2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhCascadeTreePicker2.gif
--------------------------------------------------------------------------------
/ScreenShot/JhDialog.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhDialog.gif
--------------------------------------------------------------------------------
/ScreenShot/JhFormInputCell.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhFormInputCell.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhFormSelectCell.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhFormSelectCell.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhLoginTextField.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhLoginTextField.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhMultiPicker.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhMultiPicker.gif
--------------------------------------------------------------------------------
/ScreenShot/JhPopMenus1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhPopMenus1.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhPopMenus2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhPopMenus2.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhPopMenus3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhPopMenus3.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhSetCell.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhSetCell.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhSlideMenuView.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhSlideMenuView.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhSwiperView.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhSwiperView.gif
--------------------------------------------------------------------------------
/ScreenShot/JhTagView.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhTagView.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhTextField.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhTextField.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhToast.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhToast.gif
--------------------------------------------------------------------------------
/ScreenShot/JhTopTabBar.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhTopTabBar.jpg
--------------------------------------------------------------------------------
/ScreenShot/JhTopTabBar_redDot.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/JhTopTabBar_redDot.jpg
--------------------------------------------------------------------------------
/ScreenShot/Login.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/Login.gif
--------------------------------------------------------------------------------
/ScreenShot/LottiePage.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/LottiePage.gif
--------------------------------------------------------------------------------
/ScreenShot/PersonalCenterPage2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/PersonalCenterPage2.gif
--------------------------------------------------------------------------------
/ScreenShot/PersonalCenterPage3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/PersonalCenterPage3.gif
--------------------------------------------------------------------------------
/ScreenShot/PersonalCenterPage5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/PersonalCenterPage5.gif
--------------------------------------------------------------------------------
/ScreenShot/PhotoSelect.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/PhotoSelect.gif
--------------------------------------------------------------------------------
/ScreenShot/SearchTest4Page.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/SearchTest4Page.gif
--------------------------------------------------------------------------------
/ScreenShot/TagCloudWidget.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/TagCloudWidget.gif
--------------------------------------------------------------------------------
/ScreenShot/TagCloudWidget2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/TagCloudWidget2.gif
--------------------------------------------------------------------------------
/ScreenShot/WavePage.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/WavePage.gif
--------------------------------------------------------------------------------
/ScreenShot/eChart.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/eChart.gif
--------------------------------------------------------------------------------
/ScreenShot/img_pull_down_big.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/img_pull_down_big.gif
--------------------------------------------------------------------------------
/ScreenShot/img_pull_down_big2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/img_pull_down_big2.gif
--------------------------------------------------------------------------------
/ScreenShot/navSearch_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/navSearch_3.jpg
--------------------------------------------------------------------------------
/ScreenShot/theme.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/theme.gif
--------------------------------------------------------------------------------
/ScreenShot/wx/contacts/wx_addFriend.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/contacts/wx_addFriend.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/contacts/wx_infoSet.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/contacts/wx_infoSet.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/contacts/wx_newFriend.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/contacts/wx_newFriend.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/contacts/wx_userInfo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/contacts/wx_userInfo.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/discover/wx_friendsCircle.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/discover/wx_friendsCircle.gif
--------------------------------------------------------------------------------
/ScreenShot/wx/home/wx_motion.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/home/wx_motion.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/home/wx_motion_top.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/home/wx_motion_top.gif
--------------------------------------------------------------------------------
/ScreenShot/wx/home/wx_qqMessage.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/home/wx_qqMessage.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/home/wx_subscribeNum.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/home/wx_subscribeNum.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/home/wx_subscribeNumList.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/home/wx_subscribeNumList.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/mine/wx_pay.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/mine/wx_pay.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/mine/wx_payManager.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/mine/wx_payManager.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/mine/wx_personInfo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/mine/wx_personInfo.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/wx_contacts.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/wx_contacts.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/wx_discover.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/wx_discover.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/wx_home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/wx_home.jpg
--------------------------------------------------------------------------------
/ScreenShot/wx/wx_mine.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ScreenShot/wx/wx_mine.jpg
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
--------------------------------------------------------------------------------
/android/.gitignore:
--------------------------------------------------------------------------------
1 | gradle-wrapper.jar
2 | /.gradle
3 | /captures/
4 | /gradlew
5 | /gradlew.bat
6 | /local.properties
7 | GeneratedPluginRegistrant.java
8 |
--------------------------------------------------------------------------------
/android/app/key/key.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/key/key.jks
--------------------------------------------------------------------------------
/android/app/key/key.properties:
--------------------------------------------------------------------------------
1 | storePassword=123456
2 | keyPassword=123456
3 | keyAlias=key
4 | storeFile=key/key.jks
5 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/java/com/example/jh_flutter_demo/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.jh.jh_flutter_demo;
2 |
3 | import androidx.annotation.NonNull;
4 | import io.flutter.embedding.android.FlutterActivity;
5 | import io.flutter.embedding.engine.FlutterEngine;
6 | import io.flutter.plugins.GeneratedPluginRegistrant;
7 |
8 | public class MainActivity extends FlutterActivity {
9 | @Override
10 | public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
11 | GeneratedPluginRegistrant.registerWith(flutterEngine);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | -
8 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/launch_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/src/main/res/mipmap-xxhdpi/launch_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/android/app/src/main/res/mipmap-xxxhdpi/launch_image.png
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/res/xml/filepaths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | //buildscript {
2 | // ext.kotlin_version = '1.7.10'
3 | // repositories {
4 | // maven { url 'https://maven.aliyun.com/repository/public' } // jcenter
5 | // maven { url 'https://maven.aliyun.com/repository/gradle-plugin' } // gradle-plugin
6 | // maven { url 'https://maven.aliyun.com/repository/central' } // central
7 | // maven { url 'https://maven.aliyun.com/repository/google' } // google
8 | // google()
9 | // mavenCentral()
10 | // maven { url 'https://jitpack.io' }
11 | // }
12 | //
13 | // dependencies {
14 | // classpath 'com.android.tools.build:gradle:7.4.0' // gradle插件版本
15 | // classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // kotlin插件版本
16 | // }
17 | //}
18 |
19 | allprojects {
20 | repositories {
21 | maven { url 'https://maven.aliyun.com/repository/public' }
22 | maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
23 | maven { url 'https://maven.aliyun.com/repository/central' }
24 | maven { url 'https://maven.aliyun.com/repository/google' }
25 | google()
26 | mavenCentral()
27 | maven { url 'https://jitpack.io' }
28 | }
29 | }
30 |
31 | rootProject.buildDir = '../build'
32 | subprojects {
33 | project.buildDir = "${rootProject.buildDir}/${project.name}"
34 | }
35 | subprojects {
36 | project.evaluationDependsOn(':app')
37 | }
38 |
39 | tasks.register("clean", Delete) {
40 | delete rootProject.buildDir
41 | }
42 |
43 |
44 | /*
45 | 打包提示
46 |
47 | You are applying Flutter's main Gradle plugin imperatively using the apply script method, which is deprecated and will be removed in a future release.
48 | Migrate to applying Gradle plugins with the declarative plugins block: https://flutter.dev/go/flutter-gradle-plugin-apply
49 |
50 | */
51 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx4G
2 | android.enableR8=true
3 | android.useAndroidX=true
4 | android.enableJetifier=true
5 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Fri Jun 23 08:50:38 CEST 2017
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | #distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
7 |
8 | # tentent mirror
9 | distributionUrl=https\://mirrors.cloud.tencent.com/gradle/gradle-8.7-bin.zip
10 |
--------------------------------------------------------------------------------
/android/settings.gradle:
--------------------------------------------------------------------------------
1 | pluginManagement {
2 | def flutterSdkPath = {
3 | def properties = new Properties()
4 | file("local.properties").withInputStream { properties.load(it) }
5 | def flutterSdkPath = properties.getProperty("flutter.sdk")
6 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
7 | return flutterSdkPath
8 | }()
9 |
10 | includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
11 |
12 | repositories {
13 | google()
14 | mavenCentral()
15 | gradlePluginPortal()
16 | }
17 | }
18 |
19 | plugins {
20 | id "dev.flutter.flutter-plugin-loader" version "1.0.0"
21 | id "com.android.application" version "8.6.0" apply false // gradle插件版本
22 | id "org.jetbrains.kotlin.android" version "1.9.0" apply false // kotlin插件版本
23 | }
24 |
25 | include ":app"
26 |
27 | //include ":camera"
28 |
29 | //println "flutterSdkPath: $flutterSdkPath"
30 |
31 |
32 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()
33 |
34 | def plugins = new Properties()
35 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
36 | if (pluginsFile.exists()) {
37 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
38 | }
39 |
40 | plugins.each { name, path ->
41 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
42 | include ":$name"
43 | project(":$name").projectDir = pluginDirectory
44 | }
45 |
--------------------------------------------------------------------------------
/assets/images/PayCode.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/PayCode.jpg
--------------------------------------------------------------------------------
/assets/images/common/empty/ic_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/empty/ic_empty.png
--------------------------------------------------------------------------------
/assets/images/common/empty/ic_netErr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/empty/ic_netErr.png
--------------------------------------------------------------------------------
/assets/images/common/empty/空.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/empty/空.png
--------------------------------------------------------------------------------
/assets/images/common/empty/网络错误.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/empty/网络错误.png
--------------------------------------------------------------------------------
/assets/images/common/ic_arrow_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/ic_arrow_black.png
--------------------------------------------------------------------------------
/assets/images/common/ic_arrow_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/ic_arrow_gray.png
--------------------------------------------------------------------------------
/assets/images/common/ic_arrow_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/ic_arrow_white.png
--------------------------------------------------------------------------------
/assets/images/common/ic_nav_back_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/ic_nav_back_black.png
--------------------------------------------------------------------------------
/assets/images/common/ic_nav_back_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/common/ic_nav_back_white.png
--------------------------------------------------------------------------------
/assets/images/demos/symptom_ball_shadow@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/demos/symptom_ball_shadow@3x.png
--------------------------------------------------------------------------------
/assets/images/demos/symptom_ballwithflare@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/demos/symptom_ballwithflare@3x.png
--------------------------------------------------------------------------------
/assets/images/demos/symptom_light@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/demos/symptom_light@3x.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/个人护理.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/个人护理.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/休闲零食.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/休闲零食.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/充值中心.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/充值中心.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/分类.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/分类.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/厨房日用.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/厨房日用.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/外卖.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/外卖.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/天猫.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/天猫.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/天猫国际.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/天猫国际.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/天猫超市.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/天猫超市.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/奶品水饮.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/奶品水饮.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/家清家居.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/家清家居.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/拍卖.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/拍卖.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/新人包邮.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/新人包邮.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/方便速食.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/方便速食.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/母婴用品.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/母婴用品.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/粮油米面.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/粮油米面.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/聚划算.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/聚划算.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/进口好货.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/进口好货.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/领金币.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/领金币.png
--------------------------------------------------------------------------------
/assets/images/funcMenu/飞猪旅行.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/funcMenu/飞猪旅行.png
--------------------------------------------------------------------------------
/assets/images/ic_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_about.png
--------------------------------------------------------------------------------
/assets/images/ic_accountSafe.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_accountSafe.png
--------------------------------------------------------------------------------
/assets/images/ic_addFriends.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_addFriends.png
--------------------------------------------------------------------------------
/assets/images/ic_comingSoon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_comingSoon.png
--------------------------------------------------------------------------------
/assets/images/ic_demo1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_demo1.png
--------------------------------------------------------------------------------
/assets/images/ic_demo2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_demo2.png
--------------------------------------------------------------------------------
/assets/images/ic_exit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_exit.png
--------------------------------------------------------------------------------
/assets/images/ic_gengduo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_gengduo.png
--------------------------------------------------------------------------------
/assets/images/ic_more_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_more_black.png
--------------------------------------------------------------------------------
/assets/images/ic_more_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_more_white.png
--------------------------------------------------------------------------------
/assets/images/ic_nav_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_nav_add.png
--------------------------------------------------------------------------------
/assets/images/ic_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_placeholder.png
--------------------------------------------------------------------------------
/assets/images/ic_placeholder2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_placeholder2.png
--------------------------------------------------------------------------------
/assets/images/ic_placeholder3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_placeholder3.png
--------------------------------------------------------------------------------
/assets/images/ic_pwd_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_pwd_close.png
--------------------------------------------------------------------------------
/assets/images/ic_pwd_open.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_pwd_open.png
--------------------------------------------------------------------------------
/assets/images/ic_saoyisao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_saoyisao.png
--------------------------------------------------------------------------------
/assets/images/ic_set_black.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_set_black.png
--------------------------------------------------------------------------------
/assets/images/ic_set_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_set_gray.png
--------------------------------------------------------------------------------
/assets/images/ic_sort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_sort.png
--------------------------------------------------------------------------------
/assets/images/ic_update_head.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_update_head.png
--------------------------------------------------------------------------------
/assets/images/ic_update_head2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_update_head2.png
--------------------------------------------------------------------------------
/assets/images/ic_update_head3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_update_head3.png
--------------------------------------------------------------------------------
/assets/images/ic_update_head4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/ic_update_head4.png
--------------------------------------------------------------------------------
/assets/images/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/loading.png
--------------------------------------------------------------------------------
/assets/images/lufei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/lufei.png
--------------------------------------------------------------------------------
/assets/images/newFeature/ad_background-667h@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/newFeature/ad_background-667h@2x.png
--------------------------------------------------------------------------------
/assets/images/newFeature/newFeature_0.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/newFeature/newFeature_0.jpeg
--------------------------------------------------------------------------------
/assets/images/newFeature/newFeature_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/newFeature/newFeature_1.jpeg
--------------------------------------------------------------------------------
/assets/images/newFeature/newFeature_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/newFeature/newFeature_2.jpeg
--------------------------------------------------------------------------------
/assets/images/newFeature/newFeature_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/newFeature/newFeature_3.jpeg
--------------------------------------------------------------------------------
/assets/images/newFeature/start-now.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/newFeature/start-now.jpg
--------------------------------------------------------------------------------
/assets/images/picture/picture0.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture0.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/picture1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture1.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/picture2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture2.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/picture3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture3.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/picture5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture5.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/picture6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture6.jpg
--------------------------------------------------------------------------------
/assets/images/picture/picture7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture7.jpg
--------------------------------------------------------------------------------
/assets/images/picture/picture8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture8.jpg
--------------------------------------------------------------------------------
/assets/images/picture/picture9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/picture9.jpg
--------------------------------------------------------------------------------
/assets/images/picture/touxiang.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/touxiang.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/touxiang_1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/touxiang_1.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/touxiang_2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/touxiang_2.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/touxiang_3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/touxiang_3.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/touxiang_4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/touxiang_4.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/touxiang_5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/touxiang_5.jpeg
--------------------------------------------------------------------------------
/assets/images/picture/touxiang_6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/touxiang_6.jpg
--------------------------------------------------------------------------------
/assets/images/picture/tubiao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/picture/tubiao.png
--------------------------------------------------------------------------------
/assets/images/popMenus/ic_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/popMenus/ic_add.png
--------------------------------------------------------------------------------
/assets/images/popMenus/ic_chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/popMenus/ic_chat.png
--------------------------------------------------------------------------------
/assets/images/popMenus/ic_menu_up_arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/popMenus/ic_menu_up_arrow.png
--------------------------------------------------------------------------------
/assets/images/popMenus/ic_pay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/popMenus/ic_pay.png
--------------------------------------------------------------------------------
/assets/images/popMenus/ic_scan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/popMenus/ic_scan.png
--------------------------------------------------------------------------------
/assets/images/popMenus/shoufukuan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/popMenus/shoufukuan.png
--------------------------------------------------------------------------------
/assets/images/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/search.png
--------------------------------------------------------------------------------
/assets/images/selectPhoto_add.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/selectPhoto_add.png
--------------------------------------------------------------------------------
/assets/images/selectPhoto_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/selectPhoto_close.png
--------------------------------------------------------------------------------
/assets/images/service/bg_service_baoxiu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/service/bg_service_baoxiu.png
--------------------------------------------------------------------------------
/assets/images/service/bg_service_fuwufankui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/service/bg_service_fuwufankui.png
--------------------------------------------------------------------------------
/assets/images/service/bg_service_gongdan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/service/bg_service_gongdan.png
--------------------------------------------------------------------------------
/assets/images/service/icon_baoxiu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/service/icon_baoxiu.png
--------------------------------------------------------------------------------
/assets/images/service/icon_fuwufankui.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/service/icon_fuwufankui.png
--------------------------------------------------------------------------------
/assets/images/service/icon_gongdan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/service/icon_gongdan.png
--------------------------------------------------------------------------------
/assets/images/service/lufei.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/service/lufei.png
--------------------------------------------------------------------------------
/assets/images/set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/set.png
--------------------------------------------------------------------------------
/assets/images/shezhi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/shezhi.png
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_0.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_0.jpg
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_1.jpg
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_2.jpg
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_3.jpg
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_4.jpg
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_5.jpg
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_6.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_6.jpeg
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_gif0.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_gif0.gif
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_gif2.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_gif2.gif
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_gif3.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_gif3.gif
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_gif4.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_gif4.gif
--------------------------------------------------------------------------------
/assets/images/swiper/swiper_gif5.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/swiper/swiper_gif5.gif
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_1.png
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_1_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_1_on.png
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_2.png
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_2_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_2_on.png
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_3.png
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_3_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_3_on.png
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_4.png
--------------------------------------------------------------------------------
/assets/images/tab/nav_tab_4_on.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tab/nav_tab_4_on.png
--------------------------------------------------------------------------------
/assets/images/tianjiahaoyou.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/tianjiahaoyou.png
--------------------------------------------------------------------------------
/assets/images/xi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/images/xi.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_addgroup_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_addgroup_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_addgroup_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_addgroup_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_contacts_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_contacts_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_contacts_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_contacts_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_invite_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_invite_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_invite_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_invite_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_newgroup_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_newgroup_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_newgroup_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_newgroup_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_offical_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_offical_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_offical_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_offical_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_reda_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_reda_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_reda_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_reda_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_scanqr_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_scanqr_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_scanqr_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_scanqr_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_search_36x36_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_search_36x36_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_search_36x36_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_search_36x36_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_search_wework_36x36_@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_search_wework_36x36_@1x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_search_wework_40x40_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_search_wework_40x40_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_icon_search_wework_40x40_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_icon_search_wework_40x40_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_myQR_20x20_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_myQR_20x20_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/add/add_friend_searchicon_36x30_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/add/add_friend_searchicon_36x30_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/contact_index_bar_bubble_0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/contact_index_bar_bubble_0.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_favorite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_favorite.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_group_chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_group_chat.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_index_bar_bubble_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_index_bar_bubble_gray.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_index_bar_bubble_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_index_bar_bubble_white.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_new_friend.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_new_friend.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_public_account.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_public_account.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_shipintonghua.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_shipintonghua.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_tag.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_tag.png
--------------------------------------------------------------------------------
/assets/wechat/contacts/ic_xinxi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/contacts/ic_xinxi.png
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/IMG_3362.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/IMG_3362.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image1.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image1.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image2.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image2.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image3.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image3.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image4.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image4.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image5.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image5.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image6.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image6.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image7.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image7.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image8.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image8.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/image9.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/image9.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img1.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img10.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img2.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img3.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img4.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img5.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img6.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img7.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img8.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/img9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/img9.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_bg0.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_bg0.jpeg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_bg1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_bg1.jpg
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img10.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img10.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img11.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img11.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img12.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img12.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img13.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img13.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img14.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img14.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img15.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img15.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img16.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img16.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img17.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img17.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img18.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img18.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img19.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img19.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img2.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img2.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img20.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img20.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img21.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img21.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img22.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img22.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img23.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img23.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img24.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img24.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img25.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img25.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img26.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img26.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img27.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img27.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img28.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img28.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img29.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img29.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img3.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img3.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img30.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img30.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img31.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img31.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img32.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img32.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img33.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img33.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img4.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img4.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img5.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img5.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img6.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img6.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img7.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img7.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img8.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img8.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/friends/wx_img9.JPG:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/friends/wx_img9.JPG
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_bottle_msg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_bottle_msg.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_camera.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_diandian.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_diandian.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_feeds.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_feeds.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_fengchao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_fengchao.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_game_entry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_game_entry.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_mini_program.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_mini_program.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_people_nearby.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_people_nearby.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_quick_scan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_quick_scan.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_quick_search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_quick_search.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_shake_phone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_shake_phone.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_shopping.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_shopping.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_social_circle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_social_circle.png
--------------------------------------------------------------------------------
/assets/wechat/discover/ic_video_number.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/discover/ic_video_number.png
--------------------------------------------------------------------------------
/assets/wechat/home/Ic_email.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/Ic_email.png
--------------------------------------------------------------------------------
/assets/wechat/home/ic_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/ic_about.png
--------------------------------------------------------------------------------
/assets/wechat/home/ic_file_transfer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/ic_file_transfer.png
--------------------------------------------------------------------------------
/assets/wechat/home/ic_qrcode_preview_tiny.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/ic_qrcode_preview_tiny.png
--------------------------------------------------------------------------------
/assets/wechat/home/ic_subscription_number.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/ic_subscription_number.png
--------------------------------------------------------------------------------
/assets/wechat/home/ic_top.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/ic_top.jpg
--------------------------------------------------------------------------------
/assets/wechat/home/ic_tx_news.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/ic_tx_news.png
--------------------------------------------------------------------------------
/assets/wechat/home/ic_wx_games.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/ic_wx_games.png
--------------------------------------------------------------------------------
/assets/wechat/home/wechat_game.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/wechat_game.png
--------------------------------------------------------------------------------
/assets/wechat/home/wechat_motion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/home/wechat_motion.png
--------------------------------------------------------------------------------
/assets/wechat/mine/About_WeChat_AppIcon_64x64_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/About_WeChat_AppIcon_64x64_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/mine/About_WeChat_AppIcon_64x64_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/About_WeChat_AppIcon_64x64_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/mine/default_nor_avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/default_nor_avatar.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_about.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_album.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_album.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_cards_wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_cards_wallet.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_collections.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_collections.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_emotions.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_emotions.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_qianbao.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_qianbao.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_setting_myQR.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_setting_myQR.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_settings.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_shoufukuan.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_shoufukuan.png
--------------------------------------------------------------------------------
/assets/wechat/mine/ic_wallet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/mine/ic_wallet.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_1024x1024_@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_1024x1024_@1x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_108x108_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_108x108_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_24x24_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_24x24_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_27x27_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_27x27_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_29x29_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_29x29_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_29x29_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_29x29_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_40x40_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_40x40_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_44x44_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_44x44_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_50x50_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_50x50_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_60x60_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_60x60_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_60x60_@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_60x60_@3x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_76x76_@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_76x76_@1x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_76x76_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_76x76_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_83x83_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_83x83_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_86x86_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_86x86_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_90x90_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_90x90_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/AppIcon_98x98_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/AppIcon_98x98_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/DeviceRankNoLikeIcon_96x96_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/DeviceRankNoLikeIcon_96x96_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/DownVideo_169x137_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/DownVideo_169x137_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/News_VideoBIG_31x31_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/News_VideoBIG_31x31_@2x.png
--------------------------------------------------------------------------------
/assets/wechat/other/News_VideoSmall_16x16_@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/assets/wechat/other/News_VideoSmall_16x16_@2x.png
--------------------------------------------------------------------------------
/ios/.gitignore:
--------------------------------------------------------------------------------
1 | *.mode1v3
2 | *.mode2v3
3 | *.moved-aside
4 | *.pbxuser
5 | *.perspectivev3
6 | **/*sync/
7 | .sconsign.dblite
8 | .tags*
9 | **/.vagrant/
10 | **/DerivedData/
11 | Icon?
12 | **/Pods/
13 | **/.symlinks/
14 | profile
15 | xcuserdata
16 | **/.generated/
17 | Flutter/App.framework
18 | Flutter/Flutter.framework
19 | Flutter/Flutter.podspec
20 | Flutter/Generated.xcconfig
21 | Flutter/app.flx
22 | Flutter/app.zip
23 | Flutter/flutter_assets/
24 | Flutter/flutter_export_environment.sh
25 | ServiceDefinitions.json
26 | Runner/GeneratedPluginRegistrant.*
27 |
28 | # Exceptions to above rules.
29 | !default.mode1v3
30 | !default.mode2v3
31 | !default.pbxuser
32 | !default.perspectivev3
33 |
--------------------------------------------------------------------------------
/ios/Flutter/AppFrameworkInfo.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | App
9 | CFBundleIdentifier
10 | io.flutter.flutter.app
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | App
15 | CFBundlePackageType
16 | FMWK
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | 1.0
23 | MinimumOSVersion
24 | 11.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.h:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 |
4 | @interface AppDelegate : FlutterAppDelegate
5 |
6 | @end
7 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.m:
--------------------------------------------------------------------------------
1 | #import "AppDelegate.h"
2 | #import "GeneratedPluginRegistrant.h"
3 |
4 | @implementation AppDelegate
5 |
6 | - (BOOL)application:(UIApplication *)application
7 | didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
8 | [GeneratedPluginRegistrant registerWithRegistry:self];
9 | // Override point for customization after application launch.
10 | return [super application:application didFinishLaunchingWithOptions:launchOptions];
11 | }
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "LaunchImage_6.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "LaunchImage_6@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "filename" : "LaunchImage_6@3x.png",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "version" : 1,
21 | "author" : "xcode"
22 | }
23 | }
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage_6.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage_6@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage_6@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage_6@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage_6@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/LaunchImage_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/ios/Runner/LaunchImage_6.png
--------------------------------------------------------------------------------
/ios/Runner/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Runner/main.m:
--------------------------------------------------------------------------------
1 | #import
2 | #import
3 | #import "AppDelegate.h"
4 |
5 | int main(int argc, char* argv[]) {
6 | @autoreleasepool {
7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/lib/data/data_utils.dart:
--------------------------------------------------------------------------------
1 | /// data_utils.dart
2 | ///
3 | /// Created by iotjin on 2021/04/01.
4 | /// description: 项目数据请求 管理类
5 |
6 | import '/http/apis.dart';
7 | import '/http/http_utils.dart';
8 |
9 | typedef Success = Function(T data);
10 | typedef Fail = Function(int code, String msg);
11 |
12 | class DataUtils {
13 | /// 登录
14 | static void login(
15 | parameters, {
16 | Success? success,
17 | Fail? fail,
18 | }) {
19 | HttpUtils.post(APIs.login, parameters, success: success, fail: fail);
20 | }
21 |
22 | /// 分页加载数据
23 | static void getPageList(
24 | parameters, {
25 | Success? success,
26 | Fail? fail,
27 | }) {
28 | HttpUtils.get(APIs.getPage, parameters, success: success, fail: fail);
29 | }
30 |
31 | /// 分页加载分组数据
32 | static void getPageGroupList(
33 | parameters, {
34 | Success? success,
35 | Fail? fail,
36 | }) {
37 | HttpUtils.get(APIs.getGroupPage, parameters, success: success, fail: fail);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/demos/alert/alert_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | '底部弹框',
7 | '中间弹框',
8 | 'toast',
9 | 'JhToast',
10 | 'JhDialog',
11 | '级联选择器(多维数组结构数据)',
12 | '级联选择器(树形结构数据、支持搜索)',
13 | ];
14 | final List routeData = [
15 | 'BottomSheetTest',
16 | 'AlertTestPage',
17 | 'ToastDemoListPage',
18 | 'ToastTestPage',
19 | 'DialogTestPage',
20 | 'CascadePickerTest',
21 | 'CascadeTreePickerTest'
22 | ];
23 |
24 | class AlertDemoListPage extends StatelessWidget {
25 | const AlertDemoListPage({super.key});
26 |
27 | @override
28 | Widget build(BuildContext context) {
29 | return JhTextList(
30 | title: 'AlertDemoList',
31 | dataArr: titleData,
32 | callBack: (index, str) {
33 | JhNavUtils.pushNamed(context, routeData[index]);
34 | },
35 | );
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/lib/demos/alert/toast/toast_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_progress_hud.dart';
3 | import '/jh_common/widgets/jh_text_list.dart';
4 |
5 | final List titleData = [
6 | '文字',
7 | '成功',
8 | '失败',
9 | '警告',
10 | '加载中',
11 | ];
12 |
13 | class ToastDemoListPage extends StatelessWidget {
14 | const ToastDemoListPage({super.key});
15 |
16 | @override
17 | Widget build(BuildContext context) {
18 | return JhTextList(
19 | title: 'JhProgressHUD',
20 | dataArr: titleData,
21 | callBack: (index, str) {
22 | if (str == '文字') {
23 | JhProgressHUD.showText('这是一条提示文字');
24 | }
25 | if (str == '成功') {
26 | JhProgressHUD.showSuccess('加载成功');
27 | }
28 | if (str == '失败') {
29 | JhProgressHUD.showError('加载失败');
30 | }
31 | if (str == '警告') {
32 | JhProgressHUD.showInfo('注意注意');
33 | }
34 | if (str == '加载中') {
35 | JhProgressHUD.showLoadingText();
36 | Future.delayed(const Duration(seconds: 5), () {
37 | JhProgressHUD.hide();
38 | });
39 | }
40 | },
41 | );
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/lib/demos/base/base_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | 'BaseListView',
7 | 'BaseGridView',
8 | 'BaseListView - 骨架屏',
9 | 'BaseGridView - 骨架屏',
10 | 'BaseRefreshView - header/footer固定',
11 | 'BaseRefreshView - header/footer跟随',
12 | 'BaseAppBar(导航条)',
13 | 'JhEmptyView(空数据)',
14 | ];
15 | final List routeData = [
16 | 'BaseRefreshViewTestPage',
17 | 'BaseRefreshViewTestPage',
18 | 'BaseListViewShimmerTestPage',
19 | 'BaseGridViewShimmerTestPage',
20 | 'BaseRefreshViewHeaderFixedPage',
21 | 'BaseRefreshViewHeaderFollowPage',
22 | 'NavTestPage',
23 | 'EmptyDemoListPage',
24 | ];
25 |
26 | class BaseDemoListPage extends StatelessWidget {
27 | const BaseDemoListPage({super.key});
28 |
29 | @override
30 | Widget build(BuildContext context) {
31 | return JhTextList(
32 | title: 'Base',
33 | dataArr: titleData,
34 | callBack: (index, str) {
35 | if (index == 0 || index == 1) {
36 | var jumpParams = {'isGridView': index == 1 ? true : false};
37 | JhNavUtils.pushNamed(context, routeData[index], arguments: jumpParams);
38 | } else {
39 | JhNavUtils.pushNamed(context, routeData[index]);
40 | }
41 | },
42 | );
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/lib/demos/chart/chart_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/utils/jh_device_utils.dart';
3 | import '/jh_common/widgets/jh_progress_hud.dart';
4 | import '/jh_common/widgets/jh_text_list.dart';
5 | import '/project/routes/jh_nav_utils.dart';
6 |
7 | final List titleData = [
8 | 'Graphic - 柱状图',
9 | 'Graphic - 折线图',
10 | 'Graphic - 饼图',
11 | 'ECharts1 - 平滑折线图 警戒线',
12 | 'ECharts2 - 多图表',
13 | 'ECharts3 - 多图表 - 动态数据',
14 | 'ECharts4 - 渐变折线图',
15 | 'Chart1',
16 | 'Chart2',
17 | 'MpChartLine1',
18 | 'MpChartBar1',
19 | 'MpChartCombined',
20 | ];
21 | final List routeData = [
22 | 'GraphicBarPage',
23 | 'GraphicLinePage',
24 | 'GraphicPiePage',
25 | 'EChartPage1',
26 | 'EChartPage2',
27 | 'EChartPage3',
28 | 'EChartPage4',
29 | 'ChartPage1',
30 | 'ChartPage2',
31 | 'MpChartLinePage1',
32 | 'MpChartBarPage1',
33 | 'MpChartCombinedPage',
34 | ];
35 |
36 | class ChartDemoListPage extends StatelessWidget {
37 | const ChartDemoListPage({super.key});
38 |
39 | @override
40 | Widget build(BuildContext context) {
41 | return JhTextList(
42 | title: 'Chart',
43 | dataArr: titleData,
44 | callBack: (index, str) {
45 | if (str.startsWith('EChart') && JhDeviceUtils.isWeb) {
46 | JhProgressHUD.showText('不支持Web端');
47 | } else {
48 | JhNavUtils.pushNamed(context, routeData[index]);
49 | }
50 | },
51 | );
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lib/demos/components/component_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | '水平滑动菜单',
7 | 'Tags标签',
8 | '折叠面板',
9 | ];
10 | final List routeData = [
11 | 'SlideMenuTestPage',
12 | 'TagViewTestPage',
13 | 'CollapseViewTestPage',
14 | ];
15 |
16 | class ComponentDemoListPage extends StatelessWidget {
17 | const ComponentDemoListPage({super.key});
18 |
19 | @override
20 | Widget build(BuildContext context) {
21 | return JhTextList(
22 | title: '功能组件',
23 | dataArr: titleData,
24 | callBack: (index, str) {
25 | JhNavUtils.pushNamed(context, routeData[index]);
26 | },
27 | );
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/lib/demos/components/tag_view_test_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_tag_view.dart';
3 | import '/project/configs/project_config.dart';
4 |
5 | class TagViewTestPage extends StatefulWidget {
6 | const TagViewTestPage({Key? key}) : super(key: key);
7 |
8 | @override
9 | State createState() => _TagViewTestPageState();
10 | }
11 |
12 | class _TagViewTestPageState extends State {
13 | @override
14 | Widget build(BuildContext context) {
15 | return Scaffold(
16 | appBar: const BaseAppBar('JhTagView'),
17 | body: _body(),
18 | backgroundColor: KColors.dynamicColor(context, KColors.wxBgColor, KColors.kBgDarkColor),
19 | );
20 | }
21 |
22 | _body() {
23 | return ListView(children: const [
24 | Column(children: [
25 | JhTagView(textList: ['111', '22', '333', '44444', '5555555', '66666', '7777']),
26 | SuccessTag(text: 'success'),
27 | ErrorTag(text: 'error'),
28 | WarningTag(text: 'warning'),
29 | SuccessTag(textList: ['111', '22', '333', '44444', '5555555', '66666', '7777']),
30 | ErrorTag(textList: ['111', '22', '333', '44444', '5555555', '66666', '7777']),
31 | WarningTag(textList: ['111', '22', '333', '44444', '5555555', '66666', '7777']),
32 | Row(
33 | children: [
34 | Text('Left'),
35 | SizedBox(width: 10),
36 | Expanded(
37 | child: JhTagView(
38 | textList: ['123456789123456789123456789123456789123456789123456789', '111', '22', '333'])),
39 | SizedBox(width: 10),
40 | Text('Right'),
41 | ],
42 | ),
43 | ])
44 | ]);
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/demos/demo_list_page.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: avoid_print
2 |
3 | import 'package:flutter/material.dart';
4 | import '/jh_common/widgets/jh_text_list.dart';
5 | import '/project/routes/jh_nav_utils.dart';
6 |
7 | final List titleData = [
8 | 'UI',
9 | '基类',
10 | 'ListView',
11 | 'GridView',
12 | 'Chart',
13 | '网络请求',
14 | 'base64、AES、MD5和本地加密存储',
15 | '底部、中间、toast、自定义弹框',
16 | 'JhForm表单',
17 | 'Form',
18 | '十字滑动(个人中心效果)',
19 | '路由相关',
20 | '图片选择',
21 | '功能组件',
22 | '搜索框',
23 | '小红点',
24 | '轮播',
25 | '二维码',
26 | 'Animation',
27 | '列表侧滑',
28 | '城市选择列表',
29 | '拖拽排序',
30 | '权限检查和请求',
31 | '设备信息',
32 | '跳转三方地图导航',
33 | ];
34 | final List routeData = [
35 | 'UIDemoListPage',
36 | 'BaseDemoListPage',
37 | 'ListViewDemoListPage',
38 | 'GridViewDemoListPage',
39 | 'ChartDemoListPage',
40 | 'HttpDemoListPage',
41 | 'AESTestPage',
42 | 'AlertDemoListPage',
43 | 'FormDemoListPage',
44 | 'FormTest',
45 | 'TopTabBarDemoListPage',
46 | 'RouteDemoListPage',
47 | 'PhotoSelectTest',
48 | 'ComponentDemoListPage',
49 | 'SearchDemoListPage',
50 | 'RedDotPage',
51 | 'SwiperDemoListPage',
52 | 'QRCodeTest',
53 | 'AnimationDemoListPage',
54 | 'SideslipTestPage',
55 | 'CitySelectListPage',
56 | 'DragSortDemoListPage',
57 | 'PermissionTestPage',
58 | 'DeviceInfoTest',
59 | 'MapJumpTestPage',
60 | ];
61 |
62 | class DemoListPage extends StatelessWidget {
63 | const DemoListPage({super.key});
64 |
65 | @override
66 | Widget build(BuildContext context) {
67 | return JhTextList(
68 | title: 'DemoList',
69 | dataArr: titleData,
70 | callBack: (index, str) {
71 | // print(index);
72 | print(str);
73 | // print(routeData[index]);
74 | JhNavUtils.pushNamed(context, routeData[index]);
75 | },
76 | );
77 | }
78 | }
79 |
--------------------------------------------------------------------------------
/lib/demos/dragSort/drag_sort_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | 'ListviewDragSort',
7 | 'ListviewDragSort2 - reorderables',
8 | 'GridviewDragSort - reorderables',
9 | ];
10 | final List routeData = [
11 | 'ListviewDragSortPage',
12 | 'ListviewDragSortPage2',
13 | 'GridviewDragSortPage',
14 | ];
15 |
16 | class DragSortDemoListPage extends StatelessWidget {
17 | const DragSortDemoListPage({super.key});
18 |
19 | @override
20 | Widget build(BuildContext context) {
21 | return JhTextList(
22 | title: 'DragSortDemoList',
23 | dataArr: titleData,
24 | callBack: (index, str) {
25 | JhNavUtils.pushNamed(context, routeData[index]);
26 | },
27 | );
28 | }
29 | }
30 |
31 | /*
32 |
33 | ListView({
34 | Axis scrollDirection = Axis.vertical, // 列表的滚动方向,可选值:Axis的horizontal、vertical
35 | ScrollController controller, // 控制器,与列表滚动相关,比如监听列表的滚动事件
36 | ScrollPhysics physics, // 列表滚动至边缘后继续拖动的物理效果,Android与iOS效果不同:Android = 波纹状(ClampingScrollPhysics),而iOS = 回弹的弹性效果(BouncingScrollPhysics)。若想不同的平台上呈现各自的效果可使用AlwaysScrollableScrollPhysics,它会根据不同平台自动选用各自的物理效果。若想禁用在边缘的拖动效果,可使用NeverScrollableScrollPhysics
37 | bool shrinkWrap = false, // 决定列表的长度是否仅包裹其内容的长度。当ListView嵌在一个无限长的容器组件中时,shrinkWrap必须为true,否则Flutter会给出警告;
38 | EdgeInsetsGeometry padding, // 列表内边距
39 | this.itemExtent, // 子元素长度。当列表中的每一项长度是固定的情况下可以指定该值,有助于提高列表的性能(因为它可以帮助ListView在未实际渲染子元素之前就计算出每一项元素的位置);
40 | double cacheExtent, // 预渲染区域长度,ListView会在其可视区域的两边留一个cacheExtent长度的区域作为预渲染区域(对于ListView.build或ListView.separated构造函数创建的列表,不在可视区域和预渲染区域内的子元素不会被创建或会被销毁);
41 | List children = const [], // 容纳子元素的组件数组
42 | })
43 |
44 | * */
45 |
--------------------------------------------------------------------------------
/lib/demos/form/form_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | 'JhLoginTextField',
7 | 'JhTextField',
8 | 'JhFormInputCell',
9 | 'JhFormSelectCell',
10 | 'JhSetCell',
11 | 'FormTestPage',
12 | 'FormValidatePage'
13 | ];
14 | final List routeData = [
15 | 'LoginTextFieldTestPage',
16 | 'InputTextFieldTestPage',
17 | 'FormInputCellTestPage',
18 | 'FormSelectCellTestPage',
19 | 'SetCellTestPage',
20 | 'FormTestPage',
21 | 'FormValidatePage'
22 | ];
23 |
24 | class FormDemoListPage extends StatelessWidget {
25 | const FormDemoListPage({super.key});
26 |
27 | @override
28 | Widget build(BuildContext context) {
29 | return JhTextList(
30 | title: 'JhForm',
31 | dataArr: titleData,
32 | callBack: (index, str) {
33 | JhNavUtils.pushNamed(context, routeData[index]);
34 | },
35 | );
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/lib/demos/gridView/gridview_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = ['GridViewTest1', 'GirdViewTest2', 'GirdViewTest3', 'GirdViewTest4', 'GridViewTest5'];
6 | final List routeData = ['GridViewTest1', 'GridViewTest2', 'GridViewTest3', 'GridViewTest4', 'GridViewTestPage5'];
7 |
8 | class GridViewDemoListPage extends StatelessWidget {
9 | const GridViewDemoListPage({super.key});
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | return JhTextList(
14 | title: 'GridViewDemoListPage',
15 | dataArr: titleData,
16 | callBack: (index, str) {
17 | JhNavUtils.pushNamed(context, routeData[index]);
18 | // JhNavUtils.pushNamed(context, 'GirdViewTest1');
19 | },
20 | );
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/lib/demos/http/http_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | 'dio使用',
7 | '分页加载数据',
8 | '分页加载数据 - header/footer跟随',
9 | ];
10 | final List routeData = ['HttpTest1Page', 'HttpPageTestPage', 'HttpPageTestHeaderFollowPage'];
11 |
12 | class HttpDemoListPage extends StatelessWidget {
13 | const HttpDemoListPage({super.key});
14 |
15 | @override
16 | Widget build(BuildContext context) {
17 | return JhTextList(
18 | title: 'HttpDemoList',
19 | dataArr: titleData,
20 | callBack: (index, str) {
21 | JhNavUtils.pushNamed(context, routeData[index]);
22 | },
23 | );
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/lib/demos/http/http_page_test_model.dart:
--------------------------------------------------------------------------------
1 | class HttpPageTestModel {
2 | // ignore: non_constant_identifier_names
3 | String? ID;
4 | String? place;
5 | String? state;
6 | String? phone;
7 | String? content;
8 | String? imageUrl;
9 |
10 | HttpPageTestModel({
11 | // ignore: non_constant_identifier_names
12 | this.ID,
13 | this.place,
14 | this.state,
15 | this.phone,
16 | this.content,
17 | this.imageUrl,
18 | });
19 |
20 | HttpPageTestModel.fromJson(Map json) {
21 | ID = json['ID'];
22 | place = json['place'];
23 | state = json['state'];
24 | phone = json['phone'];
25 | content = json['content'];
26 | imageUrl = json['imageUrl'];
27 | }
28 |
29 | Map toJson() {
30 | final Map data = {};
31 | data['ID'] = ID;
32 | data['place'] = place;
33 | data['state'] = state;
34 | data['phone'] = phone;
35 | data['content'] = content;
36 | data['imageUrl'] = imageUrl;
37 | return data;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/demos/listView/listview_group_model.dart:
--------------------------------------------------------------------------------
1 | class GroupModel {
2 | String? groupTitle;
3 | String? num;
4 | List? data;
5 |
6 | GroupModel({this.groupTitle, this.num, this.data});
7 |
8 | GroupModel.fromJson(Map json) {
9 | groupTitle = json['groupTitle'];
10 | num = json['num'];
11 | if (json['data'] != null) {
12 | data = [];
13 | json['data'].forEach((v) {
14 | data!.add(Data.fromJson(v));
15 | });
16 | }
17 | }
18 |
19 | Map toJson() {
20 | final Map data = {};
21 | data['groupTitle'] = groupTitle;
22 | data['num'] = num;
23 | if (this.data != null) {
24 | data['data'] = this.data!.map((v) => v.toJson()).toList();
25 | }
26 | return data;
27 | }
28 | }
29 |
30 | class Data {
31 | String? title;
32 | String? phone;
33 | String? content;
34 | String? imageUrl;
35 |
36 | Data({this.title, this.phone, this.content, this.imageUrl});
37 |
38 | Data.fromJson(Map json) {
39 | title = json['title'];
40 | phone = json['phone'];
41 | content = json['content'];
42 | imageUrl = json['imageUrl'];
43 | }
44 |
45 | Map toJson() {
46 | final Map data = {};
47 | data['title'] = title;
48 | data['phone'] = phone;
49 | data['content'] = content;
50 | data['imageUrl'] = imageUrl;
51 | return data;
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lib/demos/listView/listview_test2.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: avoid_print
2 |
3 | import 'package:flutter/material.dart';
4 | import '/jh_common/widgets/jh_network_image.dart';
5 | import '/base_appbar.dart';
6 | import '/res/list_data.dart';
7 |
8 | class ListViewTest2 extends StatelessWidget {
9 | const ListViewTest2({super.key});
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | return const Scaffold(
14 | appBar: BaseAppBar('ListViewTest2_外部引用假数据'),
15 | body: HomeContent(),
16 | );
17 | }
18 | }
19 |
20 | class HomeContent extends StatelessWidget {
21 | const HomeContent({super.key});
22 |
23 | Widget _getListData(context, index) {
24 | return ListTile(
25 | title: Text(listData[index]['title']),
26 | leading: JhNetworkImage(listData[index]['imageUrl']),
27 | subtitle: Text(listData[index]['content']),
28 | onTap: () {
29 | print('点击的index ${index.toString()}');
30 | },
31 | );
32 | }
33 |
34 | @override
35 | Widget build(BuildContext context) {
36 | return ListView.builder(itemCount: listData.length, itemBuilder: _getListData);
37 | }
38 | }
39 |
40 | Widget contentBody = Container(
41 | width: 200,
42 | height: 200,
43 | color: Colors.red,
44 | child: TextButton(
45 | child: const Text('normal'),
46 | onPressed: () {},
47 | ),
48 | );
49 |
--------------------------------------------------------------------------------
/lib/demos/listView/listview_test_card.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_network_image.dart';
3 | import '/base_appbar.dart';
4 | import '/res/list_data.dart';
5 |
6 | class ListViewTestCard extends StatelessWidget {
7 | const ListViewTestCard({super.key});
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return const Scaffold(
12 | appBar: BaseAppBar('ListViewTestCard'),
13 | body: ContentBody(),
14 | );
15 | }
16 | }
17 |
18 | class ContentBody extends StatelessWidget {
19 | const ContentBody({super.key});
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | // TODO: implement build
24 | return ListView(
25 | children: listData.map((value) {
26 | return Card(
27 | margin: const EdgeInsets.all(10),
28 | child: Column(
29 | children: [
30 | AspectRatio(aspectRatio: 20 / 9, child: JhNetworkImage(value['imageUrl'])),
31 | ListTile(
32 | leading: CircleAvatar(backgroundImage: NetworkImage(value['imageUrl'])),
33 | title: Text(value['title']),
34 | subtitle: Text(value['content'], maxLines: 1, overflow: TextOverflow.ellipsis),
35 | )
36 | ],
37 | ),
38 | );
39 | }).toList(),
40 | );
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/demos/other/animation/animation_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | '抖动动画',
7 | '3D球',
8 | '3D球2',
9 | '3D球 - 文字',
10 | '3D球 - 封装',
11 | '3D球 - 圆形阴影',
12 | '波浪动画',
13 | 'Lottie 动画',
14 | ];
15 | final List routeData = [
16 | 'AnimationTestPage',
17 | 'Ball3DPage',
18 | 'Ball3DPage2',
19 | 'Ball3DPage3',
20 | 'TagCloudPage',
21 | 'Ball3DPage4',
22 | 'WavePage',
23 | 'LottiePage',
24 | ];
25 |
26 | class AnimationDemoListPage extends StatelessWidget {
27 | const AnimationDemoListPage({super.key});
28 |
29 | @override
30 | Widget build(BuildContext context) {
31 | return JhTextList(
32 | title: 'Animation',
33 | dataArr: titleData,
34 | callBack: (index, str) {
35 | JhNavUtils.pushNamed(context, routeData[index]);
36 | },
37 | );
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/demos/other/animation/ball_3d_page2.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/base_appbar.dart';
3 | import 'xball_view.dart';
4 |
5 | class Ball3DPage2 extends StatefulWidget {
6 | const Ball3DPage2({Key? key}) : super(key: key);
7 |
8 | @override
9 | State createState() => _DBallPage2State();
10 | }
11 |
12 | class _DBallPage2State extends State {
13 | @override
14 | Widget build(BuildContext context) {
15 | return Scaffold(
16 | appBar: const BaseAppBar('3D球'),
17 | backgroundColor: Colors.white,
18 | body: XBallView(
19 | mediaQueryData: MediaQuery.of(context),
20 | keywords: const [
21 | '北京',
22 | '天津',
23 | '上海',
24 | '重庆',
25 | '河北',
26 | '山西',
27 | '辽宁',
28 | '吉林',
29 | '黑龙江',
30 | '江苏',
31 | '浙江',
32 | '安徽',
33 | '福建',
34 | '江西',
35 | '山东',
36 | '河南',
37 | '湖北',
38 | '湖南',
39 | '广东',
40 | '海南',
41 | '四川asdfasdf',
42 | '贵州',
43 | '云南',
44 | '陕西',
45 | '甘肃',
46 | '青海',
47 | '台湾',
48 | '内蒙古asdfsadfadf',
49 | '广西',
50 | '西藏',
51 | '宁夏',
52 | '新疆',
53 | '香港',
54 | '澳门',
55 | ],
56 | highlight: const ['四川'],
57 | ), // This trailing comma makes auto-formatting nicer for build methods.
58 | );
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/lib/demos/other/animation/tag_cloud_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/base_appbar.dart';
3 | import '/jh_common/widgets/tag_cloud_widget.dart';
4 |
5 | var _data = [
6 | {'ID': '111', 'name': '1.这是文字', 'num': '11'},
7 | {'ID': '222', 'name': '2.这是文', 'num': '22'},
8 | {'ID': '333', 'name': '3.这是文字文字', 'num': '33'},
9 | {'ID': '444', 'name': '4.这是文字', 'num': '44'},
10 | {'ID': '555', 'name': '5.这是文字', 'num': '55'},
11 | {'ID': '666', 'name': '6.这是', 'num': '66'},
12 | {'ID': '777', 'name': '7.这是文字', 'num': '77'},
13 | {'ID': '888', 'name': '8.这是文字', 'num': '88'},
14 | ];
15 |
16 | class TagCloudPage extends StatefulWidget {
17 | const TagCloudPage({Key? key}) : super(key: key);
18 |
19 | @override
20 | State createState() => _TagCloudPageState();
21 | }
22 |
23 | class _TagCloudPageState extends State {
24 | @override
25 | Widget build(BuildContext context) {
26 | return Scaffold(
27 | appBar: const BaseAppBar('TagCloudWidget'),
28 | // backgroundColor: Color(0xFFF8F8F8),
29 | body: Padding(
30 | padding: const EdgeInsets.all(40.0),
31 | child: LayoutBuilder(
32 | builder: (context, constraints) {
33 | return TagCloudWidget(constraints.maxWidth - 40 * 2, _data, rpm: 4);
34 | },
35 | ),
36 | ),
37 | );
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/demos/other/animation/wave_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:wave/config.dart';
3 | import 'package:wave/wave.dart';
4 | import '/project/configs/project_config.dart';
5 |
6 | class WavePage extends StatelessWidget {
7 | const WavePage({Key? key}) : super(key: key);
8 |
9 | @override
10 | Widget build(BuildContext context) {
11 | return Scaffold(
12 | appBar: const BaseAppBar('波浪动画'),
13 | body: _body(),
14 | );
15 | }
16 |
17 | _body() {
18 | const backgroundColor = Color(0xFFF15BB5);
19 |
20 | const colors = [Color(0xFFFEE440), Color(0xFF00BBF9)];
21 |
22 | const durations = [3000, 6000];
23 |
24 | const heightPercentages = [0.65, 0.66];
25 |
26 | var waveView = WaveWidget(
27 | config: CustomConfig(
28 | colors: colors,
29 | durations: durations,
30 | heightPercentages: heightPercentages,
31 | ),
32 | backgroundColor: backgroundColor,
33 | size: const Size(double.infinity, double.infinity),
34 | waveAmplitude: 0,
35 | );
36 |
37 | return waveView;
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/demos/route_test_page/route_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_progress_hud.dart';
3 | import '/jh_common/widgets/jh_text_list.dart';
4 | import '/project/routes/jh_nav_utils.dart';
5 |
6 | final List titleData = ['跳转传值与回传、多级返回', '监听页面出现与消失', '禁用手势返回和安卓返回键'];
7 | final List routeData = ['PassValuePage', 'RouteTestPage1', 'RouteTestPage2'];
8 |
9 | class RouteDemoListPage extends StatelessWidget {
10 | const RouteDemoListPage({super.key});
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | return JhTextList(
15 | title: '路由相关',
16 | dataArr: titleData,
17 | callBack: (index, str) {
18 | if (str == '禁用手势返回和安卓返回键') {
19 | JhNavUtils.pushNamedResult(context, 'RouteTestPage2', {}, (returnData) {
20 | if (returnData['isRefresh'] == true) {
21 | _requestData();
22 | }
23 | });
24 | } else {
25 | JhNavUtils.pushNamed(context, routeData[index]);
26 | }
27 | },
28 | );
29 | }
30 |
31 | void _requestData() {
32 | JhProgressHUD.showLoadingText();
33 | Future.delayed(const Duration(seconds: 1), () {
34 | JhProgressHUD.hide();
35 | });
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/lib/demos/search/search_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = ['搜索框1', '搜索框2', '搜索框3', '搜索框4-带防抖节流', '防抖/节流', '搜索框二次封装-带防抖节流'];
6 | final List routeData = [
7 | 'SearchTest1Page',
8 | 'SearchTest2Page',
9 | 'SearchTest3Page',
10 | 'SearchTest4Page',
11 | 'DebounceThrottleTestPage',
12 | 'SearchTest5Page',
13 | ];
14 |
15 | class SearchDemoListPage extends StatelessWidget {
16 | const SearchDemoListPage({super.key});
17 |
18 | @override
19 | Widget build(BuildContext context) {
20 | return JhTextList(
21 | title: '搜索框',
22 | dataArr: titleData,
23 | callBack: (index, str) {
24 | JhNavUtils.pushNamed(context, routeData[index]);
25 | },
26 | );
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/lib/demos/search/search_test3_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/jh_form/jh_login_text_field.dart';
3 | import '/project/configs/colors.dart';
4 |
5 | class SearchTest3Page extends StatelessWidget {
6 | const SearchTest3Page({super.key});
7 |
8 | @override
9 | Widget build(BuildContext context) {
10 | return Scaffold(
11 | appBar:
12 | // cursorColor: Colors.white, // 设置光标
13 | AppBar(
14 | backgroundColor: KColors.kThemeColor,
15 | titleSpacing: 15,
16 | automaticallyImplyLeading: false,
17 | // 隐藏返回箭头
18 | title: _searchBar(),
19 | actions: [
20 | InkWell(
21 | child: const SizedBox(
22 | width: 50,
23 | height: 50,
24 | child: Center(
25 | child: Text('搜索'),
26 | ),
27 | ),
28 | onTap: () {},
29 | )
30 | ],
31 | ),
32 | body: ElevatedButton(
33 | child: const Text('返回'),
34 | onPressed: () {
35 | Navigator.pop(context);
36 | },
37 | ),
38 | );
39 | }
40 |
41 | _searchBar() {
42 | return Container(
43 | decoration: BoxDecoration(
44 | border: Border.all(color: Colors.grey, width: 1.0), // 灰色的一层边框
45 | color: Colors.white,
46 | borderRadius: const BorderRadius.all(Radius.circular(5.0)),
47 | ),
48 | alignment: Alignment.center,
49 | height: 38,
50 | // padding: EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 0.0),
51 | child: const JhLoginTextField(
52 | leftWidget: Icon(
53 | Icons.search,
54 | size: 30,
55 | ),
56 | hintText: '请输入搜索信息',
57 | isShowDeleteBtn: true,
58 | isDense: true,
59 | ),
60 | );
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/lib/demos/swiper/swiper_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | 'swiper1-全屏',
7 | 'swiper2-缩放',
8 | 'swiper3 - flutter_swiper',
9 | 'swiper4 - carousel_slider',
10 | 'PageView - 全屏',
11 | 'JhSwiperView - 示例',
12 | 'JhSwiperView - 全屏',
13 | 'JhSwiperView - 全屏自定义',
14 | ];
15 | final List routeData = [
16 | 'SwiperTest1Page',
17 | 'SwiperTest2Page',
18 | 'SwiperTest3Page',
19 | 'SwiperTest4Page',
20 | 'FullScreenSwiperWidget',
21 | 'SwiperTest5Page',
22 | 'SwiperTest6Page',
23 | 'SwiperTest7Page',
24 | ];
25 |
26 | class SwiperDemoListPage extends StatelessWidget {
27 | const SwiperDemoListPage({super.key});
28 |
29 | @override
30 | Widget build(BuildContext context) {
31 | return JhTextList(
32 | title: '轮播',
33 | dataArr: titleData,
34 | callBack: (index, str) {
35 | JhNavUtils.pushNamed(context, routeData[index]);
36 | },
37 | );
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/lib/demos/swiper/swiper_test6_page.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: avoid_print
2 |
3 | import 'package:flutter/material.dart';
4 | import '/jh_common/utils/jh_screen_utils.dart';
5 | import '/jh_common/widgets/jh_swiper_view.dart';
6 |
7 | class SwiperTest6Page extends StatefulWidget {
8 | const SwiperTest6Page({Key? key}) : super(key: key);
9 |
10 | @override
11 | State createState() => _SwiperTest6PageState();
12 | }
13 |
14 | class _SwiperTest6PageState extends State {
15 | List imgList = [
16 | 'https://gitee.com/iotjh/Picture/raw/master/cat.png',
17 | 'https://gitee.com/iotjh/Picture/raw/master/lufei2.png',
18 | 'https://gitee.com/iotjh/Picture/raw/master/swiper/picture0.jpeg',
19 | ];
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | return Scaffold(
24 | body: _body(),
25 | );
26 | }
27 |
28 | _body() {
29 | return JhSwiperView(
30 | data: imgList,
31 | height: JhScreenUtils.screenHeight,
32 | viewportFraction: 1.0,
33 | aspectRatio: 16 / 9,
34 | radius: 0,
35 | loop: false,
36 | autoPlay: false,
37 | enlargeCenterPage: false,
38 | isShowIndicator: true,
39 | indicatorBottomMargin: 50,
40 | clickCallBack: (int index, dynamic imgArr) {
41 | print('index: $index');
42 | print('img: ${imgArr[index]}');
43 | Navigator.pop(context);
44 | },
45 | onPageChanged: (int index, dynamic imgArr) {
46 | // print('index: $index');
47 | // print('img: ${imgArr[index]}');
48 | },
49 | );
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/lib/demos/topTabBar/top_tabbar_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = [
6 | 'JhTopTabBar1',
7 | 'JhTopTabBar2',
8 | 'JhTopTabBar3 - 小红点',
9 | 'JhTopTabBar4 - 分页+header/footer跟随',
10 | '个人中心1 - TopTabBar+背景图',
11 | '个人中心2 - TopTabBar+背景图+缓存滚动',
12 | '个人中心3 - TopTabBar+下拉背景图+缓存滚动',
13 | '图片下拉放大+刷新',
14 | '图片下拉放大+刷新+自定义指示器',
15 | ];
16 | final List routeData = [
17 | 'TopTabBarTest1Page',
18 | 'TopTabBarTest2Page',
19 | 'TopTabBarTest3Page',
20 | 'TopTabBarTest4Page',
21 | 'PersonalCenterPage1',
22 | 'PersonalCenterPage2',
23 | 'PersonalCenterPage3',
24 | 'PersonalCenterPage4',
25 | 'PersonalCenterPage5',
26 | ];
27 |
28 | class TopTabBarDemoListPage extends StatelessWidget {
29 | const TopTabBarDemoListPage({super.key});
30 |
31 | @override
32 | Widget build(BuildContext context) {
33 | return JhTextList(
34 | title: '十字滑动(个人中心效果)',
35 | dataArr: titleData,
36 | callBack: (index, str) {
37 | JhNavUtils.pushNamed(context, routeData[index]);
38 | },
39 | );
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/lib/demos/topTabBar/top_tabbar_test1_page.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: avoid_print
2 |
3 | import 'package:flutter/material.dart';
4 | import '/jh_common/widgets/jh_top_tabbar.dart';
5 |
6 | class TopTabBarTest1Page extends StatefulWidget {
7 | const TopTabBarTest1Page({Key? key}) : super(key: key);
8 |
9 | @override
10 | State createState() => _TopTabBarTest1PageState();
11 | }
12 |
13 | class _TopTabBarTest1PageState extends State {
14 | List model = [
15 | JhTopTabBarModel(
16 | title: '标题一',
17 | widget: Container(
18 | alignment: Alignment.center,
19 | child: Text('页面一', textScaler: TextScaler.linear(3)),
20 | ),
21 | ),
22 | JhTopTabBarModel(
23 | title: '标题二',
24 | widget: Container(
25 | alignment: Alignment.center,
26 | child: Text('页面二', textScaler: TextScaler.linear(3)),
27 | ),
28 | ),
29 | ];
30 |
31 | @override
32 | Widget build(BuildContext context) {
33 | return JhTopTabBar(
34 | title: '标题',
35 | tabModelArr: model,
36 | showCenterLine: true,
37 | rightText: '添加',
38 | rightItemCallBack: () {
39 | print('点击右侧nav');
40 | },
41 | switchPageCallBack: (index) {
42 | print('切换到第$index页');
43 | },
44 | );
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/demos/topTabBar/top_tabbar_test4_page.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: unused_local_variable, unused_element, unused_field
2 | // ignore_for_file: avoid_print
3 |
4 | import 'package:flutter/material.dart';
5 | import '/jh_common/widgets/jh_top_tabbar.dart';
6 | import './content_page.dart';
7 |
8 | class TopTabBarTest4Page extends StatefulWidget {
9 | const TopTabBarTest4Page({Key? key}) : super(key: key);
10 |
11 | @override
12 | State createState() => _TopTabBarTest4PageState();
13 | }
14 |
15 | class _TopTabBarTest4PageState extends State {
16 | List model = [
17 | const JhTopTabBarModel(title: '标题一', widget: ContentPage()),
18 | const JhTopTabBarModel(title: '标题二', widget: ContentPage()),
19 | ];
20 |
21 | @override
22 | Widget build(BuildContext context) {
23 | return JhTopTabBar(
24 | title: '标题',
25 | tabModelArr: model,
26 | showCenterLine: true,
27 | rightText: '添加',
28 | rightItemCallBack: () {
29 | print('点击右侧nav');
30 | },
31 | switchPageCallBack: (index) {
32 | print('切换到第$index页');
33 | },
34 | );
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lib/demos/ui/ui_demo_list_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/jh_common/widgets/jh_text_list.dart';
3 | import '/project/routes/jh_nav_utils.dart';
4 |
5 | final List titleData = ['UI', 'UI2', 'Material3 Test', 'Scroll', 'Grammar'];
6 | final List routeData = ['UIPage', 'UIPage2', 'UIPage3', 'ScrollPage', 'GrammarTestPage'];
7 |
8 | class UIDemoListPage extends StatelessWidget {
9 | const UIDemoListPage({super.key});
10 |
11 | @override
12 | Widget build(BuildContext context) {
13 | return JhTextList(
14 | title: 'UITest',
15 | dataArr: titleData,
16 | callBack: (index, str) {
17 | JhNavUtils.pushNamed(context, routeData[index]);
18 | },
19 | );
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/lib/http/apis.dart:
--------------------------------------------------------------------------------
1 | /// apis.dart
2 | ///
3 | /// Created by iotjin on 2020/07/07.
4 | /// description: api管理
5 |
6 | class APIs {
7 | /// url 前缀
8 | static const String apiPrefix = 'https://console-mock.apipost.cn/mock/e7a66e3e-1b07-4902-9beb-366dd35ae67d/v1/api';
9 |
10 | /// 登录接口
11 | static const String login = '/mock/login';
12 |
13 | /// 刷新token
14 | static const String refreshToken = '/mock/refreshToken';
15 |
16 | /// 获取分页数据
17 | static const String getPage = '/mock/pages';
18 |
19 | /// 获取分页分组数据
20 | static const String getGroupPage = '/mock/groupPages';
21 |
22 | /// 获取固定数据
23 | static const String getSimpleDictList = '/mock/simpleDictList';
24 |
25 | /// 获取固定数据
26 | static const String getSimpleDict = '/mock/dict';
27 |
28 | /// 微信朋友圈
29 | static const String getFriendsCircleList = '/mock/wx/moments';
30 | }
31 |
--------------------------------------------------------------------------------
/lib/jh_common/jh_form/jh_form.dart:
--------------------------------------------------------------------------------
1 | export 'package:keyboard_actions/keyboard_actions.dart';
2 | export 'jh_count_down_btn.dart';
3 | export 'jh_form_input_cell.dart';
4 | export 'jh_form_select_cell.dart';
5 | export 'jh_form_utils.dart';
6 | export 'jh_keyboard_utils.dart';
7 | export 'jh_login_text_field.dart';
8 | export 'jh_searchbar.dart';
9 | export 'jh_set_cell.dart';
10 | export 'jh_text_field.dart';
11 |
--------------------------------------------------------------------------------
/lib/jh_common/jh_form/jh_keyboard_utils.dart:
--------------------------------------------------------------------------------
1 | /// jh_keyboard_utils.dart
2 | ///
3 | /// Created by iotjin on 2020/04/10.
4 | /// description: 键盘配置
5 |
6 | import 'package:flutter/material.dart';
7 | import 'package:keyboard_actions/keyboard_actions.dart';
8 | import '/project/configs/colors.dart';
9 |
10 | class JhKeyboardUtils {
11 | /// 三方键盘配置
12 | static KeyboardActionsConfig getKeyboardConfig(BuildContext context, List list) {
13 | return KeyboardActionsConfig(
14 | // keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
15 | keyboardBarColor: context.jhIsDark ? Colors.grey[800] : Colors.grey[200],
16 | nextFocus: true,
17 | actions: List.generate(
18 | list.length,
19 | (i) => KeyboardActionsItem(
20 | focusNode: list[i],
21 | toolbarButtons: [
22 | (node) {
23 | return GestureDetector(
24 | onTap: () => node.unfocus(),
25 | child: Stack(
26 | alignment: Alignment.centerRight,
27 | children: [
28 | Container(color: Colors.transparent, width: 100),
29 | const Positioned(right: 15, child: Text('关闭')),
30 | ],
31 | ),
32 | );
33 | },
34 | ],
35 | )),
36 | );
37 | }
38 |
39 | static void unFocus() {
40 | // 关闭键盘方法:FocusScope.of(context).requestFocus(FocusNode());
41 | // 使用下面的方式,会触发不必要的build。
42 | // FocusScope.of(context).unFocus();
43 | // https://github.com/flutter/flutter/issues/47128#issuecomment-627551073
44 | FocusManager.instance.primaryFocus?.unfocus();
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/jh_common/utils/jh_monitor_network_utils.dart:
--------------------------------------------------------------------------------
1 | /// jh_monitor_network_utils.dart
2 | ///
3 | /// Created by iotjin on 2020/07/02.
4 | /// description: 网络监测
5 |
6 | // ignore_for_file: body_might_complete_normally_nullable, avoid_print
7 |
8 | import 'package:connectivity_plus/connectivity_plus.dart';
9 |
10 | class JhMonitorNetworkUtils {
11 | /// 是否有网
12 | static Future isNetwork() async {
13 | var connectivityResult = await (Connectivity().checkConnectivity());
14 | return connectivityResult != ConnectivityResult.none;
15 | }
16 |
17 | /// 获取网络状态:0 无网络,1 手机,2 wifi
18 | static Future getNetworkStatus() async {
19 | var connectivityResult = await (Connectivity().checkConnectivity());
20 | if (connectivityResult == ConnectivityResult.mobile) {
21 | // 网络类型为移动网络
22 | return 1;
23 | } else if (connectivityResult == ConnectivityResult.wifi) {
24 | // 网络类型为WIFI
25 | return 2;
26 | } else {
27 | return 0;
28 | }
29 | }
30 |
31 | static String? monitorNetwork() {
32 | Connectivity().onConnectivityChanged.listen((event) {
33 | print(event);
34 | });
35 | }
36 |
37 | /// 定义一个异步生成器
38 | static Stream connectChangeListener() async* {
39 | final Connectivity connectivity = Connectivity();
40 |
41 | // 遍历onConnectivityChanged 构成的 Stream
42 | await for (List results in connectivity.onConnectivityChanged) {
43 | // 状态发生改变后将状态值添加到Stream数据流中
44 | for (ConnectivityResult result in results) {
45 | yield result;
46 | }
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lib/jh_common/utils/jh_string_utils.dart:
--------------------------------------------------------------------------------
1 | /// jh_string_utils.dart
2 | ///
3 | /// Created by iotjin on 2020/03/25.
4 | /// description: 字符串工具类
5 |
6 | class JhStringUtils {
7 | /// num类型转String类型整数
8 | static String toIntStr(num? value) {
9 | return (value ?? 0).toInt().toString();
10 | }
11 |
12 | /// String类型转num类型,为空转成0
13 | static num toNum(String? value) {
14 | return num.tryParse(value ?? '') ?? 0;
15 | // if (value == null || value.length <= 0) {
16 | // return 0;
17 | // } else {
18 | // return num.parse(value);
19 | // }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/lib/jh_common/utils/jh_theme_utils.dart:
--------------------------------------------------------------------------------
1 | /// jh_storage_utils.dart
2 | ///
3 | /// Created by iotjin on 2020/07/28.
4 | /// description: 主题
5 |
6 | import 'package:flutter/material.dart';
7 | import 'package:flutter/scheduler.dart';
8 | import '/project/configs/colors.dart';
9 |
10 | /// 未使用
11 | /// 主题配置在 lib/project/configs/colors.dart 和 lib/project/provider/theme_provider.dart
12 | class JhThemeUtils {
13 | /// 暗黑模式判断
14 | static bool isDark(BuildContext context) {
15 | return Theme.of(context).brightness == Brightness.dark;
16 | }
17 |
18 | /// 暗黑模式判断
19 | static bool jhIsDark() {
20 | // final brightness = SchedulerBinding.instance.window.platformBrightness; // “window”已弃用
21 | final brightness = SchedulerBinding.instance.platformDispatcher.platformBrightness;
22 | bool isDarkMode = brightness == Brightness.dark;
23 | return isDarkMode;
24 | }
25 |
26 | static Color? getDarkColor(BuildContext context, Color darkColor) {
27 | return isDark(context) ? darkColor : null;
28 | }
29 |
30 | static Color? getIconColor(BuildContext context) {
31 | return isDark(context) ? Colours.dark_text : null;
32 | }
33 |
34 | static Color getBackgroundColor(BuildContext context) {
35 | return Theme.of(context).scaffoldBackgroundColor;
36 | }
37 |
38 | static Color getDialogBackgroundColor(BuildContext context) {
39 | return Theme.of(context).canvasColor;
40 | }
41 |
42 | static Color getStickyHeaderColor(BuildContext context) {
43 | return isDark(context) ? Colours.dark_bg_gray_ : Colours.bg_gray_;
44 | }
45 |
46 | static Color getDialogTextFieldColor(BuildContext context) {
47 | return isDark(context) ? Colours.dark_bg_gray_ : Colours.bg_gray;
48 | }
49 |
50 | static Color? getKeyboardActionsColor(BuildContext context) {
51 | return isDark(context) ? Colours.dark_bg_color : Colors.grey[200];
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lib/jh_common/utils/jh_utc_time_utils.dart:
--------------------------------------------------------------------------------
1 | /// jh_utc_time_utils.dart
2 | ///
3 | /// Created by iotjin on 2020/03/25.
4 | /// description: utc时间工具类
5 |
6 | import 'package:date_format/date_format.dart';
7 | import 'package:intl/intl.dart';
8 |
9 | class JhUTCTimeUtils {
10 | /// utc时间转本地时间
11 | /// utcTime: 2023-07-18T02:04:27.9268823
12 | /// 返回格式:10:04 18/07/2023
13 | static String utcToLocalTime(String utcTime, [List? formats]) {
14 | // DateTime dateTime0 = DateTime.parse('2023-07-18T02:04:27.9268823');
15 | // // 计算本地时区的时间偏移(以分钟为单位)
16 | // int offset = DateTime.now().timeZoneOffset.inMinutes;
17 | // DateTime dateTime2 = dateTime0.add(Duration(minutes: offset));
18 | // print('dateTime2: ${dateTime2}');
19 |
20 | DateTime utcDateTime = DateTime.parse(utcTime);
21 | // local time
22 | DateTime dateTime = DateFormat("yyyy-MM-dd HH:mm:ss").parse(utcDateTime.toString(), true).toLocal();
23 | // print('local: ${dateTime}');
24 | return formatDate(dateTime, [HH, ':', nn, ' ', dd, '/', mm, '/', yyyy]);
25 | }
26 |
27 | /// utc时间转本地时间
28 | /// utcTime: 2023-07-18T02:04:27.9268823
29 | /// 返回格式:18/07/2023
30 | static String utcToLocalDateSlash(String utcTime, [List? formats]) {
31 | DateTime utcDateTime = DateTime.parse(utcTime);
32 | // local time
33 | DateTime dateTime = DateFormat("yyyy-MM-dd HH:mm:ss").parse(utcDateTime.toString(), true).toLocal();
34 | // print('local: ${dateTime}');
35 | return formatDate(dateTime, [dd, '/', mm, '/', yyyy]);
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/lib/jh_common/widgets/jh_badge.dart:
--------------------------------------------------------------------------------
1 | /// jh_badge.dart
2 | ///
3 | /// Created by iotjin on 2023/03/26.
4 | /// description: badges封装
5 |
6 | import 'package:flutter/material.dart';
7 | import 'package:badges/badges.dart' as badges;
8 |
9 | class JhBadge extends StatelessWidget {
10 | const JhBadge({
11 | Key? key,
12 | this.showBadge = true,
13 | this.child,
14 | this.padding = const EdgeInsets.all(4.0),
15 | this.topValue = -4,
16 | this.endValue = -4,
17 | this.badgeContent,
18 | this.toAnimate = true,
19 | this.badgeColor = Colors.red,
20 | }) : super(key: key);
21 |
22 | final bool showBadge;
23 | final Widget? child;
24 | final EdgeInsetsGeometry padding;
25 | final double topValue;
26 | final double endValue;
27 | final Widget? badgeContent;
28 | final bool toAnimate;
29 | final Color badgeColor;
30 |
31 | @override
32 | Widget build(BuildContext context) {
33 | return _body();
34 | }
35 |
36 | _body() {
37 | return badges.Badge(
38 | showBadge: showBadge,
39 | badgeStyle: badges.BadgeStyle(
40 | padding: padding,
41 | badgeColor: badgeColor,
42 | ),
43 | position: badges.BadgePosition.topEnd(top: topValue, end: endValue),
44 | badgeAnimation: badges.BadgeAnimation.slide(toAnimate: toAnimate),
45 | badgeContent: badgeContent,
46 | child: child,
47 | );
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lib/jh_common/widgets/jh_gradient_btn.dart:
--------------------------------------------------------------------------------
1 | /// jh_gradient_btn.dart
2 | ///
3 | /// Created by iotjin on 2020/02/07.
4 | /// description: 渐变色按钮
5 |
6 | import 'package:flutter/material.dart';
7 | import '/project/configs/colors.dart';
8 |
9 | const double _fontSize = 20.0; // 文字大小
10 | const double _borderRadius = 5.0; // 边框圆角
11 | const Color _textColor = Colors.white; // 默认按钮文字颜色
12 | const Color startColor = KColors.kGradientStartColor; // 默认渐变开始色
13 | const Color endColor = KColors.kGradientEndColor; // 默认渐变结束色
14 |
15 | class JhGradientBtn extends StatelessWidget {
16 | const JhGradientBtn({
17 | Key? key,
18 | required this.text,
19 | this.width = 150,
20 | this.height = 50,
21 | this.onTap,
22 | }) : super(key: key);
23 |
24 | final String text;
25 | final double? width;
26 | final double? height;
27 | final GestureTapCallback? onTap;
28 |
29 | @override
30 | Widget build(BuildContext context) {
31 | return GestureDetector(
32 | onTap: onTap,
33 | child: Container(
34 | width: width,
35 | height: height,
36 | decoration: BoxDecoration(
37 | borderRadius: BorderRadius.circular(_borderRadius),
38 | gradient: const LinearGradient(
39 | begin: Alignment.topCenter,
40 | end: Alignment.bottomCenter,
41 | colors: [
42 | startColor, // 渐变 开始色
43 | endColor, // 结束色
44 | ],
45 | ),
46 | ),
47 | child: Center(child: Text(text, style: const TextStyle(fontSize: _fontSize, color: _textColor))),
48 | ),
49 | );
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/lib/jh_common/widgets/jh_scrollview.dart:
--------------------------------------------------------------------------------
1 | /// jh_scrollview.dart
2 | ///
3 | /// Created by iotjin on 2023/01/28.
4 | /// description: 可滚动视图
5 |
6 | import 'package:flutter/material.dart';
7 |
8 | /// web端同时使用 Scrollbar、SingleChildScrollView控制台报错: 添加ScrollController
9 | /// https://stackoverflow.com/questions/69853729/flutter-the-scrollbars-scrollcontroller-has-no-scrollposition-attached
10 | class JhScrollView extends StatefulWidget {
11 | const JhScrollView({
12 | Key? key,
13 | required this.child,
14 | this.controller,
15 | }) : super(key: key);
16 | final Widget child;
17 |
18 | final ScrollController? controller;
19 |
20 | @override
21 | State createState() => _JhScrollViewState();
22 | }
23 |
24 | class _JhScrollViewState extends State {
25 | late ScrollController _scrollController;
26 |
27 | @override
28 | void initState() {
29 | // TODO: implement initState
30 | super.initState();
31 |
32 | _scrollController = widget.controller ?? ScrollController();
33 | }
34 |
35 | @override
36 | Widget build(BuildContext context) {
37 | return Scrollbar(
38 | controller: _scrollController,
39 | child: SingleChildScrollView(
40 | controller: _scrollController,
41 | child: _body(),
42 | ),
43 | );
44 | }
45 |
46 | _body() {
47 | return widget.child;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/lib/jh_common/widgets/progress_dialog.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/cupertino.dart';
2 | import 'package:flutter/material.dart';
3 |
4 | /// 加载中的弹框
5 | class ProgressDialog extends Dialog {
6 | const ProgressDialog({
7 | Key? key,
8 | this.hintText = '',
9 | }) : super(key: key);
10 |
11 | final String hintText;
12 |
13 | @override
14 | Widget build(BuildContext context) {
15 | Widget progress = Column(
16 | mainAxisAlignment: MainAxisAlignment.center,
17 | children: [
18 | Theme(
19 | data: ThemeData(
20 | cupertinoOverrideTheme: const CupertinoThemeData(
21 | brightness: Brightness.dark, // 局部指定夜间模式,加载圈颜色会设置为白色
22 | ),
23 | ),
24 | child: const CupertinoActivityIndicator(radius: 14.0),
25 | ),
26 | const SizedBox(height: 8),
27 | Text(hintText, style: const TextStyle(color: Colors.white))
28 | ],
29 | );
30 |
31 | return Material(
32 | type: MaterialType.transparency,
33 | child: Center(
34 | child: Container(
35 | height: 88.0,
36 | width: 120.0,
37 | decoration: const ShapeDecoration(
38 | color: Color(0xFF3A3A3A),
39 | shape: RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(8.0))),
40 | ),
41 | child: progress,
42 | ),
43 | ),
44 | );
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/project/configs/common.dart:
--------------------------------------------------------------------------------
1 | /// common.dart
2 | ///
3 | /// Created by iotjin on 2023/08/17.
4 | /// description:
5 |
6 | import 'package:intl/intl.dart';
7 |
8 | class CommonUtils {
9 | static toLocaleString(num? num) {
10 | return NumberFormat().format(num);
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/lib/project/configs/dimens.dart:
--------------------------------------------------------------------------------
1 | /// dimens.dart
2 | ///
3 | /// Created by iotjin on 2020/07/06.
4 | /// description: 字体 配置
5 |
6 | // ignore_for_file: constant_identifier_names
7 |
8 | class KDimens {
9 | static const double font_sp10 = 10.0;
10 | static const double font_sp12 = 12.0;
11 | static const double font_sp14 = 14.0;
12 | static const double font_sp15 = 15.0;
13 | static const double font_sp16 = 16.0;
14 | static const double font_sp18 = 18.0;
15 |
16 | static const double gap_dp4 = 4;
17 | static const double gap_dp5 = 5;
18 | static const double gap_dp8 = 8;
19 | static const double gap_dp10 = 10;
20 | static const double gap_dp12 = 12;
21 | static const double gap_dp15 = 15;
22 | static const double gap_dp16 = 16;
23 | static const double gap_dp24 = 24;
24 | static const double gap_dp32 = 32;
25 | static const double gap_dp50 = 50;
26 | }
27 |
--------------------------------------------------------------------------------
/lib/project/configs/gaps.dart:
--------------------------------------------------------------------------------
1 | /// gaps.dart
2 | ///
3 | /// Created by iotjin on 2020/07/06.
4 | /// description: 间隔
5 |
6 | import 'dimens.dart';
7 | import 'package:flutter/material.dart';
8 |
9 | class KGaps {
10 | /// 水平间隔
11 | static const Widget hGap4 = SizedBox(width: KDimens.gap_dp4);
12 | static const Widget hGap5 = SizedBox(width: KDimens.gap_dp5);
13 | static const Widget hGap8 = SizedBox(width: KDimens.gap_dp8);
14 | static const Widget hGap10 = SizedBox(width: KDimens.gap_dp10);
15 | static const Widget hGap12 = SizedBox(width: KDimens.gap_dp12);
16 | static const Widget hGap15 = SizedBox(width: KDimens.gap_dp15);
17 | static const Widget hGap16 = SizedBox(width: KDimens.gap_dp16);
18 | static const Widget hGap32 = SizedBox(width: KDimens.gap_dp32);
19 |
20 | /// 垂直间隔
21 | static const Widget vGap4 = SizedBox(height: KDimens.gap_dp4);
22 | static const Widget vGap5 = SizedBox(height: KDimens.gap_dp5);
23 | static const Widget vGap8 = SizedBox(height: KDimens.gap_dp8);
24 | static const Widget vGap10 = SizedBox(height: KDimens.gap_dp10);
25 | static const Widget vGap12 = SizedBox(height: KDimens.gap_dp12);
26 | static const Widget vGap15 = SizedBox(height: KDimens.gap_dp15);
27 | static const Widget vGap16 = SizedBox(height: KDimens.gap_dp16);
28 | static const Widget vGap24 = SizedBox(height: KDimens.gap_dp24);
29 | static const Widget vGap32 = SizedBox(height: KDimens.gap_dp32);
30 | static const Widget vGap50 = SizedBox(height: KDimens.gap_dp50);
31 |
32 | // static Widget line = const SizedBox(
33 | // height: 0.6,
34 | // width: double.infinity,
35 | // child: const DecoratedBox(decoration: BoxDecoration(color: Colours.line)),
36 | // );
37 |
38 | static const Widget line = Divider();
39 |
40 | static const Widget vLine = SizedBox(
41 | width: 0.6,
42 | height: 24.0,
43 | child: VerticalDivider(),
44 | );
45 |
46 | static const Widget empty = SizedBox.shrink();
47 | }
48 |
--------------------------------------------------------------------------------
/lib/project/configs/project_config.dart:
--------------------------------------------------------------------------------
1 | /// project_config.dart
2 | ///
3 | /// Created by iotjin on 2020/05/07.
4 | /// description: 项目的一些全局配置项,数据持久化使用的key
5 |
6 | // ignore_for_file: constant_identifier_names
7 |
8 | export 'colors.dart';
9 | export 'dimens.dart';
10 | export 'gaps.dart';
11 | export 'strings.dart';
12 | export 'styles.dart';
13 |
14 | export '/http/apis.dart';
15 | export '/http/http_utils.dart';
16 | export '/http/log_utils.dart';
17 | export '/jh_common/utils/jh_color_utils.dart';
18 | export '/jh_common/utils/jh_extension.dart';
19 | export '/jh_common/utils/jh_string_utils.dart';
20 | export '/jh_common/utils/jh_screen_utils.dart';
21 | export '/jh_common/widgets/jh_progress_hud.dart';
22 | export '/project/routes/jh_nav_utils.dart';
23 | export '/base_appbar.dart';
24 |
25 | export 'package:get/get.dart';
26 | export '/intl/intl_config.dart';
27 |
28 | double wxCellH = 55.0;
29 | double wxRowSpace = 6.0;
30 |
31 | /// ******************************* 数据存储 相关 ********************************
32 |
33 | // 保存本地的用户model
34 | const kUserDefault_UserInfo = 'UserInfo';
35 | // 上次版本号
36 | const kUserDefault_LastVersion = 'kUserDefault_LastVersion';
37 |
--------------------------------------------------------------------------------
/lib/project/configs/strings.dart:
--------------------------------------------------------------------------------
1 | /// strings.dart
2 | ///
3 | /// Created by iotjin on 2020/07/06.
4 | /// description: 字符串配置
5 |
6 | import 'package:flutter/cupertino.dart';
7 |
8 | class KStrings {
9 | // 默认 屏幕像素 基于该像素进行适配
10 | static const double deviceHeightPix = 1920;
11 | static const double deviceWidthPix = 1080;
12 |
13 | // 主界面切换使用到的文本
14 | static const String oneTabTitle = '微信';
15 | static const String twoTabTitle = '通讯录';
16 | static const String threeTabTitle = '发现';
17 | static const String fourTabTitle = '我的';
18 |
19 | static const String wxPersonInfo = '个人信息';
20 | static const String wxPay = '支付';
21 | static const String wxPayManager = '支付管理';
22 |
23 | static const String testTitle = 'DemoList';
24 |
25 | static GlobalKey navigatorKey = GlobalKey();
26 |
27 | // 使用
28 | // Future.delayed(Duration(milliseconds: 200), () {
29 | // BuildContext context = KStrings.navigatorKey.currentContext!;
30 | // });
31 |
32 | static String headBgImage = 'https://picsum.photos/800/200';
33 | // static const String headBgImage = 'https://placekitten.com/800/200';
34 | static const String headBgImage2 = 'https://picsum.photos/500/500';
35 | static const String avatarImage = 'https://picsum.photos/300/300'; // 'https://picsum.photos/300/300?random=$index'
36 | }
37 |
--------------------------------------------------------------------------------
/lib/project/four/four_page.dart:
--------------------------------------------------------------------------------
1 | /// four_page.dart
2 | ///
3 | /// Created by iotjin on 2019/08/14.
4 | /// description: 我的
5 |
6 | import 'package:flutter/material.dart';
7 | import './pages/wx_mine_page.dart';
8 |
9 | class FourPage extends StatefulWidget {
10 | const FourPage({Key? key}) : super(key: key);
11 |
12 | @override
13 | State createState() => _FourPageState();
14 | }
15 |
16 | class _FourPageState extends State with AutomaticKeepAliveClientMixin {
17 | @override
18 | bool get wantKeepAlive => true;
19 |
20 | @override
21 | void initState() {
22 | // TODO: implement initState
23 | super.initState();
24 | }
25 |
26 | @override
27 | Widget build(BuildContext context) {
28 | super.build(context);
29 |
30 | return const WxMinePage();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/project/four/models/wx_pay_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_pay_model.dart
2 | ///
3 | /// Created by iotjin on 2020/08/27.
4 | /// description: 微信支付 model
5 |
6 | class WxPayModel {
7 | String? title;
8 | List? funcList;
9 |
10 | WxPayModel({
11 | this.title,
12 | this.funcList,
13 | });
14 |
15 | WxPayModel.fromJson(Map json) {
16 | title = json['title'];
17 | if (json['funcList'] != null) {
18 | funcList = [];
19 | json['funcList'].forEach((v) {
20 | funcList!.add(FuncList.fromJson(v));
21 | });
22 | }
23 | }
24 |
25 | Map toJson() {
26 | final Map data = {};
27 | data['title'] = title;
28 | if (funcList != null) {
29 | data['funcList'] = funcList!.map((v) => v.toJson()).toList();
30 | }
31 | return data;
32 | }
33 | }
34 |
35 | class FuncList {
36 | String? text;
37 | String? img;
38 | String? pushName;
39 |
40 | FuncList({
41 | this.text,
42 | this.img,
43 | this.pushName,
44 | });
45 |
46 | FuncList.fromJson(Map json) {
47 | text = json['text'];
48 | img = json['img'];
49 | pushName = json['pushName'];
50 | }
51 |
52 | Map toJson() {
53 | final Map data = {};
54 | data['text'] = text;
55 | data['img'] = img;
56 | data['pushName'] = pushName;
57 | return data;
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/lib/project/login/login_router.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluro/fluro.dart';
2 | import '/project/routes/router_init.dart';
3 | import '/project/login/pages/login_page.dart';
4 | import '/project/login/pages/register_page.dart';
5 | import '/project/login/pages/find_pwd_page.dart';
6 | import '/project/login/pages/code_login_page.dart';
7 | import '/project/new_feature/new_feature_page.dart';
8 | import '/project/new_feature/full_screen_swiper_widget.dart';
9 |
10 | class LoginRouter implements IRouterProvider {
11 | static String pLoginPage = 'LoginPage';
12 |
13 | @override
14 | void initRouter(FluroRouter router) {
15 | router.define(pLoginPage, handler: Handler(handlerFunc: (_, __) => const LoginPage()));
16 | router.define('RegisterPage', handler: Handler(handlerFunc: (_, __) => const RegisterPage()));
17 | router.define('FindPwdPage', handler: Handler(handlerFunc: (_, __) => const FindPwdPage()));
18 | router.define('CodeLoginPage', handler: Handler(handlerFunc: (_, __) => const CodeLoginPage()));
19 |
20 | router.define('NewFeaturePage', handler: Handler(handlerFunc: (_, __) => const NewFeaturePage()));
21 | router.define('FullScreenSwiperWidget', handler: Handler(handlerFunc: (_, __) => const FullScreenSwiperWidget()));
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/project/model/user_model.dart:
--------------------------------------------------------------------------------
1 | /// user_model.dart
2 | ///
3 | /// Created by iotjin on 2020/05/07.
4 | /// description: 用户信息model
5 |
6 | class UserModel {
7 | String? userID;
8 | String? userName;
9 | String? phone;
10 | String? pwd;
11 | String? token;
12 | String? avatarUrl;
13 | String? sex; // 0男,1女
14 | String? region;
15 | String? nickName; // 昵称
16 |
17 | UserModel({
18 | this.userID,
19 | this.userName,
20 | this.phone,
21 | this.pwd,
22 | this.token,
23 | this.avatarUrl,
24 | this.sex,
25 | this.region,
26 | this.nickName,
27 | });
28 |
29 | UserModel.fromJson(Map json) {
30 | userID = json['userID'];
31 | userName = json['userName'];
32 | phone = json['phone'];
33 | pwd = json['pwd'];
34 | token = json['token'];
35 | avatarUrl = json['avatarUrl'];
36 | sex = json['sex'];
37 | region = json['region'];
38 | nickName = json['nickName'];
39 | }
40 |
41 | Map toJson() {
42 | final Map data = {};
43 | data['userID'] = userID;
44 | data['userName'] = userName;
45 | data['phone'] = phone;
46 | data['pwd'] = pwd;
47 | data['token'] = token;
48 | data['avatarUrl'] = avatarUrl;
49 | data['sex'] = sex;
50 | data['region'] = region;
51 | data['nickName'] = nickName;
52 | return data;
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/lib/project/one/models/wx_home_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_home_model.dart
2 | ///
3 | /// Created by iotjin on 2019/08/14.
4 | /// description: 微信首页 model
5 |
6 | class WxHomeModel {
7 | String? title;
8 | String? subtitle;
9 | String? img;
10 | String? time;
11 | bool? isNew;
12 | String? type;
13 |
14 | WxHomeModel({
15 | this.title,
16 | this.subtitle,
17 | this.img,
18 | this.time,
19 | this.isNew,
20 | this.type,
21 | });
22 |
23 | WxHomeModel.fromJson(Map json) {
24 | title = json['title'];
25 | subtitle = json['subtitle'];
26 | img = json['img'];
27 | time = json['time'];
28 | isNew = json['isNew'];
29 | type = json['type'];
30 | }
31 |
32 | Map toJson() {
33 | final Map data = {};
34 | data['title'] = title;
35 | data['subtitle'] = subtitle;
36 | data['img'] = img;
37 | data['time'] = time;
38 | data['isNew'] = isNew;
39 | data['type'] = type;
40 | return data;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/project/one/models/wx_motion_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_motion_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/09.
4 | /// description: 微信运动 model
5 |
6 | class WxMotionModel {
7 | String? time;
8 | String? ranking;
9 | String? steps;
10 | String? img;
11 | String? text;
12 | String? color;
13 |
14 | WxMotionModel({
15 | this.time,
16 | this.ranking,
17 | this.steps,
18 | this.img,
19 | this.text,
20 | this.color,
21 | });
22 |
23 | WxMotionModel.fromJson(Map json) {
24 | time = json['time'];
25 | ranking = json['ranking'];
26 | steps = json['steps'];
27 | img = json['img'];
28 | text = json['text'];
29 | color = json['color'];
30 | }
31 |
32 | Map toJson() {
33 | final Map data = {};
34 | data['time'] = time;
35 | data['ranking'] = ranking;
36 | data['steps'] = steps;
37 | data['img'] = img;
38 | data['text'] = text;
39 | data['color'] = color;
40 | return data;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/project/one/models/wx_motion_top_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_motion_top_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/09.
4 | /// description: 微信运动排行榜 model
5 |
6 | class WxMotionTopModel {
7 | int? id;
8 | String? name;
9 | String? color;
10 | int? steps;
11 | bool? isStar;
12 | int? starNum;
13 | bool? isOwn;
14 |
15 | WxMotionTopModel({
16 | this.id,
17 | this.name,
18 | this.color,
19 | this.steps,
20 | this.isStar,
21 | this.starNum,
22 | this.isOwn,
23 | });
24 |
25 | WxMotionTopModel.fromJson(Map json) {
26 | id = json['id'];
27 | name = json['name'];
28 | color = json['color'];
29 | steps = json['steps'];
30 | isStar = json['isStar'];
31 | starNum = json['starNum'];
32 | isOwn = json['isOwn'];
33 | }
34 |
35 | Map toJson() {
36 | final Map data = {};
37 | data['id'] = id;
38 | data['name'] = name;
39 | data['color'] = color;
40 | data['steps'] = steps;
41 | data['isStar'] = isStar;
42 | data['starNum'] = starNum;
43 | data['isOwn'] = isOwn;
44 | return data;
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/project/one/models/wx_qq_message_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_qq_message_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/09.
4 | /// description: QQ邮箱提醒 model
5 |
6 | class WxQQMessageModel {
7 | String? title;
8 | String? subtitle;
9 |
10 | WxQQMessageModel({
11 | this.title,
12 | this.subtitle,
13 | });
14 |
15 | WxQQMessageModel.fromJson(Map json) {
16 | title = json['title'];
17 | subtitle = json['subtitle'];
18 | }
19 |
20 | Map toJson() {
21 | final Map data = {};
22 | data['title'] = title;
23 | data['subtitle'] = subtitle;
24 | return data;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/lib/project/one/models/wx_subscription_number_list_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_subscription_number_list_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/03.
4 | /// description: 订阅号列表 model
5 |
6 | class WxSubscriptionNumberListModel {
7 | String? title;
8 | String? subtitle;
9 | String? img;
10 | String? time;
11 |
12 | WxSubscriptionNumberListModel({
13 | this.title,
14 | this.subtitle,
15 | this.img,
16 | this.time,
17 | });
18 |
19 | WxSubscriptionNumberListModel.fromJson(Map json) {
20 | title = json['title'];
21 | subtitle = json['subtitle'];
22 | img = json['img'];
23 | time = json['time'];
24 | }
25 |
26 | Map toJson() {
27 | final Map data = {};
28 | data['title'] = title;
29 | data['subtitle'] = subtitle;
30 | data['img'] = img;
31 | data['time'] = time;
32 | return data;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/lib/project/one/models/wx_subscription_number_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_subscription_number_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/03.
4 | /// description: 订阅号消息 model
5 |
6 | class WxSubscriptionNumberModel {
7 | String? title;
8 | String? subtitle;
9 | String? time;
10 | String? img1;
11 | String? text2;
12 | String? img2;
13 |
14 | WxSubscriptionNumberModel({
15 | this.title,
16 | this.subtitle,
17 | this.time,
18 | this.img1,
19 | this.text2,
20 | this.img2,
21 | });
22 |
23 | WxSubscriptionNumberModel.fromJson(Map json) {
24 | title = json['title'];
25 | subtitle = json['subtitle'];
26 | time = json['time'];
27 | img1 = json['img1'];
28 | text2 = json['text2'];
29 | img2 = json['img2'];
30 | }
31 |
32 | Map toJson() {
33 | final Map data = {};
34 | data['title'] = title;
35 | data['subtitle'] = subtitle;
36 | data['time'] = time;
37 | data['img1'] = img1;
38 | data['text2'] = text2;
39 | data['img2'] = img2;
40 | return data;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/project/one/one_page.dart:
--------------------------------------------------------------------------------
1 | /// one_page.dart
2 | ///
3 | /// Created by iotjin on 2019/08/14.
4 | /// description: 首页
5 |
6 | import 'package:flutter/material.dart';
7 | import './pages/wx_home_page.dart';
8 |
9 | class OnePage extends StatefulWidget {
10 | const OnePage({Key? key}) : super(key: key);
11 |
12 | @override
13 | State createState() => _OnePageState();
14 | }
15 |
16 | class _OnePageState extends State {
17 | @override
18 | Widget build(BuildContext context) {
19 | return const WxHomePage();
20 | }
21 | }
22 |
23 | /*
24 | --enable-software-rendering
25 |
26 | Flutter中的Offstage与Visibility都可以将子widget进行隐藏,
27 | 不同的是Visibility可以设置隐藏之后是否还占据原来的控件、设置隐藏后是否响应事件,
28 | Offstage隐藏后之前所占的空间就会消失。
29 |
30 | 一、Offstage
31 |
32 | Offstage中控制显示隐藏的重要属性是offstage,默认为true。当offstage 为true时,其child控件是隐藏的。
33 |
34 | 二、Visibility
35 |
36 | Visibility构造器
37 |
38 | const Visibility({
39 | Key key,
40 | @required this.child,
41 | this.replacement = const SizedBox.shrink(), // 不可见时显示的组件,只有maintainState=false才会显示。
42 | this.visible = true, // 是否可见
43 | this.maintainState = false, // 隐藏后是否位置组件状态
44 | this.maintainAnimation = false, // 隐藏后是否维持子组件中的动画
45 | this.maintainSize = false, // 隐藏后所占空间是否释放
46 | this.maintainSemantics = false,
47 | this.maintainInteractivity = false, // 隐藏后是否能够照常响应事件
48 | })
49 |
50 | */
51 |
--------------------------------------------------------------------------------
/lib/project/one/widgets/wx_qq_message_cell.dart:
--------------------------------------------------------------------------------
1 | /// wx_qq_message_cell.dart
2 | ///
3 | /// Created by iotjin on 2020/09/09.
4 | /// description: QQ邮箱提醒 cell
5 |
6 | import 'package:flutter/material.dart';
7 | import '/project/configs/project_config.dart';
8 | import '../models/wx_qq_message_model.dart';
9 |
10 | class WxQQMessageCell extends StatelessWidget {
11 | const WxQQMessageCell({
12 | Key? key,
13 | required this.model,
14 | this.onClickCell,
15 | }) : super(key: key);
16 |
17 | final WxQQMessageModel model;
18 | final Function(dynamic model)? onClickCell;
19 |
20 | @override
21 | Widget build(BuildContext context) {
22 | return _cell(context);
23 | }
24 |
25 | _cell(context) {
26 | return Card(
27 | margin: const EdgeInsets.fromLTRB(15, 5, 15, 5),
28 | // 设置圆角
29 | shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10.0)),
30 | // 抗锯齿
31 | clipBehavior: Clip.antiAlias,
32 | // 普通的边
33 | // shape: Border.all(color: Colors.yellow, width: 5.0),
34 | elevation: 3,
35 | // 阴影大小
36 | child: Container(
37 | color: KColors.dynamicColor(context, KColors.kCellBgColor, KColors.kCellBgDarkColor),
38 | child: ListTile(
39 | title: Text(model.title.jhNullSafe),
40 | subtitle: Text(model.subtitle.jhNullSafe),
41 | onTap: () => onClickCell?.call(model.toJson()),
42 | ),
43 | ),
44 | );
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/lib/project/provider/tabbar_provider.dart:
--------------------------------------------------------------------------------
1 | /// tabbar_provider.dart
2 | ///
3 | /// Created by iotjin on 2022/09/06.
4 | /// description:
5 |
6 | import 'package:flutter/material.dart';
7 |
8 | class TabbarProvider extends ChangeNotifier {
9 | int _currentIndex = 0;
10 |
11 | int get currentIndex => _currentIndex;
12 |
13 | set currentIndex(int index) {
14 | _currentIndex = index;
15 | notifyListeners();
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/lib/project/routes/not_found_page.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import '/base_appbar.dart';
3 |
4 | class NotFoundPage extends StatelessWidget {
5 | const NotFoundPage({Key? key}) : super(key: key);
6 |
7 | @override
8 | Widget build(BuildContext context) {
9 | return const Scaffold(
10 | appBar: BaseAppBar('页面不存在'),
11 | );
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/lib/project/routes/router_init.dart:
--------------------------------------------------------------------------------
1 | import 'package:fluro/fluro.dart';
2 |
3 | abstract class IRouterProvider {
4 | void initRouter(FluroRouter router);
5 | }
6 |
--------------------------------------------------------------------------------
/lib/project/routes/routes.dart:
--------------------------------------------------------------------------------
1 | /// routes.dart
2 | ///
3 | /// Created by iotjin on 2020/03/18.
4 | /// description: 路由管理
5 |
6 | import 'package:flutter/material.dart';
7 | import 'package:fluro/fluro.dart';
8 | import 'router_init.dart';
9 | import 'not_found_page.dart';
10 | import '/jh_common/widgets/base_web_view.dart';
11 | import '/project/base_tabbar.dart';
12 | import '/project/login/login_router.dart';
13 | import '/project/main_router.dart';
14 | import '/demos/demos_router.dart';
15 |
16 | class Routes {
17 | static String pHome = '/home';
18 | static String pWebViewPage = '/webView';
19 | static String pDemoListPage = 'DemoListPage';
20 |
21 | static final List _listRouter = [];
22 |
23 | static final FluroRouter router = FluroRouter();
24 |
25 | static void initRoutes() {
26 | /// 指定路由跳转错误返回页
27 | router.notFoundHandler = Handler(handlerFunc: (BuildContext? context, Map> params) {
28 | debugPrint('未找到目标页');
29 | return const NotFoundPage();
30 | });
31 |
32 | router.define(pHome,
33 | handler: Handler(handlerFunc: (BuildContext? context, Map> params) =>const BaseTabBar()));
34 |
35 | router.define(pWebViewPage, handler: Handler(handlerFunc: (_, params) {
36 | final String title = params['title']?.first ?? '';
37 | final String url = params['url']?.first ?? '';
38 | return BaseWebView(title: title, url: url);
39 | }));
40 |
41 | _listRouter.clear();
42 |
43 | // 各自路由由各自模块管理,统一在此添加初始化
44 | _listRouter.add(LoginRouter());
45 | _listRouter.add(DemosRouter());
46 | _listRouter.add(MainRouter());
47 |
48 | /// 初始化路由
49 | void initRouter(IRouterProvider routerProvider) {
50 | routerProvider.initRouter(router);
51 | }
52 |
53 | _listRouter.forEach(initRouter);
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/lib/project/three/models/wx_friends_circle_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_friends_circle_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/14.
4 | /// description: 朋友圈 model
5 |
6 | class WxFriendsCircleModel {
7 | int? id;
8 | String? name;
9 | String? color;
10 | String? content;
11 | String? time;
12 | List? images;
13 |
14 | WxFriendsCircleModel({
15 | this.id,
16 | this.name,
17 | this.color,
18 | this.content,
19 | this.time,
20 | this.images,
21 | });
22 |
23 | WxFriendsCircleModel.fromJson(Map json) {
24 | id = json['id'];
25 | name = json['name'];
26 | color = json['color'];
27 | content = json['content'];
28 | time = json['time'];
29 | images = json['images'].cast();
30 | }
31 |
32 | Map toJson() {
33 | final Map data = {};
34 | data['id'] = id;
35 | data['name'] = name;
36 | data['color'] = color;
37 | data['content'] = content;
38 | data['time'] = time;
39 | data['images'] = images;
40 | return data;
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/lib/project/three/three_page.dart:
--------------------------------------------------------------------------------
1 | /// three_page.dart
2 | ///
3 | /// Created by iotjin on 2019/08/14.
4 | /// description: 发现
5 |
6 | import 'package:flutter/material.dart';
7 | import './pages/wx_discover_page.dart';
8 |
9 | class ThreePage extends StatelessWidget {
10 | const ThreePage({super.key});
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | return const WxDiscoverPage();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/lib/project/two/models/wx_add_friend_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_add_friend_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/01.
4 | /// description: 添加朋友 model
5 |
6 | class WxAddFriendModel {
7 | String? title;
8 | String? subtitle;
9 | String? img;
10 |
11 | WxAddFriendModel({
12 | this.title,
13 | this.subtitle,
14 | this.img,
15 | });
16 |
17 | WxAddFriendModel.fromJson(Map json) {
18 | title = json['title'];
19 | subtitle = json['subtitle'];
20 | img = json['img'];
21 | }
22 |
23 | Map toJson() {
24 | final Map data = {};
25 | data['title'] = title;
26 | data['subtitle'] = subtitle;
27 | data['img'] = img;
28 | return data;
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/lib/project/two/models/wx_contacts_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_contacts_model.dart
2 | ///
3 | /// Created by iotjin on 2019/08/14.
4 | /// description: 微信通讯录 model
5 |
6 | import 'package:azlistview/azlistview.dart';
7 |
8 | class WxContactsModel extends ISuspensionBean {
9 | int? id;
10 | String? name; // 昵称
11 | String? tagIndex;
12 | String? namePinyin;
13 | String? phone;
14 | String? avatarUrl;
15 | String? sex; // 0男,1女
16 | String? region;
17 | String? label;
18 | String? color;
19 | String? img;
20 | bool? isStar;
21 |
22 | WxContactsModel({
23 | this.id,
24 | this.name,
25 | this.tagIndex,
26 | this.namePinyin,
27 | this.phone,
28 | this.avatarUrl,
29 | this.sex,
30 | this.region,
31 | this.label,
32 | this.color,
33 | this.img,
34 | this.isStar,
35 | });
36 |
37 | WxContactsModel.fromJson(Map json) {
38 | id = json['id'];
39 | name = json['name'];
40 | tagIndex = json['tagIndex'];
41 | namePinyin = json['namePinyin'];
42 | phone = json['phone'];
43 | avatarUrl = json['avatarUrl'];
44 | sex = json['sex'];
45 | region = json['region'];
46 | label = json['label'];
47 | color = json['color'];
48 | img = json['img'];
49 | isStar = json['isStar'];
50 | }
51 |
52 | Map toJson() {
53 | final Map data = {};
54 | data['id'] = id;
55 | data['name'] = name;
56 | data['tagIndex'] = tagIndex;
57 | data['namePinyin'] = namePinyin;
58 | data['phone'] = phone;
59 | data['avatarUrl'] = avatarUrl;
60 | data['sex'] = sex;
61 | data['region'] = region;
62 | data['label'] = label;
63 | data['color'] = color;
64 | data['img'] = img;
65 | data['isStar'] = isStar;
66 | return data;
67 | }
68 |
69 | @override
70 | String getSuspensionTag() => tagIndex!;
71 | }
72 |
--------------------------------------------------------------------------------
/lib/project/two/models/wx_new_friend_model.dart:
--------------------------------------------------------------------------------
1 | /// wx_new_friend_model.dart
2 | ///
3 | /// Created by iotjin on 2020/09/01.
4 | /// description: 新的朋友 model
5 |
6 | class WxNewFriendModel {
7 | String? title;
8 | String? subtitle;
9 | String? img;
10 | bool? isAdd;
11 |
12 | WxNewFriendModel({
13 | this.title,
14 | this.subtitle,
15 | this.img,
16 | this.isAdd,
17 | });
18 |
19 | WxNewFriendModel.fromJson(Map json) {
20 | title = json['title'];
21 | subtitle = json['subtitle'];
22 | img = json['img'];
23 | isAdd = json['isAdd'];
24 | }
25 |
26 | Map toJson() {
27 | final Map data = {};
28 | data['title'] = title;
29 | data['subtitle'] = subtitle;
30 | data['img'] = img;
31 | data['isAdd'] = isAdd;
32 | return data;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/lib/project/two/two_page.dart:
--------------------------------------------------------------------------------
1 | /// two_page.dart
2 | ///
3 | /// Created by iotjin on 2019/08/14.
4 | /// description: 通讯录
5 |
6 | import 'package:flutter/material.dart';
7 | import './pages/wx_contacts_page.dart';
8 |
9 | class TwoPage extends StatefulWidget {
10 | const TwoPage({Key? key}) : super(key: key);
11 |
12 | @override
13 | State createState() => _TwoPageState();
14 | }
15 |
16 | class _TwoPageState extends State with AutomaticKeepAliveClientMixin {
17 | @override
18 | bool get wantKeepAlive => true;
19 |
20 | @override
21 | void initState() {
22 | // TODO: implement initState
23 | super.initState();
24 | }
25 |
26 | @override
27 | Widget build(BuildContext context) {
28 | super.build(context);
29 |
30 | return const WxContactsPage();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/project/two/widgets/wx_add_friend_cell.dart:
--------------------------------------------------------------------------------
1 | /// wx_add_friend_cell.dart
2 | ///
3 | /// Created by iotjin on 2020/09/01.
4 | /// description: 添加朋友 cell
5 |
6 | import 'package:flutter/material.dart';
7 | import '/project/configs/project_config.dart';
8 | import '../models/wx_add_friend_model.dart';
9 |
10 | class WxAddFriendCell extends StatelessWidget {
11 | const WxAddFriendCell({
12 | Key? key,
13 | required this.model,
14 | this.onClickCell,
15 | }) : super(key: key);
16 |
17 | final WxAddFriendModel model;
18 | final Function(dynamic model)? onClickCell;
19 |
20 | @override
21 | Widget build(BuildContext context) {
22 | return _cell(context);
23 | }
24 |
25 | _cell(context) {
26 | return Column(
27 | mainAxisAlignment: MainAxisAlignment.start,
28 | crossAxisAlignment: CrossAxisAlignment.start,
29 | children: [
30 | Container(
31 | color: KColors.dynamicColor(context, KColors.kCellBgColor, KColors.kCellBgDarkColor),
32 | child: ListTile(
33 | onTap: () => onClickCell?.call(model.toJson()),
34 | leading: CircleAvatar(backgroundImage: AssetImage(model.img!)),
35 | title: Text(model.title.jhNullSafe, style: const TextStyle(color: KColors.wxTextBlueColor)),
36 | subtitle: Text(model.subtitle.jhNullSafe),
37 | trailing: const Icon(Icons.arrow_forward_ios),
38 | ),
39 | ),
40 | SizedBox(
41 | width: 70,
42 | height: 1,
43 | child: Container(color: KColors.dynamicColor(context, KColors.kLineColor, KColors.kLineDarkColor)),
44 | )
45 | ],
46 | );
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/lib/res/JsonData2:
--------------------------------------------------------------------------------
1 | {
2 | "code": "0",
3 | "message": "success",
4 | "data": [
5 | {
6 | "mallSubId": "2c9f6c94621970a801626a35cb4d0175",
7 | "mallCategoryId": "4",
8 | "mallSubName": "名酒",
9 | "comments": ""
10 | },
11 | {
12 | "mallSubId": "2c9f6c94621970a801626a363e5a0176",
13 | "mallCategoryId": "4",
14 | "mallSubName": "宝丰",
15 | "comments": ""
16 | },
17 | {
18 | "mallSubId": "2c9f6c94679b4fb10167f7de126815d7",
19 | "mallCategoryId": "4",
20 | "mallSubName": "竹叶青",
21 | "comments": "null"
22 | }
23 | ],
24 | "comments": "null"
25 | }
--------------------------------------------------------------------------------
/lib/res/test.json:
--------------------------------------------------------------------------------
1 | {
2 | "code": 1,
3 | "msg": "",
4 | "data": {
5 | }
6 | }
--------------------------------------------------------------------------------
/test/widget_test.dart:
--------------------------------------------------------------------------------
1 | // This is a basic Flutter widget test.
2 | //
3 | // To perform an interaction with a widget in your test, use the WidgetTester
4 | // utility that Flutter provides. For example, you can send tap and scroll
5 | // gestures. You can also use WidgetTester to find child widgets in the widget
6 | // tree, read text, and verify that the values of widget properties are correct.
7 |
8 | import 'package:flutter/material.dart';
9 | import 'package:flutter_test/flutter_test.dart';
10 |
11 | import 'package:jh_flutter_demo/main.dart';
12 |
13 | void main() {
14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async {
15 | // Build our app and trigger a frame.
16 | await tester.pumpWidget(const MyApp());
17 |
18 | // Verify that our counter starts at 0.
19 | expect(find.text('0'), findsOneWidget);
20 | expect(find.text('1'), findsNothing);
21 |
22 | // Tap the '+' icon and trigger a frame.
23 | await tester.tap(find.byIcon(Icons.add));
24 | await tester.pump();
25 |
26 | // Verify that our counter has incremented.
27 | expect(find.text('0'), findsNothing);
28 | expect(find.text('1'), findsOneWidget);
29 | });
30 | }
31 |
--------------------------------------------------------------------------------
/web/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/web/favicon.png
--------------------------------------------------------------------------------
/web/icons/Icon-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/web/icons/Icon-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/web/icons/Icon-512.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/web/icons/Icon-maskable-192.png
--------------------------------------------------------------------------------
/web/icons/Icon-maskable-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/iotjin/jh_flutter_demo/d649a14f3622bb96c71b5cc603ade0f8aa13fd59/web/icons/Icon-maskable-512.png
--------------------------------------------------------------------------------
/web/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "jh_flutter_demo",
3 | "short_name": "jh_flutter_demo",
4 | "start_url": ".",
5 | "display": "standalone",
6 | "background_color": "#0175C2",
7 | "theme_color": "#0175C2",
8 | "description": "A new Flutter project.",
9 | "orientation": "portrait-primary",
10 | "prefer_related_applications": false,
11 | "icons": [
12 | {
13 | "src": "icons/Icon-192.png",
14 | "sizes": "192x192",
15 | "type": "image/png"
16 | },
17 | {
18 | "src": "icons/Icon-512.png",
19 | "sizes": "512x512",
20 | "type": "image/png"
21 | },
22 | {
23 | "src": "icons/Icon-maskable-192.png",
24 | "sizes": "192x192",
25 | "type": "image/png",
26 | "purpose": "maskable"
27 | },
28 | {
29 | "src": "icons/Icon-maskable-512.png",
30 | "sizes": "512x512",
31 | "type": "image/png",
32 | "purpose": "maskable"
33 | }
34 | ]
35 | }
36 |
--------------------------------------------------------------------------------