├── .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 | --------------------------------------------------------------------------------