├── 我.png ├── flutter_for_weibo ├── ios │ ├── Flutter │ │ ├── .last_build_id │ │ ├── Debug.xcconfig │ │ ├── Release.xcconfig │ │ └── AppFrameworkInfo.plist │ ├── Runner │ │ ├── Runner-Bridging-Header.h │ │ ├── Assets.xcassets │ │ │ ├── LaunchImage.imageset │ │ │ │ ├── LaunchImage.png │ │ │ │ ├── LaunchImage@2x.png │ │ │ │ ├── LaunchImage@3x.png │ │ │ │ ├── README.md │ │ │ │ └── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ ├── 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-1024x1024@1x.png │ │ │ │ ├── Icon-App-83.5x83.5@2x.png │ │ │ │ └── Contents.json │ │ ├── AppDelegate.swift │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── Info.plist │ ├── Runner.xcodeproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── Runner.xcscheme │ ├── Runner.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── .gitignore │ ├── Podfile.lock │ └── Podfile ├── lib │ ├── images │ │ ├── 1.png │ │ ├── 2.png │ │ ├── 3.png │ │ ├── 4.png │ │ ├── 5.png │ │ ├── ad.png │ │ ├── at.png │ │ ├── bag.png │ │ ├── give.png │ │ ├── hand.png │ │ ├── line.png │ │ ├── logo.png │ │ ├── pic.png │ │ ├── rss.png │ │ ├── star.png │ │ ├── zan.png │ │ ├── zan1.png │ │ ├── zero.png │ │ ├── card1.png │ │ ├── card2.png │ │ ├── card3.png │ │ ├── center.png │ │ ├── check.png │ │ ├── check1.png │ │ ├── check2.png │ │ ├── check3.png │ │ ├── comment.png │ │ ├── heart.png │ │ ├── history.png │ │ ├── leijun.png │ │ ├── mayun.png │ │ ├── mobile.png │ │ ├── msg_add.png │ │ ├── pujing.png │ │ ├── qianbao.png │ │ ├── school.png │ │ ├── spring.png │ │ ├── story.png │ │ ├── biergaici.png │ │ ├── caixukun.png │ │ ├── fansstory.png │ │ ├── liudehua.png │ │ ├── mine_scan.png │ │ ├── supercar.png │ │ ├── telangpu.png │ │ ├── menu_weibo.webp │ │ ├── mine_setting.png │ │ ├── supertopic.png │ │ ├── tabbar_home.png │ │ ├── wanglihong.png │ │ ├── mine_addfriend.png │ │ ├── btn_back_black_n.webp │ │ ├── message_btn_more.webp │ │ ├── mini_small_logo.png │ │ ├── popover_icon_live.png │ │ ├── tabbar_discover.png │ │ ├── tabbar_profile.webp │ │ ├── video_icon_album.png │ │ ├── messagescenter_at.webp │ │ ├── share_group_qqzone.webp │ │ ├── story_redpack_head.webp │ │ ├── timeline_image_gif.png │ │ ├── timeline_image_live.png │ │ ├── toolbar_icon_addhi.png │ │ ├── toolbar_icon_album.webp │ │ ├── messagescenter_good.webp │ │ ├── messagescenter_groups.webp │ │ ├── share_group_wxfirend.png │ │ ├── story_play_icon_wechat.png │ │ ├── tabbar_message_center.webp │ │ ├── timeline_image_replay.png │ │ ├── timeline_image_wares.png │ │ ├── toolbar_icon_addfriend.png │ │ ├── video_list_edit_wrong.png │ │ ├── wbshop_focus_user_bg.webp │ │ ├── welcome_android_logo.webp │ │ ├── welcome_android_slogan.png │ │ ├── claw_navigationbar_more.png │ │ ├── messagescenter_comments.png │ │ ├── photoalbum_ic_menu_top.webp │ │ ├── settings_guide_at_dot.9.png │ │ ├── tabbar_compose_idea_neo.png │ │ ├── tabbar_compose_live_neo.png │ │ ├── tabbar_compose_movie_neo.png │ │ ├── tabbar_compose_music_neo.png │ │ ├── tabbar_compose_video_neo.png │ │ ├── tabbar_home_highlighted.webp │ │ ├── tabbar_video_highlighted.png │ │ ├── timeline_image_longimage.png │ │ ├── toolbar_icon_addtogroup.png │ │ ├── video_list_edit_loading.png │ │ ├── wblive_icon_wechat_light.png │ │ ├── artical_detail_icon_like.webp │ │ ├── artical_detail_icon_liked.webp │ │ ├── artical_detail_icon_repost.png │ │ ├── composer_video_icon_album.png │ │ ├── messagescenter_messagebox.webp │ │ ├── more_icon_zhifubao_friend.webp │ │ ├── morecover_icon_membership.webp │ │ ├── navigationbar_icon_qrcode_2.png │ │ ├── navigationbar_search_voice.webp │ │ ├── photoalbum_ic_menu_save_pic.png │ │ ├── photoalbum_sticker_delete.png │ │ ├── tabbar_compose_capture_neo.png │ │ ├── tabbar_compose_comment_neo.png │ │ ├── tabbar_compose_friends_neo.png │ │ ├── tabbar_compose_friends_qa.webp │ │ ├── tabbar_compose_location_neo.png │ │ ├── tabbar_compose_miaopai_neo.png │ │ ├── tabbar_compose_picture_neo.png │ │ ├── tabbar_compose_shopping_neo.png │ │ ├── tabbar_compose_topic_neo.webp │ │ ├── tabbar_discover_highlighted.png │ │ ├── tabbar_profile_highlighted.webp │ │ ├── userinfo_membership_level6.webp │ │ ├── video_manage_notify_close.png │ │ ├── videotab_watch_icon_control.png │ │ ├── videotab_watch_icon_history.png │ │ ├── artical_detail_icon_comment.webp │ │ ├── messagescenter_subscription.webp │ │ ├── navigationbar_arrow_down_new.webp │ │ ├── navigationbar_search_voice_hl.png │ │ ├── tabbar_compose_redpacket_neo.png │ │ ├── tabbar_compose_slideshow_neo.png │ │ ├── toolbar_icon_addtogroup_added.png │ │ ├── video_interact_icon_download.png │ │ ├── wblive_showcase_ic_recommend.png │ │ ├── medialive_showcase_ic_recommend.webp │ │ ├── navigationbar_icon_add_friends.png │ │ ├── wblive_icon_wechat_moment_light.png │ │ ├── message_search_liaotianjilu_weibo.webp │ │ ├── navigationbar_icon_inform_setting.webp │ │ ├── tabbar_message_center_highlighted.webp │ │ ├── message_search_liaotianjilu_picture.webp │ │ ├── message_search_liaotianjilu_wenjian.webp │ │ ├── navigationbar_icon_newchat_clearaway.png │ │ ├── navigationbar_icon_qrcode_highlight.png │ │ ├── photoalbum_ic_menu_show_original_pic.png │ │ ├── photoalbum_sticker_delete_highlighted.png │ │ ├── photoalbum_timeline_line_video_play.webp │ │ ├── message_search_liaotianjilu_weibo_light.png │ │ ├── userinfo_me_relationship_indicator_plus.png │ │ ├── userinfo_me_relationship_indicator_tick.png │ │ ├── message_search_liaotianjilu_picture_light.png │ │ ├── message_search_liaotianjilu_wenjian__light.png │ │ ├── navigationbar_icon_newchat_clearaway_press.png │ │ ├── photoalbum_ic_menu_topic_essence_normal.webp │ │ ├── userinfo_me_relationship_indicator_meyou.webp │ │ └── photoalbum_ic_menu_topic_essence_highlight.webp │ ├── routes │ │ ├── application.dart │ │ ├── router_handlers.dart │ │ ├── navigation_util.dart │ │ ├── routes.dart │ │ ├── find │ │ │ └── FindRoute.dart │ │ ├── video │ │ │ └── VideoRoute.dart │ │ ├── login │ │ │ └── LoginRoute.dart │ │ ├── bottomTabbar │ │ │ ├── BottomTabbarRoute.dart │ │ │ └── MainRoute.dart │ │ ├── mine │ │ │ └── MineRoute.dart │ │ └── message │ │ │ └── MessageRoute.dart │ ├── common │ │ ├── utils │ │ │ ├── WBParser.dart │ │ │ └── CacheUtil.dart │ │ ├── network │ │ │ ├── HttpCacheConfig.dart │ │ │ ├── HttpCacheInterceptor.dart │ │ │ ├── Network.dart │ │ │ └── HttpService.dart │ │ └── Global.dart │ ├── main.dart │ ├── widgets │ │ ├── Browser.dart │ │ ├── Tabbar.dart │ │ ├── CustomNavBar.dart │ │ └── WBMediaWidget.dart │ ├── items │ │ ├── MessageItem.dart │ │ ├── weiboItem.dart │ │ ├── WBCheckItem.dart │ │ ├── MineFooterItem.dart │ │ ├── VisitHistoryItem.dart │ │ ├── PublicWelfareItem.dart │ │ ├── SuperTopicItem.dart │ │ ├── CategoryItem.dart │ │ └── MineHeaderItem.dart │ └── models │ │ └── WeiBoCard.dart ├── android │ ├── gradle.properties │ ├── .gitignore │ ├── app │ │ ├── src │ │ │ ├── main │ │ │ │ ├── res │ │ │ │ │ ├── mipmap-hdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-mdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ │ │ └── ic_launcher.png │ │ │ │ │ ├── values │ │ │ │ │ │ └── styles.xml │ │ │ │ │ └── drawable │ │ │ │ │ │ └── launch_background.xml │ │ │ │ ├── kotlin │ │ │ │ │ └── com │ │ │ │ │ │ └── example │ │ │ │ │ │ └── flutter_for_weibo │ │ │ │ │ │ └── MainActivity.kt │ │ │ │ └── AndroidManifest.xml │ │ │ ├── debug │ │ │ │ └── AndroidManifest.xml │ │ │ └── profile │ │ │ │ └── AndroidManifest.xml │ │ └── build.gradle │ ├── gradle │ │ └── wrapper │ │ │ └── gradle-wrapper.properties │ ├── settings.gradle │ └── build.gradle ├── .metadata ├── .vscode │ ├── launch.json │ └── settings.json ├── README.md ├── .gitignore ├── test │ └── widget_test.dart ├── pubspec.yaml └── pubspec.lock ├── 消息.png ├── WX20200712-224750@2x.png ├── WX20200712-224932@2x.png └── README.md /我.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/我.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Flutter/.last_build_id: -------------------------------------------------------------------------------- 1 | 9ab5889f32a0655a55f0e5d3675ea094 -------------------------------------------------------------------------------- /消息.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/消息.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" -------------------------------------------------------------------------------- /WX20200712-224750@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/WX20200712-224750@2x.png -------------------------------------------------------------------------------- /WX20200712-224932@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/WX20200712-224932@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/1.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/2.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/3.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/4.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/5.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/ad.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/at.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/at.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/bag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/bag.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/give.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/give.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/hand.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/line.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/line.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/logo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/pic.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/rss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/rss.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/star.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/zan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/zan.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/zan1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/zan1.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/zero.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/zero.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/application.dart: -------------------------------------------------------------------------------- 1 | import 'package:fluro/fluro.dart'; 2 | class Application { 3 | static Router router; 4 | } -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/card1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/card1.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/card2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/card2.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/card3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/card3.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/center.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/check.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/check1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/check1.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/check2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/check2.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/check3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/check3.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/comment.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/comment.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/heart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/heart.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/history.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/leijun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/leijun.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/mayun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/mayun.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/mobile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/mobile.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/msg_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/msg_add.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/pujing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/pujing.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/qianbao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/qianbao.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/school.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/school.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/spring.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/spring.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/story.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/story.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/biergaici.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/biergaici.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/caixukun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/caixukun.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/fansstory.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/fansstory.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/liudehua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/liudehua.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/mine_scan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/mine_scan.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/supercar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/supercar.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/telangpu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/telangpu.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/menu_weibo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/menu_weibo.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/mine_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/mine_setting.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/supertopic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/supertopic.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_home.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/wanglihong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/wanglihong.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/mine_addfriend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/mine_addfriend.png -------------------------------------------------------------------------------- /flutter_for_weibo/android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.enableR8=true 3 | android.useAndroidX=true 4 | android.enableJetifier=true 5 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/btn_back_black_n.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/btn_back_black_n.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/message_btn_more.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/message_btn_more.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/mini_small_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/mini_small_logo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/popover_icon_live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/popover_icon_live.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_discover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_discover.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_profile.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_profile.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/video_icon_album.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/video_icon_album.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/messagescenter_at.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/messagescenter_at.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/share_group_qqzone.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/share_group_qqzone.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/story_redpack_head.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/story_redpack_head.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/timeline_image_gif.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/timeline_image_gif.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/timeline_image_live.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/timeline_image_live.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/toolbar_icon_addhi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/toolbar_icon_addhi.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/toolbar_icon_album.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/toolbar_icon_album.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/messagescenter_good.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/messagescenter_good.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/messagescenter_groups.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/messagescenter_groups.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/share_group_wxfirend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/share_group_wxfirend.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/story_play_icon_wechat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/story_play_icon_wechat.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_message_center.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_message_center.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/timeline_image_replay.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/timeline_image_replay.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/timeline_image_wares.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/timeline_image_wares.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/toolbar_icon_addfriend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/toolbar_icon_addfriend.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/video_list_edit_wrong.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/video_list_edit_wrong.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/wbshop_focus_user_bg.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/wbshop_focus_user_bg.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/welcome_android_logo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/welcome_android_logo.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/welcome_android_slogan.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/welcome_android_slogan.png -------------------------------------------------------------------------------- /flutter_for_weibo/android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/claw_navigationbar_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/claw_navigationbar_more.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/messagescenter_comments.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/messagescenter_comments.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_ic_menu_top.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_ic_menu_top.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/settings_guide_at_dot.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/settings_guide_at_dot.9.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_idea_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_idea_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_live_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_live_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_movie_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_movie_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_music_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_music_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_video_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_video_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_home_highlighted.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_home_highlighted.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_video_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_video_highlighted.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/timeline_image_longimage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/timeline_image_longimage.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/toolbar_icon_addtogroup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/toolbar_icon_addtogroup.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/video_list_edit_loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/video_list_edit_loading.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/wblive_icon_wechat_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/wblive_icon_wechat_light.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/artical_detail_icon_like.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/artical_detail_icon_like.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/artical_detail_icon_liked.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/artical_detail_icon_liked.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/artical_detail_icon_repost.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/artical_detail_icon_repost.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/composer_video_icon_album.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/composer_video_icon_album.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/messagescenter_messagebox.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/messagescenter_messagebox.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/more_icon_zhifubao_friend.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/more_icon_zhifubao_friend.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/morecover_icon_membership.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/morecover_icon_membership.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_icon_qrcode_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_icon_qrcode_2.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_search_voice.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_search_voice.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_ic_menu_save_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_ic_menu_save_pic.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_sticker_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_sticker_delete.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_capture_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_capture_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_comment_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_comment_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_friends_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_friends_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_friends_qa.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_friends_qa.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_location_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_location_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_miaopai_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_miaopai_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_picture_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_picture_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_shopping_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_shopping_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_topic_neo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_topic_neo.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_discover_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_discover_highlighted.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_profile_highlighted.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_profile_highlighted.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/userinfo_membership_level6.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/userinfo_membership_level6.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/video_manage_notify_close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/video_manage_notify_close.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/videotab_watch_icon_control.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/videotab_watch_icon_control.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/videotab_watch_icon_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/videotab_watch_icon_history.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/artical_detail_icon_comment.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/artical_detail_icon_comment.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/messagescenter_subscription.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/messagescenter_subscription.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_arrow_down_new.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_arrow_down_new.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_search_voice_hl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_search_voice_hl.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_redpacket_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_redpacket_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_compose_slideshow_neo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_compose_slideshow_neo.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/toolbar_icon_addtogroup_added.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/toolbar_icon_addtogroup_added.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/video_interact_icon_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/video_interact_icon_download.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/wblive_showcase_ic_recommend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/wblive_showcase_ic_recommend.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/medialive_showcase_ic_recommend.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/medialive_showcase_ic_recommend.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_icon_add_friends.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_icon_add_friends.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/wblive_icon_wechat_moment_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/wblive_icon_wechat_moment_light.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/message_search_liaotianjilu_weibo.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/message_search_liaotianjilu_weibo.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_icon_inform_setting.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_icon_inform_setting.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/tabbar_message_center_highlighted.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/tabbar_message_center_highlighted.webp -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/message_search_liaotianjilu_picture.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/message_search_liaotianjilu_picture.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/message_search_liaotianjilu_wenjian.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/message_search_liaotianjilu_wenjian.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_icon_newchat_clearaway.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_icon_newchat_clearaway.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_icon_qrcode_highlight.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_icon_qrcode_highlight.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_ic_menu_show_original_pic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_ic_menu_show_original_pic.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_sticker_delete_highlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_sticker_delete_highlighted.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_timeline_line_video_play.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_timeline_line_video_play.webp -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/message_search_liaotianjilu_weibo_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/message_search_liaotianjilu_weibo_light.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/userinfo_me_relationship_indicator_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/userinfo_me_relationship_indicator_plus.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/userinfo_me_relationship_indicator_tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/userinfo_me_relationship_indicator_tick.png -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/message_search_liaotianjilu_picture_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/message_search_liaotianjilu_picture_light.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/message_search_liaotianjilu_wenjian__light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/message_search_liaotianjilu_wenjian__light.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/navigationbar_icon_newchat_clearaway_press.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/navigationbar_icon_newchat_clearaway_press.png -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_ic_menu_topic_essence_normal.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_ic_menu_topic_essence_normal.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/userinfo_me_relationship_indicator_meyou.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/userinfo_me_relationship_indicator_meyou.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/images/photoalbum_ic_menu_topic_essence_highlight.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/lib/images/photoalbum_ic_menu_topic_essence_highlight.webp -------------------------------------------------------------------------------- /flutter_for_weibo/lib/common/utils/WBParser.dart: -------------------------------------------------------------------------------- 1 | //解析微博数据 2 | 3 | 4 | class WBParser{ 5 | 6 | WBParser(this.wbString); 7 | 8 | String wbString; 9 | 10 | startParse(){ 11 | 12 | } 13 | 14 | 15 | } -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sea777777/flutter_for_weibo/HEAD/flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/common/network/HttpCacheConfig.dart: -------------------------------------------------------------------------------- 1 | 2 | 3 | class HttpCacheConfig{ 4 | 5 | //是否开启缓存 6 | bool get enable => true; 7 | 8 | //最大缓存数量 9 | int get maxCount => 500; 10 | 11 | //最大缓存天数 12 | int get maxDay => 3; 13 | 14 | } -------------------------------------------------------------------------------- /flutter_for_weibo/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-5.6.2-all.zip 7 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /flutter_for_weibo/.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 and should not be manually edited. 5 | 6 | version: 7 | revision: f139b11009aeb8ed2a3a3aa8b0066e482709dde3 8 | channel: stable 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /flutter_for_weibo/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. -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/router_handlers.dart: -------------------------------------------------------------------------------- 1 | import 'package:fluro/fluro.dart'; 2 | 3 | import 'bottomTabbar/BottomTabbarRoute.dart'; 4 | import 'Login/LoginRoute.dart'; 5 | 6 | 7 | // 登录页 8 | Handler loginHandler = Handler(handlerFunc: (context, parameters) { 9 | return LoginRoute(); 10 | },); 11 | 12 | // 登录页 13 | Handler homeHandler = Handler(handlerFunc: (context, parameters) { 14 | return BottomTabbarRoute(); 15 | },); -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | -------------------------------------------------------------------------------- /flutter_for_weibo/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | "version": "0.2.0", 6 | "configurations": [ 7 | { 8 | "name": "Flutter", 9 | "request": "launch", 10 | "type": "dart" 11 | } 12 | ] 13 | } -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/navigation_util.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'application.dart'; 4 | import 'routes.dart'; 5 | class NavigatorUtil { 6 | 7 | // 首页 8 | static void goHomePage(BuildContext context) { 9 | Application.router.navigateTo(context, Routes.home); 10 | } 11 | 12 | // 登录页 13 | static void goLoginPage(BuildContext context) { 14 | Application.router.navigateTo(context, Routes.login); 15 | } 16 | } -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import Flutter 3 | 4 | @UIApplicationMain 5 | @objc class AppDelegate: FlutterAppDelegate { 6 | override func application( 7 | _ application: UIApplication, 8 | didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? 9 | ) -> Bool { 10 | GeneratedPluginRegistrant.register(with: self) 11 | return super.application(application, didFinishLaunchingWithOptions: launchOptions) 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/kotlin/com/example/flutter_for_weibo/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.flutter_for_weibo 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 | class MainActivity: FlutterActivity() { 9 | override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) { 10 | GeneratedPluginRegistrant.registerWith(flutterEngine); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "LaunchImage.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "LaunchImage@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "LaunchImage@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def flutterProjectRoot = rootProject.projectDir.parentFile.toPath() 4 | 5 | def plugins = new Properties() 6 | def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins') 7 | if (pluginsFile.exists()) { 8 | pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) } 9 | } 10 | 11 | plugins.each { name, path -> 12 | def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile() 13 | include ":$name" 14 | project(":$name").projectDir = pluginDirectory 15 | } 16 | -------------------------------------------------------------------------------- /flutter_for_weibo/README.md: -------------------------------------------------------------------------------- 1 | # flutter_for_weibo 2 | 3 | 基于Flutter编写的微博app,支持微博真实账号登录,查看热门微博、科技、游戏、股市等众多板块 4 | 5 | 6 | ## Getting Started 7 | 8 | This project is a starting point for a Flutter application. 9 | 10 | A few resources to get you started if this is your first Flutter project: 11 | 12 | - [Lab: Write your first Flutter app](https://flutter.dev/docs/get-started/codelab) 13 | - [Cookbook: Useful Flutter samples](https://flutter.dev/docs/cookbook) 14 | 15 | For help getting started with Flutter, view our 16 | [online documentation](https://flutter.dev/docs), which offers tutorials, 17 | samples, guidance on mobile development, and a full API reference. 18 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_for_weibo/routes/application.dart'; 4 | import 'package:fluro/fluro.dart'; 5 | import 'package:flutter_for_weibo/routes/routes.dart'; 6 | 7 | void main() { 8 | Router router = Router(); 9 | Routes.configureRoutes(router); 10 | Application.router = router; 11 | 12 | runApp(MyApp()); 13 | } 14 | 15 | class MyApp extends StatelessWidget { 16 | @override 17 | Widget build(BuildContext context) { 18 | return MaterialApp( 19 | theme: ThemeData( 20 | primarySwatch: Colors.blue, 21 | ), 22 | onGenerateRoute: Application.router.generator, 23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /flutter_for_weibo/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 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/routes.dart: -------------------------------------------------------------------------------- 1 | import 'package:fluro/fluro.dart'; 2 | import 'router_handlers.dart'; 3 | 4 | class Routes { 5 | // 跟路由 登录页 6 | static String root = '/'; 7 | // 首页 8 | static String home = '/home'; 9 | // 登录页 10 | static String login = '/login'; 11 | 12 | 13 | // 注册路由 14 | static void configureRoutes(Router router) { 15 | // 未找到路由 16 | router.notFoundHandler = Handler(handlerFunc: (context, parameters) { 17 | print('route not found'); 18 | }); 19 | // 根目录是登录页 20 | router.define(root, handler: loginHandler); 21 | // 首页 22 | router.define(home, handler: homeHandler); 23 | // 登录页 24 | router.define(login, handler: loginHandler); 25 | 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.3.50' 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.5.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | jcenter() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /flutter_for_weibo/.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | 12 | # IntelliJ related 13 | *.iml 14 | *.ipr 15 | *.iws 16 | .idea/ 17 | 18 | # The .vscode folder contains launch configuration and tasks you configure in 19 | # VS Code which you may wish to be included in version control, so this line 20 | # is commented out by default. 21 | #.vscode/ 22 | 23 | # Flutter/Dart/Pub related 24 | **/doc/api/ 25 | .dart_tool/ 26 | .flutter-plugins 27 | .flutter-plugins-dependencies 28 | .packages 29 | .pub-cache/ 30 | .pub/ 31 | /build/ 32 | 33 | # Web related 34 | lib/generated_plugin_registrant.dart 35 | 36 | # Exceptions to above rules. 37 | !/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages 38 | -------------------------------------------------------------------------------- /flutter_for_weibo/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 | 8.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/common/Global.dart: -------------------------------------------------------------------------------- 1 | import './network/HttpCacheConfig.dart'; 2 | import 'package:shared_preferences/shared_preferences.dart'; 3 | import './network/HttpCacheInterceptor.dart'; 4 | 5 | class Global { 6 | static SharedPreferences prefs; 7 | 8 | //缓存配置 9 | static HttpCacheConfig cacheConfig; 10 | 11 | //拦截器,负责缓存response 12 | static HttpCacheInterceptor httpInterceptor; 13 | 14 | // 是否为release版 15 | static bool get isRelease => bool.fromEnvironment("dart.vm.product"); 16 | 17 | //初始化全局信息,会在APP启动时执行 18 | static Future init() async { 19 | 20 | prefs = await SharedPreferences.getInstance(); 21 | cacheConfig = HttpCacheConfig(); 22 | httpInterceptor = HttpCacheInterceptor(); 23 | 24 | } 25 | 26 | //微博授权登录相关 27 | static String weiboAppKey = '1207543647'; 28 | static String weiboAppSecret = '9e80543f2e9546c76e06d3fd9d1ef9eb'; 29 | static String weiboDisplay = 'mobile'; 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # flutter_for_weibo 2 | 一个基于flutter开发的微博 3 | 4 | - 仅供学习使用。 5 | - 接口都是真实的微博接口。 6 | - 能够获取登录用户真实信息。 7 | - 支持多个频道:热门、科技、数码、游戏等。 8 | - 视频页、发现页尚未完成,希望有志之士加入我们一起完成。 9 | 10 | > 常见问题: 11 | - 请使用VSCode开发,如果您使用其他ide,不确定是否兼容。 12 | - 请基于ios的模拟器来运行。 13 | 14 | > 下载完项目请运行: 15 | - flutter packages get 16 | - flutter run 17 | - 如果运行报错,请删除flutter/bin/cache/lockfile 文件,重新运行 18 | - 如果还是报错,请使出杀手锏:重启电脑 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/find/FindRoute.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | class FindRoute extends StatefulWidget { 5 | const FindRoute({Key key}) : super(key: key); 6 | 7 | @override 8 | _FindRoute createState() => _FindRoute(); 9 | } 10 | 11 | class _FindRoute extends State { 12 | @override 13 | void initState() { 14 | super.initState(); 15 | } 16 | 17 | @override 18 | void dispose() { 19 | super.dispose(); 20 | } 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return Scaffold( 25 | appBar: CupertinoNavigationBar( 26 | automaticallyImplyLeading: false, 27 | automaticallyImplyMiddle: true, 28 | middle: Text('发现'), 29 | padding: EdgeInsetsDirectional.only(start: 5, end: 0, top: 0, bottom: 0), 30 | backgroundColor: Color(0xFFF8F8F8), 31 | ), 32 | body: Center( 33 | child: Text( 34 | '敬请期待!', 35 | style: TextStyle(fontSize: 18), 36 | ), 37 | )); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/widgets/Browser.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ffi'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:webview_flutter/webview_flutter.dart'; 5 | 6 | //定义拦截URL回调函数 7 | typedef Void FilterURLCallback(String url); 8 | 9 | class Browser extends StatelessWidget { 10 | const Browser({Key key, this.url, this.title, this.filterURLCallback}) 11 | : super(key: key); 12 | 13 | final String url; 14 | final String title; 15 | final FilterURLCallback filterURLCallback; 16 | 17 | //拦截的url 18 | // fun void filterUrl(String url); 19 | @override 20 | Widget build(BuildContext context) { 21 | return Scaffold( 22 | appBar: AppBar( 23 | title: Text(title), 24 | ), 25 | body: WebView( 26 | initialUrl: url, 27 | javascriptMode: JavascriptMode.unrestricted, 28 | //页面刚开始加载 29 | onPageStarted: (String url) { 30 | // do something 31 | }, 32 | //页面已经加载完 33 | onPageFinished: (String url) { 34 | //把url传给调用者 35 | if (this.filterURLCallback != null) { 36 | this.filterURLCallback(url); 37 | } 38 | }, 39 | ), 40 | ); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /flutter_for_weibo/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:flutter_for_weibo/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(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 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Base.lproj/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 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 8 | 12 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /flutter_for_weibo/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "fileheader.configObj": { 3 | 4 | "createFileTime": true, 5 | "language": { 6 | "languagetest": { 7 | "head": "/$$", 8 | "middle": " $ @", 9 | "end": " $/" 10 | } 11 | }, 12 | "autoAdd": true, 13 | "autoAddLine": 100, 14 | "autoAlready": true, 15 | "annotationStr": { 16 | "head": "/*", 17 | "middle": " * @", 18 | "end": " */", 19 | "use": false 20 | }, 21 | "headInsertLine": { 22 | "php": 2 23 | }, 24 | "beforeAnnotation": { 25 | "文件后缀": "该文件后缀的头部注释之前添加某些内容" 26 | }, 27 | "afterAnnotation": { 28 | "文件后缀": "该文件后缀的头部注释之后添加某些内容" 29 | }, 30 | "specialOptions": { 31 | "特殊字段": "自定义比如LastEditTime/LastEditors" 32 | }, 33 | "switch": { 34 | "newlineAddAnnotation": true 35 | }, 36 | "prohibitAutoAdd": [ 37 | "json" 38 | ], 39 | "prohibitItemAutoAdd": [ 40 | "项目的全称, 整个项目禁止自动添加头部注释, 可以使用快捷键添加" 41 | ], 42 | "moveCursor": true, 43 | "dateFormat": "YYYY-MM-DD HH:mm:ss", 44 | "atSymbol": "@", 45 | "atSymbolObj": { 46 | "文件后缀": "修改它的@符号" 47 | }, 48 | "colon": ": ", 49 | "colonObj": { 50 | "文件后缀": "修改它的冒号" 51 | }, 52 | "filePathColon": "路径分隔符替换", 53 | "showErrorMessage": false, 54 | "wideSame": false, 55 | "wideNum": 13, 56 | "CheckFileChange": false, 57 | "createHeader": true, 58 | "useWorker": false, 59 | "designAddHead": false 60 | }, 61 | "fileheader.cursorMode": { 62 | 63 | } 64 | } -------------------------------------------------------------------------------- /flutter_for_weibo/lib/common/utils/CacheUtil.dart: -------------------------------------------------------------------------------- 1 | import 'package:shared_preferences/shared_preferences.dart'; 2 | 3 | 4 | class CacheUtil { 5 | 6 | static SharedPreferences _sharePref; 7 | static CacheUtil _instance; 8 | factory CacheUtil() => _shareInstance(); 9 | static CacheUtil get sharedInstance => _shareInstance(); 10 | 11 | CacheUtil._intinal() { 12 | init(); 13 | } 14 | 15 | 16 | static _shareInstance(){ 17 | if(_instance == null){ 18 | _instance = new CacheUtil._intinal(); 19 | } 20 | return _instance; 21 | } 22 | 23 | static Future init() async { 24 | _sharePref = await SharedPreferences.getInstance(); 25 | } 26 | 27 | 28 | 29 | void sotreAuthorizationCode (String code){ 30 | if(code != null && code.length > 0){ 31 | _sharePref.setString('authorization_code', code); 32 | } 33 | } 34 | 35 | String getAuthorizationCode (){ 36 | String code = _sharePref.getString('authorization_code'); 37 | return code == null ? '' : code; 38 | } 39 | 40 | 41 | void sotreAccessToken (String token){ 42 | if(token != null && token.length > 0){ 43 | _sharePref.setString('access_token', token); 44 | } 45 | } 46 | 47 | String getAccessToken (){ 48 | String token = _sharePref.getString('access_token'); 49 | return token == null ? '' : token; 50 | } 51 | 52 | void storeUid (String uid){ 53 | if(uid != null && uid.length > 0){ 54 | _sharePref.setString('uid', uid); 55 | } 56 | } 57 | 58 | String getUid (){ 59 | String uid = _sharePref.getString('uid'); 60 | return uid == null ? '' : uid; 61 | } 62 | 63 | 64 | void storeExpires (int expires){ 65 | _sharePref.setInt('expires', expires); 66 | } 67 | 68 | int getExpires (){ 69 | int exp = _sharePref.getInt('expires'); 70 | return exp != null ? exp : 0; 71 | } 72 | } -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | flutter_for_weibo 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(FLUTTER_BUILD_NAME) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(FLUTTER_BUILD_NUMBER) 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UISupportedInterfaceOrientations 30 | 31 | UIInterfaceOrientationPortrait 32 | UIInterfaceOrientationLandscapeLeft 33 | UIInterfaceOrientationLandscapeRight 34 | 35 | UISupportedInterfaceOrientations~ipad 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationPortraitUpsideDown 39 | UIInterfaceOrientationLandscapeLeft 40 | UIInterfaceOrientationLandscapeRight 41 | 42 | UIViewControllerBasedStatusBarAppearance 43 | 44 | io.flutter.embedded_views_preview 45 | 46 | 47 | 48 | NSAppTransportSecurity 49 | 50 | NSAllowsArbitraryLoads 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Flutter (1.0.0) 3 | - path_provider_linux (0.0.1): 4 | - Flutter 5 | - shared_preferences (0.0.1): 6 | - Flutter 7 | - shared_preferences_linux (0.0.1): 8 | - Flutter 9 | - shared_preferences_macos (0.0.1): 10 | - Flutter 11 | - shared_preferences_web (0.0.1): 12 | - Flutter 13 | - webview_flutter (0.0.1): 14 | - Flutter 15 | 16 | DEPENDENCIES: 17 | - Flutter (from `Flutter`) 18 | - path_provider_linux (from `.symlinks/plugins/path_provider_linux/ios`) 19 | - shared_preferences (from `.symlinks/plugins/shared_preferences/ios`) 20 | - shared_preferences_linux (from `.symlinks/plugins/shared_preferences_linux/ios`) 21 | - shared_preferences_macos (from `.symlinks/plugins/shared_preferences_macos/ios`) 22 | - shared_preferences_web (from `.symlinks/plugins/shared_preferences_web/ios`) 23 | - webview_flutter (from `.symlinks/plugins/webview_flutter/ios`) 24 | 25 | EXTERNAL SOURCES: 26 | Flutter: 27 | :path: Flutter 28 | path_provider_linux: 29 | :path: ".symlinks/plugins/path_provider_linux/ios" 30 | shared_preferences: 31 | :path: ".symlinks/plugins/shared_preferences/ios" 32 | shared_preferences_linux: 33 | :path: ".symlinks/plugins/shared_preferences_linux/ios" 34 | shared_preferences_macos: 35 | :path: ".symlinks/plugins/shared_preferences_macos/ios" 36 | shared_preferences_web: 37 | :path: ".symlinks/plugins/shared_preferences_web/ios" 38 | webview_flutter: 39 | :path: ".symlinks/plugins/webview_flutter/ios" 40 | 41 | SPEC CHECKSUMS: 42 | Flutter: 0e3d915762c693b495b44d77113d4970485de6ec 43 | path_provider_linux: 4d630dc393e1f20364f3e3b4a2ff41d9674a84e4 44 | shared_preferences: af6bfa751691cdc24be3045c43ec037377ada40d 45 | shared_preferences_linux: afefbfe8d921e207f01ede8b60373d9e3b566b78 46 | shared_preferences_macos: f3f29b71ccbb56bf40c9dd6396c9acf15e214087 47 | shared_preferences_web: 141cce0c3ed1a1c5bf2a0e44f52d31eeb66e5ea9 48 | webview_flutter: d2b4d6c66968ad042ad94cbb791f5b72b4678a96 49 | 50 | PODFILE CHECKSUM: 1b66dae606f75376c5f2135a8290850eeb09ae83 51 | 52 | COCOAPODS: 1.9.1 53 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/widgets/Tabbar.dart: -------------------------------------------------------------------------------- 1 | // 自定义方式的TabController 2 | 3 | // class Widget_TabBar_Userdefined_State_Page 4 | // extends State 5 | // with SingleTickerProviderStateMixin { 6 | 7 | // var controller; 8 | // var tabs = [ 9 | // Tab(text: "Tab1",), 10 | // Tab(text: "Tab2",), 11 | // Tab(text: "Tab3",), 12 | // Tab(text: "Tab4",), 13 | // Tab(text: "Tab5",), 14 | // Tab(text: "Tab6",), 15 | // Tab(text: "Tab7",), 16 | // Tab(text: "Tab8",), 17 | // Tab( 18 | // text: "Tab9", 19 | // icon: Icon(Icons.phone), 20 | // ), 21 | // ]; 22 | 23 | // @override 24 | // void initState() { 25 | // controller = TabController( 26 | // length: tabs.length, 27 | // vsync: this, //动画效果的异步处理,默认格式,背下来即可 28 | // ); 29 | // } 30 | 31 | // @override 32 | // Widget build(BuildContext context) { 33 | // return MaterialApp( 34 | // home: Scaffold( 35 | // appBar: AppBar( 36 | // title: TabBar( 37 | // tabs: tabs, 38 | // controller: controller, 39 | // //配置控制器 40 | // isScrollable: true, 41 | // indicatorColor: Color(0xffff0000), 42 | // indicatorWeight: 1, 43 | // indicatorSize: TabBarIndicatorSize.tab, 44 | // indicatorPadding: EdgeInsets.only(bottom: 10.0), 45 | // labelPadding: EdgeInsets.only(left: 20), 46 | // labelColor: Color(0xff333333), 47 | // labelStyle: TextStyle( 48 | // fontSize: 15.0, 49 | // ), 50 | // unselectedLabelColor: Color(0xffffffff), 51 | // unselectedLabelStyle: TextStyle( 52 | // fontSize: 12.0, 53 | // ), 54 | // ), 55 | // ), 56 | // body: TabBarView( 57 | // controller: controller, //配置控制器 58 | // children: tabs 59 | // .map((Tab tab) => 60 | // Container(child: Center(child: Text(tab.text),),)) 61 | // .toList()), 62 | // ), 63 | // ); 64 | // } 65 | 66 | // //当整个页面dispose时,记得把控制器也dispose掉,释放内存 67 | // @override 68 | // void dispose() { 69 | // controller.dispose(); 70 | // super.dispose(); 71 | // } 72 | // } -------------------------------------------------------------------------------- /flutter_for_weibo/lib/widgets/CustomNavBar.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:flutter/cupertino.dart'; 4 | import 'package:flutter/material.dart'; 5 | 6 | // ignore: must_be_immutable 7 | //自定义导航器 8 | class CustomNavBar extends StatelessWidget { 9 | final String title; 10 | final Widget body; 11 | final Color appBarBackgroundColor; 12 | final double elevation; //底部阴影 ,默认0 13 | final List actions; //Widgets to display in a row after the [title] widget. 14 | final Widget leading; //Widget to place at the start of the navigation bar. Normally a back button for a normal page or a cancel button for full page dialogs. 15 | final Widget trailing; //Widget to place at the end of the navigation bar. Normally additional actions taken on the page such as a search or edit function. 16 | Color backgroundColor; 17 | Widget middle;//中间自定义控件 18 | 19 | CustomNavBar( 20 | {this.title = '', 21 | this.appBarBackgroundColor, 22 | this.elevation = 0, 23 | this.actions, 24 | this.leading, 25 | this.backgroundColor, 26 | this.trailing, 27 | this.body, 28 | this.middle} 29 | ); 30 | 31 | @override 32 | Widget build(BuildContext context) { 33 | return Scaffold( 34 | appBar: _customAppBar(context), 35 | backgroundColor: Colors.white, 36 | body: body, 37 | ); 38 | } 39 | 40 | Widget _customAppBar(BuildContext context) { 41 | 42 | //如果是ios 平台 43 | if (Platform.isIOS) { 44 | return CupertinoNavigationBar( 45 | automaticallyImplyLeading: false, 46 | automaticallyImplyMiddle: true, 47 | middle: middle == null ? Text(title) : middle, 48 | padding: EdgeInsetsDirectional.only(start: 0, end: 10, top: 0, bottom: 0), 49 | backgroundColor: this.backgroundColor, 50 | trailing: this.trailing, 51 | leading: this.leading, 52 | actionsForegroundColor: Colors.grey, 53 | ); 54 | } else { 55 | //如果是安卓平台 56 | return PreferredSize( 57 | preferredSize: Size.fromHeight(44), 58 | child: AppBar( 59 | title: Text(title), 60 | backgroundColor: appBarBackgroundColor, 61 | elevation: elevation, 62 | actions: actions, 63 | leading: leading, 64 | ), 65 | ); 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /flutter_for_weibo/android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion 28 30 | 31 | sourceSets { 32 | main.java.srcDirs += 'src/main/kotlin' 33 | } 34 | 35 | lintOptions { 36 | disable 'InvalidPackage' 37 | } 38 | 39 | defaultConfig { 40 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 41 | applicationId "com.example.flutter_for_weibo" 42 | minSdkVersion 16 43 | targetSdkVersion 28 44 | versionCode flutterVersionCode.toInteger() 45 | versionName flutterVersionName 46 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 47 | } 48 | 49 | buildTypes { 50 | release { 51 | // TODO: Add your own signing config for the release build. 52 | // Signing with the debug keys for now, so `flutter run --release` works. 53 | signingConfig signingConfigs.debug 54 | } 55 | } 56 | } 57 | 58 | flutter { 59 | source '../..' 60 | } 61 | 62 | dependencies { 63 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 64 | testImplementation 'junit:junit:4.12' 65 | androidTestImplementation 'androidx.test:runner:1.1.1' 66 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1' 67 | } 68 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/video/VideoRoute.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/cupertino.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | 5 | class VideoRoute extends StatefulWidget { 6 | const VideoRoute({Key key}) : super(key: key); 7 | 8 | @override 9 | _VideoRoute createState() => _VideoRoute(); 10 | } 11 | 12 | class _VideoRoute extends State{ 13 | 14 | @override 15 | void initState() { 16 | super.initState(); 17 | } 18 | 19 | @override 20 | void dispose() { 21 | super.dispose(); 22 | } 23 | 24 | @override 25 | Widget build(BuildContext context) { 26 | return Scaffold( 27 | appBar: CupertinoNavigationBar( 28 | automaticallyImplyLeading: false, 29 | automaticallyImplyMiddle: true, 30 | middle: Container( 31 | padding: EdgeInsets.fromLTRB(60, 0, 60, 0), 32 | child: Row( 33 | mainAxisAlignment: MainAxisAlignment.spaceAround, 34 | mainAxisSize: MainAxisSize.max, 35 | crossAxisAlignment: CrossAxisAlignment.center, 36 | verticalDirection: VerticalDirection.down, 37 | children: [ 38 | Text( 39 | '推荐', 40 | style: TextStyle( 41 | fontSize: 20, 42 | color: Color(0xFFE78734), 43 | fontWeight: FontWeight.w500 44 | ), 45 | ), 46 | Text( 47 | '热门', 48 | style: TextStyle( 49 | fontSize: 17, 50 | color: Color(0xFF292929), 51 | fontWeight: FontWeight.w400 52 | ), 53 | ), 54 | Text( 55 | '小视频', 56 | style: TextStyle( 57 | fontSize: 17, 58 | color: Color(0xFF292929), 59 | fontWeight: FontWeight.w400 60 | ), 61 | ), 62 | ], 63 | ), 64 | ), 65 | backgroundColor: Color(0xFFF8F8F8), 66 | ), 67 | body: Center( 68 | child: Text( 69 | '敬请期待!', 70 | style: TextStyle(fontSize: 18), 71 | ), 72 | ) 73 | ); 74 | } 75 | 76 | 77 | } -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/login/LoginRoute.dart: -------------------------------------------------------------------------------- 1 | // 登录页 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_for_weibo/common/utils/CacheUtil.dart'; 4 | import 'package:flutter_for_weibo/common/Global.dart'; 5 | import 'package:flutter_for_weibo/common/network/HttpService.dart'; 6 | import 'package:flutter_for_weibo/widgets/Browser.dart'; 7 | import 'package:flutter_for_weibo/routes/navigation_util.dart'; 8 | 9 | class LoginRoute extends StatefulWidget { 10 | LoginRoute({Key key}) : super(key: key); 11 | 12 | @override 13 | _LoginRouteState createState() => _LoginRouteState(); 14 | } 15 | 16 | class _LoginRouteState extends State { 17 | //初始化全局必要参数 18 | Future prepareGlobal() async { 19 | await Global.init(); 20 | await CacheUtil.init(); 21 | } 22 | 23 | @override 24 | void initState() { 25 | super.initState(); 26 | } 27 | 28 | @override 29 | Widget build(BuildContext context) { 30 | //如果上次登陆过,那么下次自动登录 31 | CacheUtil.init().then((value) { 32 | Global.init().then((value) { 33 | DateTime curTime = DateTime.now(); 34 | int curSeconds = curTime.millisecondsSinceEpoch; 35 | int expires = CacheUtil.sharedInstance.getExpires(); 36 | 37 | int diff = expires - curSeconds; 38 | String token = CacheUtil.sharedInstance.getAccessToken(); 39 | String uid = CacheUtil.sharedInstance.getUid(); 40 | 41 | // TODO: 过期时间暂时不处理 42 | if (token != null && uid != null) { 43 | NavigatorUtil.goHomePage(context); 44 | } 45 | }); 46 | }); 47 | 48 | String url = URLConfig.baseURL + 49 | URLConfig.auth + 50 | "?display=" + 51 | Global.weiboDisplay + 52 | "&client_id=" + 53 | Global.weiboAppKey + 54 | "&redirect_uri=" + 55 | URLConfig.weiboRedirectUri; 56 | 57 | return Scaffold( 58 | body: Browser( 59 | url: url, 60 | title: "登录", 61 | filterURLCallback: (String filterUrl) { 62 | int codeIndex = filterUrl.lastIndexOf("code"); 63 | if (codeIndex > 0) { 64 | String code = filterUrl.substring(codeIndex + 5); 65 | 66 | //准备必要参数 67 | prepareGlobal().then((value) { 68 | CacheUtil.sharedInstance.sotreAuthorizationCode(code); 69 | NavigatorUtil.goHomePage(context); 70 | }); 71 | } 72 | }, 73 | )); 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/MessageItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | 4 | 5 | 6 | class MessageItem extends StatelessWidget { 7 | final User user; 8 | 9 | const MessageItem({Key key, this.user}) : super(key: key); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return Container( 14 | padding: EdgeInsets.all(0), 15 | child: Expanded( 16 | child: Column( 17 | crossAxisAlignment: CrossAxisAlignment.start, 18 | children: [ 19 | Row( 20 | children: [ 21 | Container( 22 | margin: EdgeInsets.fromLTRB(15, 10, 15, 10), 23 | width: 50, 24 | height: 50, 25 | decoration: BoxDecoration( 26 | borderRadius: BorderRadius.circular(30), 27 | image: DecorationImage( 28 | image: AssetImage(user.profileImgUrl) 29 | ), 30 | ), 31 | ), 32 | Column( 33 | crossAxisAlignment: CrossAxisAlignment.start, 34 | children: [ 35 | Container( 36 | padding: EdgeInsets.fromLTRB(0, 0, 0, 3), 37 | child: Text( 38 | user.screenName, 39 | maxLines: 1, 40 | overflow: TextOverflow.ellipsis, 41 | style: TextStyle( 42 | fontSize: 16, 43 | color: Color(0xFF313131), 44 | ), 45 | ), 46 | ), 47 | Container( 48 | padding: EdgeInsets.only(left: 0), 49 | child: user.desc == null ? Container() : Text( 50 | user.desc , 51 | maxLines: 1, 52 | overflow: TextOverflow.ellipsis, 53 | style: TextStyle( 54 | fontSize: 13, 55 | // fontWeight: FontWeight.normal, 56 | color: Color(0xFFA3A3A3), 57 | ), 58 | ), 59 | ), 60 | ], 61 | ), 62 | ], 63 | ), 64 | 65 | ], 66 | ), 67 | ), 68 | ); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Base.lproj/LaunchScreen.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 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/common/network/HttpCacheInterceptor.dart: -------------------------------------------------------------------------------- 1 | import 'dart:collection'; 2 | import 'package:dio/dio.dart'; 3 | import '../Global.dart'; 4 | 5 | 6 | 7 | 8 | class ResponseCache { 9 | ResponseCache(this.response) { 10 | timeStamp = DateTime.now().millisecondsSinceEpoch; 11 | } 12 | 13 | Response response; 14 | int timeStamp; 15 | 16 | 17 | @override 18 | bool operator ==(other) { 19 | //如果response的URL一样,那么认为 Response 也一样 20 | return response.hashCode == other.hashCode; 21 | } 22 | 23 | @override 24 | int get hashCode => response.realUri.hashCode; 25 | 26 | } 27 | 28 | 29 | //自定义 HTTP 拦截器,缓存数据 30 | class HttpCacheInterceptor extends Interceptor { 31 | 32 | //key:url value: Response 33 | //因为我们要保证缓存的数据有序,所以用linkedMap 34 | var cache = LinkedHashMap(); 35 | 36 | @override 37 | onRequest(RequestOptions options) async { 38 | if(!Global.cacheConfig.enable) return options;//如果不开启缓存 39 | 40 | // refresh标记是否是"下拉刷新" 41 | bool refresh = options.extra["refresh"] == true; 42 | //如果是下拉刷新,先删除相关缓存 43 | if (refresh) { 44 | delete(options.uri.toString()); 45 | return options; 46 | } 47 | 48 | if (options.extra["noCache"] == false && options.method.toLowerCase() == 'get') { 49 | String key = options.extra["cacheKey"] ?? options.uri.toString(); 50 | var resp = cache[key]; 51 | if (resp != null) { 52 | //若缓存未过期,则使用缓存的 response 53 | if ((DateTime.now().millisecondsSinceEpoch - resp.timeStamp) /(1000*60*60*24) < 54 | Global.cacheConfig.maxDay) { 55 | return cache[key].response; 56 | } else { 57 | //若已过期则删除缓存,继续向服务器请求 58 | cache.remove(key); 59 | } 60 | } 61 | } 62 | } 63 | 64 | @override 65 | onError(DioError err) async { 66 | 67 | } 68 | 69 | @override 70 | onResponse(Response response) async { 71 | // 如果启用缓存,将返回结果保存到缓存 72 | if (Global.cacheConfig.enable) { 73 | saveCache(response); 74 | } 75 | } 76 | 77 | //保存请求的结果 78 | saveCache(Response object) { 79 | RequestOptions options = object.request; 80 | if (options.extra["noCache"] == false && options.method.toLowerCase() == "get") { 81 | // 如果缓存数量超过最大数量限制,则先移除最早的一条记录 82 | if (cache.length == Global.cacheConfig.maxCount) { 83 | cache.remove(cache[cache.keys.first]); 84 | } 85 | String key = options.extra["cacheKey"] ?? options.uri.toString(); 86 | cache[key] = ResponseCache(object); 87 | } 88 | } 89 | 90 | void delete(String key) { 91 | cache.remove(key); 92 | } 93 | } -------------------------------------------------------------------------------- /flutter_for_weibo/lib/common/network/Network.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | 3 | import 'package:dio/dio.dart'; 4 | import 'package:flutter_for_weibo/common/network/HttpService.dart'; 5 | import '../Global.dart'; 6 | import 'dart:convert'; 7 | 8 | enum HTTPMethod { get, post } 9 | 10 | typedef void SuccessFunc(dynamic); 11 | typedef void FailFunc(dynamic); 12 | 13 | class Network { 14 | 15 | Dio _dio; 16 | static Network _network; 17 | factory Network() => _getInstance(); 18 | static Network get sharedInstance => _getInstance(); 19 | 20 | Network._internal() { 21 | BaseOptions baseOptions = new BaseOptions( 22 | connectTimeout: 15000, 23 | receiveTimeout: 15000, 24 | ); 25 | 26 | _dio = new Dio(baseOptions); 27 | //拦截器会导致某些请求失效,暂时注掉 28 | // _dio.interceptors.add(Global.httpInterceptor); 29 | } 30 | 31 | //单例 32 | static Network _getInstance() { 33 | if (_network == null) { 34 | _network = new Network._internal(); 35 | } 36 | return _network; 37 | } 38 | 39 | 40 | void doGet({String path, Map params, SuccessFunc success, FailFunc failure,String baseURL}) { 41 | _doRequest(path, params, HTTPMethod.get, success,failure,baseURL); 42 | } 43 | 44 | void doPost({String path, Map params,SuccessFunc success, FailFunc failure,String baseURL}) { 45 | _doRequest(path, params, HTTPMethod.post, success,failure,baseURL); 46 | } 47 | 48 | /* 49 | private 方法加下划线 50 | */ 51 | void _doRequest(String path, Map params, HTTPMethod method, [SuccessFunc successCallBack, FailFunc failureCallBack,String baseURL]) async { 52 | 53 | if (baseURL == null || baseURL.isEmpty){ 54 | baseURL = URLConfig.baseURL; 55 | } 56 | String url = baseURL + path; 57 | 58 | try { 59 | Response response; 60 | switch (method) { 61 | case HTTPMethod.get: 62 | if (params != null && params.isNotEmpty) { 63 | response = await _dio.get(url, queryParameters: params); 64 | } else { 65 | response = await _dio.get(url); 66 | } 67 | break; 68 | case HTTPMethod.post: 69 | if (params != null && params.isNotEmpty) { 70 | response = await _dio.post(url, queryParameters: params); 71 | } else { 72 | response = await _dio.post(url); 73 | } 74 | break; 75 | } 76 | Map result = json.decode(response.toString()); 77 | if (successCallBack != null) { 78 | successCallBack(result); 79 | } 80 | 81 | } catch (exception) { 82 | if (failureCallBack != null) { 83 | failureCallBack(exception.toString()); 84 | } 85 | } 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/widgets/WBMediaWidget.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 4 | 5 | //多媒体组件: 文本 图片 视频 6 | class WBMediaWidget extends StatelessWidget { 7 | const WBMediaWidget({Key key, this.data}) : super(key: key); 8 | final WeiBoCard data; 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | return Container( 13 | child: Column( 14 | children: [ 15 | Text( 16 | '${this.data.rawText == null ? this.data.text :this.data.rawText}', 17 | style: TextStyle( 18 | fontSize: 16, 19 | ), 20 | ), 21 | Padding(padding: EdgeInsets.only(top: 5)), 22 | WBPicturesWidget(list: this.data.pics), 23 | ], 24 | ), 25 | ); 26 | } 27 | } 28 | 29 | class WBPicturesWidget extends StatelessWidget { 30 | List> list; 31 | 32 | WBPicturesWidget({ 33 | Key key, 34 | this.list, 35 | }) : super(key: key); 36 | 37 | void showPhoto(BuildContext context, Map img) { 38 | Navigator.push(context, 39 | MaterialPageRoute(builder: (BuildContext context) { 40 | return GestureDetector( 41 | child: SizedBox.expand( 42 | child: Hero( 43 | tag: img['pid'], 44 | child: Container( 45 | decoration: BoxDecoration( 46 | color: Color(0xFF000000), 47 | image: DecorationImage( 48 | fit: BoxFit.contain, image: NetworkImage('${img['url']}')), 49 | ), 50 | ), 51 | ), 52 | ), 53 | onTap: () { 54 | Navigator.maybePop(context); 55 | }, 56 | ); 57 | })); 58 | } 59 | 60 | @override 61 | Widget build(BuildContext context) { 62 | int _crossAxisCount = 3; 63 | if (this.list == null || this.list.length == 0) { 64 | return Container(); 65 | } 66 | if (this.list.length == 4) { 67 | _crossAxisCount = 2; 68 | } 69 | 70 | return GridView.count( 71 | crossAxisCount: _crossAxisCount, 72 | mainAxisSpacing: 5.0, 73 | crossAxisSpacing: 5.0, 74 | shrinkWrap: true, 75 | physics: new NeverScrollableScrollPhysics(), 76 | padding: const EdgeInsets.all(4.0), 77 | children: this.list.map( 78 | (Map img) { 79 | return GestureDetector( 80 | onTap: () { 81 | showPhoto(context, img); 82 | }, 83 | child: Hero( 84 | tag: img['pid'], 85 | child: Container( 86 | decoration: BoxDecoration( 87 | image: DecorationImage( 88 | fit: BoxFit.cover, image: NetworkImage('${img['url']}')), 89 | ), 90 | ), 91 | ), 92 | ); 93 | }, 94 | ).toList(), 95 | ); 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/weiboItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | import 'package:flutter_for_weibo/widgets/WBMediaWidget.dart'; 4 | 5 | class WeiboItem extends StatelessWidget { 6 | final WeiBoCard data; 7 | 8 | const WeiboItem({Key key, this.data}) : super(key: key); 9 | 10 | String weiboSource(){ 11 | if (data.source != null && data.source.isNotEmpty){ 12 | return '来自${data.source}'; 13 | }else{ 14 | return data.createAt; 15 | } 16 | } 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Container( 21 | padding: EdgeInsets.all(15), 22 | child: Expanded( 23 | child: Column( 24 | crossAxisAlignment: CrossAxisAlignment.end, 25 | children: [ 26 | Row( 27 | children: [ 28 | Container( 29 | width: 40, 30 | height: 40, 31 | decoration: BoxDecoration( 32 | borderRadius: BorderRadius.circular(20), 33 | image: DecorationImage( 34 | image: NetworkImage('${(data != null && data.user != null && data.user.profileImgUrl != null) ? data.user.profileImgUrl : ""}')), 35 | ), 36 | ), 37 | Column( 38 | crossAxisAlignment:CrossAxisAlignment.start, 39 | children: [ 40 | Container( 41 | padding: EdgeInsets.fromLTRB(10, 0, 0, 2), 42 | child: Text( 43 | '${(data != null && data.user != null && data.user.screenName != null) ? data.user.screenName : ""}', 44 | maxLines: 1, 45 | overflow: TextOverflow.ellipsis, 46 | style: TextStyle( 47 | fontSize: 13, 48 | fontWeight: FontWeight.normal, 49 | color: Color(0xFF414141), 50 | ), 51 | ), 52 | ), 53 | Container( 54 | padding: EdgeInsets.only(left: 10), 55 | child: Text( 56 | '${this.weiboSource()}', 57 | maxLines: 1, 58 | overflow: TextOverflow.ellipsis, 59 | style: TextStyle( 60 | fontSize: 11, 61 | fontWeight: FontWeight.normal, 62 | color: Color(0xFF969696), 63 | ), 64 | ), 65 | ), 66 | ], 67 | ), 68 | ], 69 | ), 70 | Padding(padding: EdgeInsets.only(top: 10)), 71 | 72 | //微博正文 73 | Row( 74 | children: [ 75 | Expanded( 76 | child: WBMediaWidget(data: this.data), 77 | ), 78 | ], 79 | ), 80 | ], 81 | ), 82 | ), 83 | ); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /flutter_for_weibo/pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: flutter_for_weibo 2 | description: A new Flutter project. 3 | 4 | # The following defines the version and build number for your application. 5 | # A version number is three numbers separated by dots, like 1.2.43 6 | # followed by an optional build number separated by a +. 7 | # Both the version and the builder number may be overridden in flutter 8 | # build by specifying --build-name and --build-number, respectively. 9 | # In Android, build-name is used as versionName while build-number used as versionCode. 10 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 11 | # In iOS, build-name is used as CFBundleShortVersionString while build-number used as CFBundleVersion. 12 | # Read more about iOS versioning at 13 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 14 | version: 1.0.0+1 15 | 16 | environment: 17 | sdk: ">=2.1.0 <3.0.0" 18 | 19 | dependencies: 20 | flutter: 21 | sdk: flutter 22 | 23 | # The following adds the Cupertino Icons font to your application. 24 | # Use with the CupertinoIcons class for iOS style icons. 25 | cupertino_icons: ^0.1.2 26 | 27 | # 网络库 28 | dio: ^3.0.9 29 | 30 | # 持久化库 类似于 NSUserDefaults 31 | shared_preferences: ^0.5.7 32 | 33 | #webview ,这里在微博授权登录时候要跳到webview来授权 34 | webview_flutter: ^0.3.22 35 | # 路由管理 36 | fluro: "^1.6.3" 37 | 38 | 39 | dev_dependencies: 40 | flutter_test: 41 | sdk: flutter 42 | 43 | 44 | # For information on the generic Dart part of this file, see the 45 | # following page: https://dart.dev/tools/pub/pubspec 46 | 47 | # The following section is specific to Flutter. 48 | flutter: 49 | 50 | # The following line ensures that the Material Icons font is 51 | # included with your application, so that you can use the icons in 52 | # the material Icons class. 53 | uses-material-design: true 54 | 55 | # To add assets to your application, add an assets section, like this: 56 | assets: 57 | - lib/images/ 58 | 59 | 60 | # - images/a_dot_ham.jpeg 61 | 62 | # An image asset can refer to one or more resolution-specific "variants", see 63 | # https://flutter.dev/assets-and-images/#resolution-aware. 64 | 65 | # For details regarding adding assets from package dependencies, see 66 | # https://flutter.dev/assets-and-images/#from-packages 67 | 68 | # To add custom fonts to your application, add a fonts section here, 69 | # in this "flutter" section. Each entry in this list should have a 70 | # "family" key with the font family name, and a "fonts" key with a 71 | # list giving the asset and other descriptors for the font. For 72 | # example: 73 | # fonts: 74 | # - family: Schyler 75 | # fonts: 76 | # - asset: fonts/Schyler-Regular.ttf 77 | # - asset: fonts/Schyler-Italic.ttf 78 | # style: italic 79 | # - family: Trajan Pro 80 | # fonts: 81 | # - asset: fonts/TrajanPro.ttf 82 | # - asset: fonts/TrajanPro_Bold.ttf 83 | # weight: 700 84 | # 85 | # For details regarding fonts from package dependencies, 86 | # see https://flutter.dev/custom-fonts/#from-packages 87 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "29x29", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-29x29@3x.png", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "40x40", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-40x40@3x.png", 43 | "scale" : "3x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "60x60", 53 | "idiom" : "iphone", 54 | "filename" : "Icon-App-60x60@3x.png", 55 | "scale" : "3x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@1x.png", 61 | "scale" : "1x" 62 | }, 63 | { 64 | "size" : "20x20", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-20x20@2x.png", 67 | "scale" : "2x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@1x.png", 73 | "scale" : "1x" 74 | }, 75 | { 76 | "size" : "29x29", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-29x29@2x.png", 79 | "scale" : "2x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@1x.png", 85 | "scale" : "1x" 86 | }, 87 | { 88 | "size" : "40x40", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-40x40@2x.png", 91 | "scale" : "2x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@1x.png", 97 | "scale" : "1x" 98 | }, 99 | { 100 | "size" : "76x76", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-76x76@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "83.5x83.5", 107 | "idiom" : "ipad", 108 | "filename" : "Icon-App-83.5x83.5@2x.png", 109 | "scale" : "2x" 110 | }, 111 | { 112 | "size" : "1024x1024", 113 | "idiom" : "ios-marketing", 114 | "filename" : "Icon-App-1024x1024@1x.png", 115 | "scale" : "1x" 116 | } 117 | ], 118 | "info" : { 119 | "version" : 1, 120 | "author" : "xcode" 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/WBCheckItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | import 'package:flutter_for_weibo/widgets/WBMediaWidget.dart'; 4 | 5 | class WBCheckItem extends StatelessWidget { 6 | 7 | const WBCheckItem({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | padding: EdgeInsets.all(0), 13 | child: Expanded( 14 | child: Column( 15 | crossAxisAlignment: CrossAxisAlignment.start, 16 | children: [ 17 | Padding(padding: EdgeInsets.only(top:10)), 18 | Row( 19 | children: [ 20 | Container( 21 | padding: EdgeInsets.fromLTRB(15, 0, 2, 0), 22 | child: Image.asset('lib/images/check.png',width: 30,height: 30), 23 | ), 24 | Text( 25 | '微博公益检测', 26 | style: TextStyle( 27 | fontSize: 13, 28 | fontWeight: FontWeight.w500, 29 | color: Color(0xFF5A5A5A), 30 | ) 31 | ) 32 | ], 33 | ), 34 | Padding(padding: EdgeInsets.only(top: 5)), 35 | Row( 36 | mainAxisAlignment: MainAxisAlignment.spaceAround, 37 | mainAxisSize: MainAxisSize.max, 38 | crossAxisAlignment: CrossAxisAlignment.center, 39 | verticalDirection: VerticalDirection.down, 40 | children: [ 41 | Column( 42 | children: [ 43 | Image.asset("lib/images/check1.png", width: 70, height: 70), 44 | Text( 45 | '微博关注检测', 46 | style: TextStyle( 47 | fontSize: 13, 48 | fontWeight: FontWeight.normal, 49 | color: Color(0xFF535353), 50 | ), 51 | ), 52 | 53 | ], 54 | ), 55 | Column( 56 | children: [ 57 | Image.asset("lib/images/check2.png", width: 70, height: 70), 58 | Text( 59 | '查看寂静用户', 60 | style: TextStyle( 61 | fontSize: 13, 62 | fontWeight: FontWeight.normal, 63 | color: Color(0xFF535353), 64 | ), 65 | ), 66 | 67 | ], 68 | ), 69 | Column( 70 | children: [ 71 | Image.asset("lib/images/check3.png", width: 70, height: 70), 72 | Text( 73 | '全站最热博主', 74 | style: TextStyle( 75 | fontSize: 13, 76 | fontWeight: FontWeight.normal, 77 | color: Color(0xFF535353), 78 | ), 79 | ), 80 | 81 | ], 82 | ), 83 | ], 84 | ), 85 | Padding(padding: EdgeInsets.only(top: 25)), 86 | ], 87 | ), 88 | ), 89 | ); 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/MineFooterItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | import 'package:flutter_for_weibo/widgets/WBMediaWidget.dart'; 4 | 5 | class MineFooterItem extends StatelessWidget { 6 | const MineFooterItem({Key key}) : super(key: key); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return Container( 11 | padding: EdgeInsets.all(0), 12 | child: Expanded( 13 | child: Column( 14 | crossAxisAlignment: CrossAxisAlignment.start, 15 | children: [ 16 | Row( 17 | children: [ 18 | Container( 19 | margin: EdgeInsets.fromLTRB(15, 5, 2, 0), 20 | width: 32, 21 | height: 32, 22 | child: Image.asset('lib/images/card1.png'), 23 | ), 24 | RichText( 25 | text: TextSpan( 26 | text: "免流量", 27 | style: TextStyle(color: Color(0xFF000000), fontSize: 13), 28 | children: [ 29 | TextSpan( 30 | text: " 流量免费任性玩", 31 | style: TextStyle( 32 | color: Color(0xFF000000), 33 | fontSize: 12, 34 | fontWeight: FontWeight.w200 35 | ), 36 | ), 37 | ]), 38 | ), 39 | ], 40 | ), 41 | Row( 42 | children: [ 43 | Container( 44 | margin: EdgeInsets.fromLTRB(15, 15, 2, 0), 45 | width: 32, 46 | height: 32, 47 | child: Image.asset('lib/images/card2.png'), 48 | ), 49 | RichText( 50 | text: TextSpan( 51 | text: "微博运动", 52 | style: TextStyle(color: Color(0xFF000000), fontSize: 13), 53 | children: [ 54 | TextSpan( 55 | text: " 流量免费任性玩", 56 | style: TextStyle( 57 | color: Color(0xFF000000), 58 | fontSize: 12, 59 | fontWeight: FontWeight.w200 60 | ), 61 | ), 62 | ]), 63 | ), 64 | ], 65 | ), 66 | Row( 67 | children: [ 68 | Container( 69 | margin: EdgeInsets.fromLTRB(15, 15, 2, 0), 70 | width: 32, 71 | height: 32, 72 | child: Image.asset('lib/images/card3.png'), 73 | ), 74 | RichText( 75 | text: TextSpan( 76 | text: "草稿箱", 77 | style: TextStyle(color: Color(0xFF000000), fontSize: 13), 78 | ), 79 | ), 80 | ], 81 | ), 82 | Padding(padding: EdgeInsets.only(top: 15)), 83 | Divider( 84 | height: .5, 85 | color: Color(0xFFEEEEEE), 86 | thickness: 10, 87 | indent: 0, 88 | endIndent: 0 89 | ), 90 | ], 91 | ), 92 | ), 93 | ); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 39 | 40 | 41 | 42 | 43 | 44 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 67 | 73 | 75 | 81 | 82 | 83 | 84 | 86 | 87 | 90 | 91 | 92 | -------------------------------------------------------------------------------- /flutter_for_weibo/ios/Podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '9.0' 3 | 4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency. 5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true' 6 | 7 | project 'Runner', { 8 | 'Debug' => :debug, 9 | 'Profile' => :release, 10 | 'Release' => :release, 11 | } 12 | 13 | def parse_KV_file(file, separator='=') 14 | file_abs_path = File.expand_path(file) 15 | if !File.exists? file_abs_path 16 | return []; 17 | end 18 | generated_key_values = {} 19 | skip_line_start_symbols = ["#", "/"] 20 | File.foreach(file_abs_path) do |line| 21 | next if skip_line_start_symbols.any? { |symbol| line =~ /^\s*#{symbol}/ } 22 | plugin = line.split(pattern=separator) 23 | if plugin.length == 2 24 | podname = plugin[0].strip() 25 | path = plugin[1].strip() 26 | podpath = File.expand_path("#{path}", file_abs_path) 27 | generated_key_values[podname] = podpath 28 | else 29 | puts "Invalid plugin specification: #{line}" 30 | end 31 | end 32 | generated_key_values 33 | end 34 | 35 | target 'Runner' do 36 | use_frameworks! 37 | use_modular_headers! 38 | 39 | # Flutter Pod 40 | 41 | copied_flutter_dir = File.join(__dir__, 'Flutter') 42 | copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework') 43 | copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec') 44 | unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path) 45 | # Copy Flutter.framework and Flutter.podspec to Flutter/ to have something to link against if the xcode backend script has not run yet. 46 | # That script will copy the correct debug/profile/release version of the framework based on the currently selected Xcode configuration. 47 | # CocoaPods will not embed the framework on pod install (before any build phases can generate) if the dylib does not exist. 48 | 49 | generated_xcode_build_settings_path = File.join(copied_flutter_dir, 'Generated.xcconfig') 50 | unless File.exist?(generated_xcode_build_settings_path) 51 | raise "Generated.xcconfig must exist. If you're running pod install manually, make sure flutter pub get is executed first" 52 | end 53 | generated_xcode_build_settings = parse_KV_file(generated_xcode_build_settings_path) 54 | cached_framework_dir = generated_xcode_build_settings['FLUTTER_FRAMEWORK_DIR']; 55 | 56 | unless File.exist?(copied_framework_path) 57 | FileUtils.cp_r(File.join(cached_framework_dir, 'Flutter.framework'), copied_flutter_dir) 58 | end 59 | unless File.exist?(copied_podspec_path) 60 | FileUtils.cp(File.join(cached_framework_dir, 'Flutter.podspec'), copied_flutter_dir) 61 | end 62 | end 63 | 64 | # Keep pod path relative so it can be checked into Podfile.lock. 65 | pod 'Flutter', :path => 'Flutter' 66 | 67 | # Plugin Pods 68 | 69 | # Prepare symlinks folder. We use symlinks to avoid having Podfile.lock 70 | # referring to absolute paths on developers' machines. 71 | system('rm -rf .symlinks') 72 | system('mkdir -p .symlinks/plugins') 73 | plugin_pods = parse_KV_file('../.flutter-plugins') 74 | plugin_pods.each do |name, path| 75 | symlink = File.join('.symlinks', 'plugins', name) 76 | File.symlink(path, symlink) 77 | pod name, :path => File.join(symlink, 'ios') 78 | end 79 | end 80 | 81 | # Prevent Cocoapods from embedding a second Flutter framework and causing an error with the new Xcode build system. 82 | install! 'cocoapods', :disable_input_output_paths => true 83 | 84 | post_install do |installer| 85 | installer.pods_project.targets.each do |target| 86 | target.build_configurations.each do |config| 87 | config.build_settings['ENABLE_BITCODE'] = 'NO' 88 | end 89 | end 90 | end 91 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/VisitHistoryItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | import 'package:flutter_for_weibo/widgets/WBMediaWidget.dart'; 4 | 5 | class VisitHistoryItem extends StatelessWidget { 6 | 7 | const VisitHistoryItem({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | padding: EdgeInsets.all(0), 13 | child: Expanded( 14 | child: Column( 15 | crossAxisAlignment: CrossAxisAlignment.start, 16 | children: [ 17 | Padding(padding: EdgeInsets.only(top:10)), 18 | Row( 19 | children: [ 20 | Container( 21 | padding: EdgeInsets.fromLTRB(15, 0, 2, 0), 22 | child: Image.asset('lib/images/history.png',width: 30,height: 30), 23 | ), 24 | Text( 25 | '我的经常访问', 26 | style: TextStyle( 27 | fontSize: 13, 28 | fontWeight: FontWeight.w500, 29 | color: Color(0xFF5A5A5A), 30 | ) 31 | ) 32 | ], 33 | ), 34 | Padding(padding: EdgeInsets.only(top: 5)), 35 | Row( 36 | mainAxisAlignment: MainAxisAlignment.spaceAround, 37 | mainAxisSize: MainAxisSize.max, 38 | crossAxisAlignment: CrossAxisAlignment.center, 39 | verticalDirection: VerticalDirection.down, 40 | children: [ 41 | Column( 42 | children: [ 43 | Image.asset("lib/images/1.png", width: 80, height: 80), 44 | Text( 45 | 'iOS程序猿', 46 | style: TextStyle( 47 | fontSize: 11, 48 | fontWeight: FontWeight.normal, 49 | color: Color(0xFF535353), 50 | ), 51 | ), 52 | ], 53 | ), 54 | Column( 55 | children: [ 56 | Image.asset("lib/images/2.png", width: 80, height: 80), 57 | Text( 58 | '追剧大赏', 59 | style: TextStyle( 60 | fontSize: 11, 61 | fontWeight: FontWeight.normal, 62 | color: Color(0xFF535353), 63 | ), 64 | ), 65 | ], 66 | ), 67 | Column( 68 | children: [ 69 | Image.asset("lib/images/3.png", width: 80, height: 80), 70 | Text( 71 | '三分钟...', 72 | style: TextStyle( 73 | fontSize: 11, 74 | fontWeight: FontWeight.normal, 75 | color: Color(0xFF535353), 76 | ), 77 | ), 78 | ], 79 | ), 80 | Column( 81 | children: [ 82 | Image.asset("lib/images/4.png", width: 80, height: 80), 83 | Text( 84 | 'z说球鞋', 85 | style: TextStyle( 86 | fontSize: 11, 87 | fontWeight: FontWeight.normal, 88 | color: Color(0xFF535353), 89 | ), 90 | ), 91 | ], 92 | ), 93 | ], 94 | ), 95 | Padding(padding: EdgeInsets.only(top: 25)), 96 | 97 | 98 | ], 99 | ), 100 | ), 101 | ); 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/bottomTabbar/BottomTabbarRoute.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import '../video/VideoRoute.dart'; 3 | import '../find/FindRoute.dart'; 4 | import '../message/MessageRoute.dart'; 5 | import '../mine/MineRoute.dart'; 6 | import 'MainRoute.dart'; 7 | 8 | class BottomTabbarRoute extends StatefulWidget { 9 | const BottomTabbarRoute({Key key}) : super(key: key); 10 | 11 | @override 12 | _BottomTabbarRoute createState() => _BottomTabbarRoute(); 13 | } 14 | 15 | class _BottomTabbarRoute extends State { 16 | 17 | int currentIndex = 0; 18 | 19 | final pages = [ 20 | MainRoute(), //微博首页 21 | VideoRoute(), //视频页面 22 | FindRoute(), //发现页 23 | MessageRoute(), //消息页 24 | MineRoute() //我的页面 25 | ]; 26 | 27 | final List bottomNavItems = [ 28 | BottomNavigationBarItem( 29 | backgroundColor: Colors.white, 30 | icon: Image.asset("lib/images/tabbar_home.png", width: 35, height: 35), 31 | activeIcon: Image.asset("lib/images/tabbar_home_highlighted.webp", width: 35, height: 35), 32 | title: Text( 33 | "微博", 34 | style: TextStyle( 35 | color: Color(0xFF3D3D3D), 36 | fontSize: 11, 37 | ), 38 | ), 39 | ), 40 | BottomNavigationBarItem( 41 | backgroundColor: Colors.white, 42 | icon: Image.asset("lib/images/composer_video_icon_album.png", width: 35, height: 35), 43 | activeIcon: Image.asset("lib/images/tabbar_video_highlighted.png",width: 35, height: 35), 44 | title: Text( 45 | "视频", 46 | style: TextStyle( 47 | color: Color(0xFF3D3D3D), 48 | fontSize: 11.0, 49 | ), 50 | ), 51 | ), 52 | BottomNavigationBarItem( 53 | backgroundColor: Colors.white, 54 | icon: Image.asset("lib/images/tabbar_discover.png", width: 35, height: 35), 55 | activeIcon: Image.asset("lib/images/tabbar_discover_highlighted.png",width: 35, height: 35), 56 | title: Text( 57 | "发现", 58 | style: TextStyle( 59 | color: Color(0xFF3D3D3D), 60 | fontSize: 11.0, 61 | ), 62 | ), 63 | ), 64 | BottomNavigationBarItem( 65 | backgroundColor: Colors.white, 66 | icon: Image.asset("lib/images/tabbar_message_center.webp", width: 35, height: 35), 67 | activeIcon: Image.asset("lib/images/tabbar_message_center_highlighted.webp",width: 35, height: 35), 68 | title: Text( 69 | "消息", 70 | style: TextStyle( 71 | color: Color(0xFF3D3D3D), 72 | fontSize: 11.0, 73 | ), 74 | ), 75 | ), 76 | BottomNavigationBarItem( 77 | backgroundColor: Colors.white, 78 | icon: Image.asset("lib/images/tabbar_profile.webp", width: 35, height: 35), 79 | activeIcon: Image.asset("lib/images/tabbar_profile_highlighted.webp", width: 35, height: 35), 80 | title: Text( 81 | "我的", 82 | style: TextStyle( 83 | color: Color(0xFF3D3D3D), 84 | fontSize: 11.0, 85 | ), 86 | ), 87 | ), 88 | ]; 89 | 90 | @override 91 | void initState() { 92 | super.initState(); 93 | } 94 | 95 | @override 96 | void dispose() { 97 | super.dispose(); 98 | } 99 | 100 | @override 101 | Widget build(BuildContext context) { 102 | return Scaffold( 103 | backgroundColor: Colors.white, 104 | bottomNavigationBar: BottomNavigationBar( 105 | items: bottomNavItems, 106 | currentIndex: currentIndex, 107 | type: BottomNavigationBarType.fixed, 108 | onTap: (index) { 109 | _onChangeRoute(index); 110 | }, 111 | selectedFontSize: 11.0, 112 | unselectedFontSize: 11.0, 113 | ), 114 | body: pages[currentIndex], 115 | ); 116 | } 117 | 118 | //点击底部tab 回调 119 | void _onChangeRoute(int index) { 120 | if (index != currentIndex) { 121 | setState(() { 122 | currentIndex = index; 123 | }); 124 | } 125 | } 126 | 127 | 128 | } 129 | 130 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/PublicWelfareItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | import 'package:flutter_for_weibo/widgets/WBMediaWidget.dart'; 4 | 5 | class PublicWelfareItem extends StatelessWidget { 6 | 7 | const PublicWelfareItem({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | padding: EdgeInsets.all(0), 13 | child: Expanded( 14 | child: Column( 15 | crossAxisAlignment: CrossAxisAlignment.start, 16 | children: [ 17 | Padding(padding: EdgeInsets.only(top:10)), 18 | Row( 19 | children: [ 20 | Container( 21 | padding: EdgeInsets.fromLTRB(15, 0, 2, 0), 22 | child: Image.asset('lib/images/hand.png',width: 30,height: 30), 23 | ), 24 | Text( 25 | '微公益', 26 | style: TextStyle( 27 | fontSize: 13, 28 | fontWeight: FontWeight.w500, 29 | color: Color(0xFF5A5A5A), 30 | ) 31 | ) 32 | ], 33 | ), 34 | Padding(padding: EdgeInsets.only(top: 5)), 35 | Row( 36 | mainAxisAlignment: MainAxisAlignment.spaceAround, 37 | mainAxisSize: MainAxisSize.max, 38 | crossAxisAlignment: CrossAxisAlignment.center, 39 | verticalDirection: VerticalDirection.down, 40 | children: [ 41 | Column( 42 | children: [ 43 | Image.asset("lib/images/zero.png", width: 70, height: 70), 44 | Text( 45 | '爱心积分', 46 | style: TextStyle( 47 | fontSize: 13, 48 | fontWeight: FontWeight.normal, 49 | color: Color(0xFF535353), 50 | ), 51 | ), 52 | Text( 53 | '累计', 54 | style: TextStyle( 55 | fontSize: 11, 56 | fontWeight: FontWeight.w200, 57 | color: Color(0xFF535353), 58 | ), 59 | ), 60 | ], 61 | ), 62 | Column( 63 | children: [ 64 | Image.asset("lib/images/heart.png", width: 70, height: 70), 65 | Text( 66 | '爱心捐赠', 67 | style: TextStyle( 68 | fontSize: 13, 69 | fontWeight: FontWeight.normal, 70 | color: Color(0xFF535353), 71 | ), 72 | ), 73 | Text( 74 | '参与项目捐款', 75 | style: TextStyle( 76 | fontSize: 11, 77 | fontWeight: FontWeight.w200, 78 | color: Color(0xFF535353), 79 | ), 80 | ), 81 | ], 82 | ), 83 | Column( 84 | children: [ 85 | Image.asset("lib/images/star.png", width: 70, height: 70), 86 | Text( 87 | '星光公益', 88 | style: TextStyle( 89 | fontSize: 13, 90 | fontWeight: FontWeight.normal, 91 | color: Color(0xFF535353), 92 | ), 93 | ), 94 | Text( 95 | '助力明星公益', 96 | style: TextStyle( 97 | fontSize: 11, 98 | fontWeight: FontWeight.w200, 99 | color: Color(0xFF535353), 100 | ), 101 | ), 102 | ], 103 | ), 104 | ], 105 | ), 106 | Padding(padding: EdgeInsets.only(top: 25)), 107 | ], 108 | ), 109 | ), 110 | ); 111 | } 112 | } 113 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/mine/MineRoute.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_for_weibo/common/network/HttpService.dart'; 5 | import 'package:flutter_for_weibo/items/CategoryItem.dart'; 6 | import 'package:flutter_for_weibo/items/MineFooterItem.dart'; 7 | import 'package:flutter_for_weibo/items/MineHeaderItem.dart'; 8 | import 'package:flutter_for_weibo/items/PublicWelfareItem.dart'; 9 | import 'package:flutter_for_weibo/items/SuperTopicItem.dart'; 10 | import 'package:flutter_for_weibo/items/VisitHistoryItem.dart'; 11 | import 'package:flutter_for_weibo/items/WBCheckItem.dart'; 12 | import 'package:flutter/cupertino.dart'; 13 | 14 | class MineRoute extends StatefulWidget { 15 | const MineRoute({Key key}) : super(key: key); 16 | 17 | @override 18 | _MineRoute createState() => _MineRoute(); 19 | } 20 | 21 | class _MineRoute extends State { 22 | ScrollController scrollController = ScrollController(); 23 | bool isLoading; 24 | Map userInfo; 25 | 26 | @override 27 | void initState() { 28 | super.initState(); 29 | 30 | HttpService.getUserInfo(callback: (Map result){ 31 | 32 | if(result != null){ 33 | setState(() { 34 | userInfo = result; 35 | }); 36 | } 37 | }); 38 | } 39 | 40 | @override 41 | void dispose() { 42 | super.dispose(); 43 | } 44 | 45 | Widget renderBottom() { 46 | if (this.isLoading) { 47 | return Container( 48 | padding: EdgeInsets.symmetric(vertical: 15), 49 | child: Row( 50 | mainAxisAlignment: MainAxisAlignment.center, 51 | children: [ 52 | Text( 53 | '努力加载中...', 54 | style: TextStyle( 55 | fontSize: 15, 56 | color: Color(0xFF333333), 57 | ), 58 | ), 59 | Padding(padding: EdgeInsets.only(left: 10)), 60 | SizedBox( 61 | width: 20, 62 | height: 20, 63 | child: CircularProgressIndicator(strokeWidth: 3), 64 | ), 65 | ], 66 | ), 67 | ); 68 | } else { 69 | return Container( 70 | padding: EdgeInsets.symmetric(vertical: 15), 71 | alignment: Alignment.center, 72 | child: Text( 73 | '上拉加载更多', 74 | style: TextStyle( 75 | fontSize: 15, 76 | color: Color(0xFF333333), 77 | ), 78 | ), 79 | ); 80 | } 81 | } 82 | 83 | @override 84 | Widget build(BuildContext context) { 85 | return Scaffold( 86 | appBar: CupertinoNavigationBar( 87 | automaticallyImplyLeading: true, 88 | automaticallyImplyMiddle: true, 89 | middle: Text('我'), 90 | padding: EdgeInsetsDirectional.only(start: 5, end: 0, top: 0, bottom: 0), 91 | backgroundColor: Color(0xFFF8F8F8), 92 | trailing: new IconButton( 93 | icon: Image.asset('lib/images/mine_setting.png'), 94 | iconSize: 80, 95 | onPressed: () {}, 96 | ), 97 | leading: new IconButton( 98 | icon: Image.asset('lib/images/mine_addfriend.png'), 99 | onPressed: () {}, 100 | ), 101 | ), 102 | body: ListView.separated( 103 | controller: this.scrollController, 104 | itemCount: 7, 105 | separatorBuilder: (context, index) { 106 | return Divider( 107 | height: .5, 108 | color: Color(0xFFEEEEEE), 109 | thickness: 10, 110 | indent: 0, 111 | endIndent: 0); 112 | }, 113 | itemBuilder: (context, index) { 114 | if (index == 0) { 115 | return MineHeaderItem(userInfo: userInfo); 116 | } else if (index == 1) { 117 | return CategoryItem(); 118 | } else if (index == 2) { 119 | return VisitHistoryItem(); 120 | } else if (index == 3) { 121 | return SuperTopicItem(); 122 | } else if (index == 4) { 123 | return PublicWelfareItem(); 124 | } else if (index == 5) { 125 | return WBCheckItem(); 126 | } else if (index == 6) { 127 | return MineFooterItem(); 128 | } 129 | }, 130 | ), 131 | ); 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/models/WeiBoCard.dart: -------------------------------------------------------------------------------- 1 | 2 | 3 | class WeiBoCard{ 4 | String itemid ; 5 | String scheme;//微博详情链接: https://m.weibo.cn/status/4521192037474510?mblogid=4521192037474510&luicode=10000011&lfid=102803 6 | String createAt;//创建时间 7 | String text;//微博的文字部分(包含HTML标签) 8 | String source;//发布微博的源:来自:微博 weibo.com 9 | User user; //用户信息 10 | PageInfo pageInfo;//图片/视频信息 11 | int repostCount;//转发数 12 | int commentCount;//评论数 13 | int attCount;//赞👍数量 14 | String rawText;//源文本 15 | int vipType;//vip类型 0:红v 皇冠 16 | List> pics = new List>();//Map类型:key(pid url size geo)如果没有,就找pageinfo 看type是啥 17 | 18 | WeiBoCard.fromJson(Map json){ 19 | itemid = json['itemid'] == null ? json['mid'] : json['itemid']; 20 | scheme = json['scheme']; 21 | Map mblog = json['mblog'] == null ? json : json['mblog']; 22 | createAt = mblog['created_at']; 23 | text = mblog['text']; 24 | source = mblog['source']; 25 | Map userMap = mblog['user']; 26 | if(userMap != null && userMap.isNotEmpty){ 27 | user = User.fromJson(mblog['user']); 28 | } 29 | 30 | repostCount = mblog['reposts_count']; 31 | commentCount = mblog['comments_count']; 32 | attCount = mblog['attitudes_count']; 33 | rawText = mblog['raw_text']; 34 | vipType = mblog['mblog_vip_type']; 35 | Map pageInfoMap = mblog['page_info']; 36 | if(pageInfoMap != null && pageInfoMap.isNotEmpty){ 37 | pageInfo = PageInfo.fromJson(mblog['page_info']); 38 | } 39 | List tempPics = mblog['pics']; 40 | if (tempPics != null){ 41 | for (Map item in tempPics) { 42 | Map pic = new Map(); 43 | String url = item['url']; 44 | String pid = item['pid']; 45 | pic['url'] = url; 46 | pic['pid'] = pid; 47 | pics.add(pic); 48 | } 49 | } 50 | 51 | } 52 | 53 | //解析 list 54 | static List fromListJson(Map json){ 55 | Map data = json['data']; 56 | List dataCards = data['cards'] == null ? data['statuses'] : data['cards']; 57 | List cards = new List(); 58 | if(dataCards != null){ 59 | for (var cardjson in dataCards) { 60 | if(cardjson is Map){ 61 | WeiBoCard card = WeiBoCard.fromJson(cardjson); 62 | cards.add(card); 63 | } 64 | } 65 | } 66 | 67 | return cards; 68 | } 69 | 70 | @override 71 | bool operator == (other) { 72 | return this.hashCode == other.hashCode; 73 | } 74 | 75 | //微博数据拉下来会重复,所以用itemid作为唯一标示 76 | @override 77 | int get hashCode { 78 | int index = this.itemid.lastIndexOf('_'); 79 | String itemCode = this.itemid.substring(index+1); 80 | return int.tryParse(itemCode) ?? -1; 81 | } 82 | 83 | } 84 | 85 | 86 | 87 | 88 | class User{ 89 | int id; 90 | String screenName;//用户名 91 | String profileImgUrl;//头像 92 | String profileUrl;//当前用户的profile页 93 | String verifiedReason;//微博认证:如:原创视频播主,可为空 94 | String desc; 95 | 96 | User({this.screenName,this.desc,this.profileImgUrl}){ 97 | 98 | } 99 | 100 | 101 | User.fromJson(Map json){ 102 | id = json['id']; 103 | screenName = json['screen_name']; 104 | profileImgUrl = json['profile_image_url']; 105 | profileUrl = json['profile_url']; 106 | verifiedReason = json['verified_reason']; 107 | 108 | } 109 | } 110 | 111 | class PageInfo{ 112 | String pageUrl; 113 | String type;//vide 、webpage、search_topic(search的数据)、place(同城) 114 | MediaInfo mediaInfo;//多媒体信息 视频 图片 115 | String playCount;//32万次观看 116 | String pageTitle;//微博视频 117 | String content1;//微博视频 118 | String content2;//你们能坚持一件事多久?#非遗在身边# #遇见艺术# #国学新青年# #王者荣耀@微博故事 @微博国学 119 | 120 | PageInfo.fromJson(Map json){ 121 | pageUrl = json['page_url']; 122 | type = json['type']; 123 | Map mediaMap = json['media_info']; 124 | if(mediaMap != null && mediaMap.isNotEmpty){ 125 | mediaInfo = MediaInfo.fromJson(json['media_info']); 126 | } 127 | playCount = json['play_count']; 128 | pageTitle = json['page_title']; 129 | content1 = json['content1']; 130 | content2 = json['content2']; 131 | } 132 | 133 | } 134 | 135 | 136 | class MediaInfo{ 137 | String name; 138 | String url;//媒体URL : http://f.video.weibocdn.com/002pSqj5gx07Etu1zRcH01041200fLCb0E010.mp4?label=mp4_ld&template=640x360.25.0&trans_finger=bdef57f06ae52835a2c783ca389e8517&ori=0&ps=1CwnkDw1GXwCQx&Expires=1593526655&ssig=m3pF6VbtsS&KID=unistore,video 139 | String onlineUsers;//:32万次观看 140 | 141 | 142 | MediaInfo.fromJson(Map json){ 143 | name = json['name']; 144 | url = json['stream_url']; 145 | onlineUsers = json['online_users']; 146 | 147 | 148 | } 149 | } -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/message/MessageRoute.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_for_weibo/items/MessageItem.dart'; 4 | import 'package:flutter/cupertino.dart'; 5 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 6 | import 'package:flutter_for_weibo/widgets/CustomNavBar.dart'; 7 | 8 | class MessageRoute extends StatefulWidget { 9 | const MessageRoute({Key key}) : super(key: key); 10 | 11 | @override 12 | _MessageRoute createState() => _MessageRoute(); 13 | } 14 | 15 | class _MessageRoute extends State { 16 | ScrollController scrollController = ScrollController(); 17 | bool isLoading; 18 | 19 | @override 20 | void initState() { 21 | super.initState(); 22 | } 23 | 24 | @override 25 | void dispose() { 26 | super.dispose(); 27 | } 28 | 29 | List userList() { 30 | User at = new User(screenName: '@我的', profileImgUrl: 'lib/images/at.png'); 31 | User comment = new User(screenName: '评论',profileImgUrl: 'lib/images/comment.png'); 32 | User zan = new User(screenName: '赞', profileImgUrl: 'lib/images/zan1.png'); 33 | User rss = new User(screenName: '订阅消息', desc: '[39条] 微博钱包:[链接]恭喜您获得微博会员。',profileImgUrl: 'lib/images/rss.png'); 34 | User user = new User(screenName: '乡村教师代言人-马云', desc: '我这有个P10岗,来不来?',profileImgUrl: 'lib/images/mayun.png'); 35 | User user1 = new User(screenName: '普京', desc: '最近又搞了两艘航母,兄弟啥时候来看看?',profileImgUrl: 'lib/images/pujing.png'); 36 | User user2 = new User(screenName: '特朗普', desc: '老铁,最近我贼闹心。',profileImgUrl: 'lib/images/telangpu.png'); 37 | User user3 = new User(screenName: '雷军', desc: '兄弟最近咋样?are you ok ?',profileImgUrl: 'lib/images/leijun.png'); 38 | User user4 = new User(screenName: '王力宏', desc: '晚上一起来KTV唱歌?',profileImgUrl: 'lib/images/wanglihong.png'); 39 | User user5 = new User(screenName: '蔡徐坤', desc: '下班去打篮球?',profileImgUrl: 'lib/images/caixukun.png'); 40 | User user6 = new User(screenName: '刘德华', desc: '老铁,你说我跟王力宏我俩谁帅?',profileImgUrl: 'lib/images/liudehua.png'); 41 | User user7 = new User(screenName: '比尔盖茨', desc: '哥,我最近手头紧,想问你借点钱。',profileImgUrl: 'lib/images/biergaici.png'); 42 | return [at,comment,zan,rss,user,user1,user2,user3,user4,user5,user6,user7]; 43 | } 44 | 45 | @override 46 | Widget build(BuildContext context) { 47 | return CustomNavBar( 48 | title: '消息', 49 | backgroundColor: Color(0xFFF8F8F8), 50 | leading: Container( 51 | padding: EdgeInsets.fromLTRB(8, 12, 0, 0), 52 | child: Text( 53 | '发现群', 54 | style: TextStyle( 55 | fontSize: 16, 56 | color: Color(0xFF222222), 57 | ), 58 | ), 59 | ), 60 | trailing: new IconButton( 61 | icon: Image.asset( 62 | 'lib/images/msg_add.png', 63 | width: 90, 64 | height: 90, 65 | ), 66 | onPressed: () {}, 67 | ), 68 | middle: Container( 69 | padding: EdgeInsets.fromLTRB(60, 0, 60, 0), 70 | child: Row( 71 | mainAxisAlignment: MainAxisAlignment.spaceAround, 72 | mainAxisSize: MainAxisSize.max, 73 | crossAxisAlignment: CrossAxisAlignment.center, 74 | verticalDirection: VerticalDirection.down, 75 | children: [ 76 | Text( 77 | '动态', 78 | style: TextStyle( 79 | fontSize: 18, 80 | color: Color(0xFF000000), 81 | fontWeight: FontWeight.w200), 82 | ), 83 | Column( 84 | children: [ 85 | Container( 86 | margin: EdgeInsets.only(top: 9), 87 | child: Text( 88 | '消息', 89 | style: TextStyle( 90 | fontSize: 18, 91 | color: Color(0xFF000000), 92 | fontWeight: FontWeight.w500), 93 | ), 94 | ), 95 | Container( 96 | margin: EdgeInsets.only(top: 1), 97 | width: 50, 98 | height: 7, 99 | child: Image.asset( 100 | 'lib/images/line.png', 101 | ), 102 | ), 103 | ], 104 | ), 105 | ], 106 | ), 107 | ), 108 | body: ListView.separated( 109 | controller: this.scrollController, 110 | itemCount: userList().length, 111 | separatorBuilder: (context, index) { 112 | return Divider(height: .5, color: Color(0xFFEEEEEE), indent: 0, endIndent: 0); 113 | }, 114 | itemBuilder: (context, index) { 115 | User user = userList()[index]; 116 | return MessageItem(user: user); 117 | }, 118 | ), 119 | ); 120 | } 121 | } 122 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/SuperTopicItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | import 'package:flutter_for_weibo/widgets/WBMediaWidget.dart'; 4 | 5 | class SuperTopicItem extends StatelessWidget { 6 | 7 | const SuperTopicItem({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | padding: EdgeInsets.all(0), 13 | child: Expanded( 14 | child: Column( 15 | crossAxisAlignment: CrossAxisAlignment.start, 16 | children: [ 17 | Padding(padding: EdgeInsets.only(top:10)), 18 | Row( 19 | children: [ 20 | Container( 21 | padding: EdgeInsets.fromLTRB(15, 0, 2, 0), 22 | child: Image.asset('lib/images/supertopic.png',width: 30,height: 30), 23 | ), 24 | Text( 25 | '超话社区', 26 | style: TextStyle( 27 | fontSize: 13, 28 | fontWeight: FontWeight.w500, 29 | color: Color(0xFF5A5A5A), 30 | ) 31 | ) 32 | ], 33 | ), 34 | Padding(padding: EdgeInsets.only(top: 5)), 35 | Row( 36 | mainAxisAlignment: MainAxisAlignment.spaceAround, 37 | mainAxisSize: MainAxisSize.max, 38 | crossAxisAlignment: CrossAxisAlignment.center, 39 | verticalDirection: VerticalDirection.down, 40 | children: [ 41 | Column( 42 | children: [ 43 | Image.asset("lib/images/spring.png", width: 80, height: 80), 44 | Text( 45 | '春晚答题王', 46 | style: TextStyle( 47 | fontSize: 11, 48 | fontWeight: FontWeight.normal, 49 | color: Color(0xFF535353), 50 | ), 51 | ), 52 | Text( 53 | '已关注', 54 | style: TextStyle( 55 | fontSize: 11, 56 | fontWeight: FontWeight.w200, 57 | color: Color(0xFF535353), 58 | ), 59 | ), 60 | ], 61 | ), 62 | Column( 63 | children: [ 64 | Image.asset("lib/images/give.png", width: 80, height: 80), 65 | Text( 66 | '赠书福利', 67 | style: TextStyle( 68 | fontSize: 11, 69 | fontWeight: FontWeight.normal, 70 | color: Color(0xFF535353), 71 | ), 72 | ), 73 | Text( 74 | '已关注', 75 | style: TextStyle( 76 | fontSize: 11, 77 | fontWeight: FontWeight.w200, 78 | color: Color(0xFF535353), 79 | ), 80 | ), 81 | ], 82 | ), 83 | Column( 84 | children: [ 85 | Image.asset("lib/images/supercar.png", width: 80, height: 80), 86 | Text( 87 | '豪车', 88 | style: TextStyle( 89 | fontSize: 11, 90 | fontWeight: FontWeight.normal, 91 | color: Color(0xFF535353), 92 | ), 93 | ), 94 | Text( 95 | '已关注', 96 | style: TextStyle( 97 | fontSize: 11, 98 | fontWeight: FontWeight.w200, 99 | color: Color(0xFF535353), 100 | ), 101 | ), 102 | ], 103 | ), 104 | Column( 105 | children: [ 106 | Image.asset("lib/images/school.png", width: 80, height: 80), 107 | Text( 108 | '校园', 109 | style: TextStyle( 110 | fontSize: 11, 111 | fontWeight: FontWeight.normal, 112 | color: Color(0xFF535353), 113 | ), 114 | ), 115 | Text( 116 | '已关注', 117 | style: TextStyle( 118 | fontSize: 11, 119 | fontWeight: FontWeight.w200, 120 | color: Color(0xFF535353), 121 | ), 122 | ), 123 | ], 124 | ), 125 | ], 126 | ), 127 | Padding(padding: EdgeInsets.only(top: 25)), 128 | ], 129 | ), 130 | ), 131 | ); 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/common/network/HttpService.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_for_weibo/common/Global.dart'; 2 | import 'package:flutter_for_weibo/common/utils/CacheUtil.dart'; 3 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 4 | import 'Network.dart'; 5 | 6 | class HttpService { 7 | 8 | /*获取微博内容列表 9 | * containerId : 102803 是热门 ,sinceId/page :是页数 10 | * path:默认是:/api/container/getIndex 11 | */ 12 | static void getWeiBoContent({String path,String containerId,String sinceId,String page,void callback(List result)}){ 13 | var params = { 14 | 'containerid':containerId, 15 | 'openApp':'0', 16 | 'since_id':(sinceId != null ? sinceId : ''), 17 | 'page':(page != null ? page : '') 18 | }; 19 | 20 | //成功回调函数 21 | SuccessFunc successFunc = (dynamic result){ 22 | 23 | List list = WeiBoCard.fromListJson(result); 24 | callback(list); 25 | 26 | }; 27 | //失败回调函数 28 | FailFunc failFunc = (dynamic error){ 29 | //弹窗error 30 | callback(null); 31 | }; 32 | Network.sharedInstance.doGet( 33 | path: (path == null ? URLConfig.getHotWB : path ), 34 | params: params, 35 | success: successFunc, 36 | failure: failFunc, 37 | baseURL: URLConfig.mBaseURL 38 | ); 39 | } 40 | 41 | 42 | static void getAccessToken({void callback(Map result)}) { 43 | 44 | String code = CacheUtil.sharedInstance.getAuthorizationCode(); 45 | var params = {'client_id': Global.weiboAppKey, 46 | 'client_secret' : Global.weiboAppSecret, 47 | 'grant_type': 'authorization_code', 48 | 'code' : (code != null ? code : ''), 49 | "redirect_uri": URLConfig.weiboRedirectUri, 50 | }; 51 | 52 | //成功回调函数 53 | SuccessFunc successFunc = (dynamic result){ 54 | String token = result['access_token']; 55 | String uid = result['uid']; 56 | int expires = result['expires_in'];//单位: 秒 57 | 58 | DateTime curTime = DateTime.now(); 59 | DateTime newDateTime = curTime.add(new Duration(seconds: expires)); 60 | int lastexpires = newDateTime.millisecondsSinceEpoch; 61 | 62 | //存储token,以后作为请求微博api的基础参数 63 | CacheUtil.sharedInstance.sotreAccessToken(token); 64 | CacheUtil.sharedInstance.storeUid(uid); 65 | CacheUtil.sharedInstance.storeExpires(lastexpires); 66 | callback(result); 67 | }; 68 | 69 | //失败回调函数 70 | FailFunc failFunc = (dynamic error){ 71 | callback(null); 72 | }; 73 | Network.sharedInstance.doPost( 74 | path: URLConfig.getAccessToken, 75 | params: params, 76 | success: successFunc, 77 | failure: failFunc 78 | ); 79 | } 80 | 81 | 82 | 83 | 84 | 85 | //获取用户信息 86 | static void getUserInfo({void callback(Map result)}) { 87 | 88 | String token = CacheUtil.sharedInstance.getAccessToken(); 89 | String uid = CacheUtil.sharedInstance.getUid(); 90 | 91 | void requestUserInfo(){ 92 | var params = {'access_token': token == null ? '' : token, 93 | 'uid' : uid == null ? '' : uid}; 94 | 95 | //成功回调函数 96 | SuccessFunc successFunc = (dynamic result){ 97 | 98 | callback(result); 99 | 100 | }; 101 | //失败回调函数 102 | FailFunc failFunc = (dynamic error){ 103 | callback(null); 104 | }; 105 | Network.sharedInstance.doGet( 106 | path: URLConfig.getUserInfo, 107 | params: params, 108 | success: successFunc, 109 | failure: failFunc 110 | ); 111 | } 112 | 113 | DateTime curTime = DateTime.now(); 114 | int curSeconds = curTime.millisecondsSinceEpoch; 115 | int expores = CacheUtil.sharedInstance.getExpires(); 116 | 117 | int diff = expores - curSeconds; 118 | 119 | if(diff <= 0 || token == null || uid == null){ 120 | getAccessToken(callback: (Map map){ 121 | requestUserInfo(); 122 | }); 123 | }else{ 124 | requestUserInfo(); 125 | } 126 | 127 | } 128 | 129 | } 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | class URLConfig { 138 | static const String baseURL = 'https://api.weibo.com'; 139 | static const String mBaseURL = 'https://m.weibo.cn'; 140 | 141 | 142 | static const String auth = '/oauth2/authorize';//微博认证 143 | static const String weiboRedirectUri = 'https://api.weibo.com/oauth2/default.html';//微博认证后端配置,写死即可 144 | 145 | static const String getToken = ''; 146 | 147 | /* 热门微博 : containerid=102803 openApp=0 since_id */ 148 | static const String getHotWB = '/api/container/getIndex'; 149 | 150 | /* 同城微博 :containerid=102803_2222 page=1 */ 151 | /* 榜单微博 :containerid=102803_ctg1_8999_-_ctg1_8999_home page=1 */ 152 | /* 数码微博 :containerid=102803_ctg1_5088_-_ctg1_5088 page=1 */ 153 | /* 科技微博 :containerid=102803_ctg1_2088_-_ctg1_2088 page=1 */ 154 | /* 游戏微博 :containerid=102803_ctg1_4888_-_ctg1_4888 page=1 */ 155 | static const String getOtherChannelWB = '/api/feed/trendtop'; 156 | 157 | //获取用户信息 158 | static const String getUserInfo = '/2/users/show.json'; 159 | 160 | 161 | static const String getAccessToken = '/oauth2/access_token'; 162 | 163 | 164 | } 165 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/CategoryItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 3 | import 'package:flutter_for_weibo/widgets/WBMediaWidget.dart'; 4 | 5 | class CategoryItem extends StatelessWidget { 6 | 7 | const CategoryItem({Key key}) : super(key: key); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return Container( 12 | padding: EdgeInsets.all(0), 13 | child: Expanded( 14 | child: Column( 15 | crossAxisAlignment: CrossAxisAlignment.start, 16 | children: [ 17 | Padding(padding: EdgeInsets.only(top:15)), 18 | Row( 19 | mainAxisAlignment: MainAxisAlignment.spaceAround, 20 | mainAxisSize: MainAxisSize.max, 21 | crossAxisAlignment: CrossAxisAlignment.center, 22 | verticalDirection: VerticalDirection.down, 23 | children: [ 24 | Column( 25 | children: [ 26 | Image.asset("lib/images/pic.png", width: 50, height: 50), 27 | Text( 28 | '我的相册', 29 | style: TextStyle( 30 | fontSize: 11, 31 | fontWeight: FontWeight.normal, 32 | color: Color(0xFF535353), 33 | ), 34 | ), 35 | ], 36 | ), 37 | Column( 38 | children: [ 39 | Image.asset("lib/images/story.png", width: 50, height: 50), 40 | Text( 41 | '我的故事', 42 | style: TextStyle( 43 | fontSize: 11, 44 | fontWeight: FontWeight.normal, 45 | color: Color(0xFF535353), 46 | ), 47 | ), 48 | ], 49 | ), 50 | Column( 51 | children: [ 52 | Image.asset("lib/images/zan.png", width: 50, height: 50), 53 | Text( 54 | '我的赞', 55 | style: TextStyle( 56 | fontSize: 11, 57 | fontWeight: FontWeight.normal, 58 | color: Color(0xFF535353), 59 | ), 60 | ), 61 | ], 62 | ), 63 | Column( 64 | children: [ 65 | Image.asset("lib/images/fansstory.png", width: 50, height: 50), 66 | Text( 67 | '粉丝服务', 68 | style: TextStyle( 69 | fontSize: 11, 70 | fontWeight: FontWeight.normal, 71 | color: Color(0xFF535353), 72 | ), 73 | ), 74 | ], 75 | ), 76 | ], 77 | ), 78 | Padding(padding: EdgeInsets.only(top: 10)), 79 | Row( 80 | mainAxisAlignment: MainAxisAlignment.spaceAround, 81 | mainAxisSize: MainAxisSize.max, 82 | crossAxisAlignment: CrossAxisAlignment.center, 83 | verticalDirection: VerticalDirection.down, 84 | children: [ 85 | Column( 86 | children: [ 87 | Image.asset("lib/images/qianbao.png", width: 50, height: 50), 88 | Text( 89 | '微博钱包', 90 | style: TextStyle( 91 | fontSize: 11, 92 | fontWeight: FontWeight.normal, 93 | color: Color(0xFF535353), 94 | ), 95 | ), 96 | ], 97 | ), 98 | Column( 99 | children: [ 100 | Image.asset("lib/images/bag.png", width: 50, height: 50), 101 | Text( 102 | '微博优选', 103 | style: TextStyle( 104 | fontSize: 11, 105 | fontWeight: FontWeight.normal, 106 | color: Color(0xFF535353), 107 | ), 108 | ), 109 | ], 110 | ), 111 | Column( 112 | children: [ 113 | Image.asset("lib/images/ad.png", width: 50, height: 50), 114 | Text( 115 | '广告中心', 116 | style: TextStyle( 117 | fontSize: 11, 118 | fontWeight: FontWeight.normal, 119 | color: Color(0xFF535353), 120 | ), 121 | ), 122 | ], 123 | ), 124 | Column( 125 | children: [ 126 | Image.asset("lib/images/center.png", width: 50, height: 50), 127 | Text( 128 | '客服中心', 129 | style: TextStyle( 130 | fontSize: 11, 131 | fontWeight: FontWeight.normal, 132 | color: Color(0xFF535353), 133 | ), 134 | ), 135 | ], 136 | ), 137 | ], 138 | ), 139 | Padding(padding: EdgeInsets.only(top: 30)), 140 | 141 | ], 142 | ), 143 | ), 144 | ); 145 | } 146 | } 147 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/items/MineHeaderItem.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class MineHeaderItem extends StatelessWidget { 4 | final Map userInfo; 5 | const MineHeaderItem({Key key, this.userInfo}) : super(key: key); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return Container( 10 | padding: EdgeInsets.all(0), 11 | child: Expanded( 12 | child: Column( 13 | crossAxisAlignment: CrossAxisAlignment.start, 14 | children: [ 15 | Divider( 16 | height: .5, 17 | color: Color(0xFFEEEEEE), 18 | thickness: 10, 19 | indent: 0, 20 | endIndent: 0 21 | ), 22 | Row( 23 | children: [ 24 | Container( 25 | margin: EdgeInsets.all(15), 26 | width: 60, 27 | height: 60, 28 | decoration: BoxDecoration( 29 | borderRadius: BorderRadius.circular(100), 30 | image: DecorationImage( 31 | fit: BoxFit.fill, 32 | image: NetworkImage( 33 | (userInfo == null ? '' : userInfo['profile_image_url'].toString()) 34 | ) 35 | ), 36 | ), 37 | ), 38 | Column( 39 | crossAxisAlignment: CrossAxisAlignment.start, 40 | children: [ 41 | Container( 42 | padding: EdgeInsets.fromLTRB(0, 0, 0, 6), 43 | child: Text( 44 | userInfo == null ? '暂无昵称' : userInfo['screen_name'].toString(), 45 | maxLines: 1, 46 | overflow: TextOverflow.ellipsis, 47 | style: TextStyle( 48 | fontSize: 15, 49 | fontWeight: FontWeight.w700, 50 | ), 51 | ), 52 | ), 53 | Container( 54 | padding: EdgeInsets.only(left: 0), 55 | child: Text( 56 | userInfo == null ? '简介:暂无' : userInfo['description'].toString(), 57 | maxLines: 1, 58 | overflow: TextOverflow.ellipsis, 59 | style: TextStyle( 60 | fontSize: 12, 61 | fontWeight: FontWeight.normal, 62 | color: Color(0xFF969696), 63 | ), 64 | ), 65 | ), 66 | ], 67 | ), 68 | ], 69 | ), 70 | Divider(height: .5, color: Color(0x1C000000), indent: 0, endIndent: 0), 71 | Padding(padding: EdgeInsets.only(top:15)), 72 | Row( 73 | mainAxisAlignment: MainAxisAlignment.spaceAround, 74 | mainAxisSize: MainAxisSize.max, 75 | crossAxisAlignment: CrossAxisAlignment.center, 76 | verticalDirection: VerticalDirection.down, 77 | children: [ 78 | Column( 79 | children: [ 80 | Text( 81 | userInfo != null ? userInfo['statuses_count'].toString() : '0', 82 | style: TextStyle( 83 | fontSize:15, 84 | fontWeight: FontWeight.w700, 85 | ), 86 | ), 87 | Text( 88 | '微博', 89 | style: TextStyle( 90 | fontSize: 12, 91 | fontWeight: FontWeight.normal, 92 | color: Color(0xFF969696), 93 | ), 94 | ), 95 | ], 96 | ), 97 | Column( 98 | children: [ 99 | Text( 100 | userInfo != null ? userInfo['friends_count'].toString() : '0', 101 | style: TextStyle( 102 | fontSize:15, 103 | fontWeight: FontWeight.w700, 104 | ), 105 | ), 106 | Text( 107 | '关注', 108 | style: TextStyle( 109 | fontSize: 12, 110 | fontWeight: FontWeight.normal, 111 | color: Color(0xFF969696), 112 | ), 113 | ), 114 | ], 115 | ), 116 | Column( 117 | children: [ 118 | Text( 119 | userInfo != null ? userInfo['followers_count'].toString() : '0', 120 | style: TextStyle( 121 | fontSize:15, 122 | fontWeight: FontWeight.w700, 123 | ), 124 | ), 125 | Text( 126 | '粉丝', 127 | style: TextStyle( 128 | fontSize: 12, 129 | fontWeight: FontWeight.normal, 130 | color: Color(0xFF969696), 131 | ), 132 | ), 133 | ], 134 | ), 135 | ], 136 | ), 137 | Padding(padding: EdgeInsets.only(top: 25)), 138 | 139 | ], 140 | ), 141 | ), 142 | ); 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /flutter_for_weibo/lib/routes/bottomTabbar/MainRoute.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_for_weibo/common/network/HttpService.dart'; 3 | import 'package:flutter_for_weibo/items/WeiboItem.dart'; 4 | import 'package:flutter_for_weibo/models/WeiBoCard.dart'; 5 | 6 | 7 | class MainRoute extends StatefulWidget { 8 | const MainRoute({Key key}) : super(key: key); 9 | 10 | @override 11 | _MainRoute createState() => _MainRoute(); 12 | } 13 | 14 | class _MainRoute extends State with SingleTickerProviderStateMixin{ 15 | bool isLoading = false; 16 | ScrollController scrollController = ScrollController(); 17 | List> list = List>(); 18 | List> urlList = List>(); 19 | int sinceId = 0; 20 | DateTime lastTime ; 21 | int currentIndex = 0; 22 | 23 | TabController tabController; 24 | List tabs = List(); 25 | 26 | @override 27 | void initState() { 28 | super.initState(); 29 | 30 | initTabsData(); 31 | 32 | tabController = TabController(initialIndex: 0, length: tabs.length, vsync: this); 33 | 34 | lastTime = DateTime.now(); 35 | 36 | loadData(); 37 | 38 | this.scrollController.addListener(() { 39 | if (!this.isLoading && this.scrollController.position.pixels >= this.scrollController.position.maxScrollExtent) { 40 | DateTime curTime = DateTime.now(); 41 | Duration during = curTime.difference(lastTime); 42 | 43 | if(during.inSeconds > 2 || lastTime == null){ 44 | this.isLoading = true; 45 | this.loadData(); 46 | lastTime = curTime; 47 | } 48 | } 49 | }); 50 | } 51 | 52 | @override 53 | void dispose() { 54 | super.dispose(); 55 | this.scrollController.dispose(); 56 | } 57 | 58 | initTabsData(){ 59 | List> dataSource = [ 60 | {"text":"热门","path":"/api/container/getIndex",'containerid':'102803'}, 61 | {"text":"同城","path":URLConfig.getOtherChannelWB,'containerid':'102803_2222'}, 62 | {"text":"榜单","path":URLConfig.getOtherChannelWB,'containerid':'102803_ctg1_8999_-_ctg1_8999_home'}, 63 | {"text":"数码","path":URLConfig.getOtherChannelWB,'containerid':'102803_ctg1_5088_-_ctg1_5088'}, 64 | {"text":"科技","path":URLConfig.getOtherChannelWB,'containerid':'102803_ctg1_2088_-_ctg1_2088'}, 65 | {"text":"游戏","path":URLConfig.getOtherChannelWB,'containerid':'102803_ctg1_4888_-_ctg1_4888'} 66 | ]; 67 | 68 | for (Map item in dataSource) { 69 | tabs.add(Tab(text: item['text'])); 70 | list.add(List()); 71 | urlList.add({'path':item['path'],'containerid':item['containerid'],'currentPage':'1'}); 72 | } 73 | } 74 | 75 | 76 | loadData() { 77 | List dataList = list[currentIndex]; 78 | Map currentURLMap = urlList[currentIndex]; 79 | String containerid = currentURLMap['containerid']; 80 | String path = (currentIndex == 0 ? null : currentURLMap['path']); 81 | String page = (currentIndex == 0 ? null : currentURLMap['currentPage']); 82 | String sinceId = (currentIndex != 0 ? null : currentURLMap['currentPage']); 83 | 84 | HttpService.getWeiBoContent( 85 | page: page, 86 | sinceId: sinceId, 87 | path: path, 88 | containerId: containerid, 89 | callback: (List cardList){ 90 | if(cardList != null && cardList.length > 0){ 91 | for (var weibocard in cardList) { 92 | if(!dataList.contains(weibocard)){ 93 | dataList.add(weibocard); 94 | } 95 | } 96 | } 97 | 98 | this.setState(() { 99 | String currentPage = currentURLMap['currentPage']; 100 | int page = int.parse(currentPage) + 1; 101 | currentURLMap['currentPage'] = page.toString(); 102 | this.isLoading = false; 103 | }); 104 | } 105 | ); 106 | 107 | } 108 | 109 | Widget renderBottom() { 110 | if(this.isLoading) { 111 | return Container( 112 | padding: EdgeInsets.symmetric(vertical: 15), 113 | child: Row( 114 | mainAxisAlignment: MainAxisAlignment.center, 115 | children: [ 116 | Text( 117 | '努力加载中...', 118 | style: TextStyle( 119 | fontSize: 15, 120 | color: Color(0xFF333333), 121 | ), 122 | ), 123 | Padding(padding: EdgeInsets.only(left: 10)), 124 | SizedBox( 125 | width: 20, 126 | height: 20, 127 | child: CircularProgressIndicator(strokeWidth: 3), 128 | ), 129 | ], 130 | ), 131 | ); 132 | } else { 133 | return Container( 134 | padding: EdgeInsets.symmetric(vertical: 15), 135 | alignment: Alignment.center, 136 | child: Text( 137 | '上拉加载更多', 138 | style: TextStyle( 139 | fontSize: 15, 140 | color: Color(0xFF333333), 141 | ), 142 | ), 143 | ); 144 | } 145 | } 146 | 147 | @override 148 | Widget build(BuildContext context) { 149 | 150 | return DefaultTabController( 151 | length: tabs.length, 152 | child: MaterialApp( 153 | theme: ThemeData(primaryColor: Color(0xFFFFFFFF)), 154 | home: Scaffold( 155 | backgroundColor: Colors.white, 156 | appBar: AppBar( 157 | title: TabBar( 158 | controller: tabController,//可以和TabBarView使用同一个TabController 159 | tabs: tabs, 160 | isScrollable: true, 161 | indicatorColor: Color(0xFFFFFFFF), 162 | indicatorWeight: 1, 163 | indicatorSize: TabBarIndicatorSize.tab, 164 | indicatorPadding: EdgeInsets.only(bottom: 10.0), 165 | labelPadding: EdgeInsets.only(left: 20), 166 | labelColor: Color(0xffE18519), 167 | labelStyle: TextStyle( 168 | fontSize: 16.0, 169 | ), 170 | unselectedLabelColor: Color(0xff3D3D3D), 171 | unselectedLabelStyle: TextStyle( 172 | fontSize: 16.0, 173 | ), 174 | onTap: (int index){ 175 | currentIndex = index; 176 | loadData(); 177 | }, 178 | ), 179 | ), 180 | body: TabBarView( 181 | controller: tabController, 182 | children: tabs.map((Tab tab) => 183 | Container(child: Center(child: 184 | ListView.separated( 185 | controller: this.scrollController, 186 | itemCount: (this.list.length > currentIndex ? this.list[currentIndex].length : 0), 187 | separatorBuilder: (context, index) { 188 | return Divider(height: .5,color: Color(0xFFDDDDDD)); 189 | }, 190 | itemBuilder: (context, index) { 191 | List dataList = this.list[currentIndex]; 192 | if (index < dataList.length) { 193 | return WeiboItem(data: dataList[index]); 194 | } else { 195 | return this.renderBottom(); 196 | } 197 | }, 198 | ), 199 | ), 200 | )).toList()), 201 | ), 202 | ), 203 | ); 204 | 205 | } 206 | } 207 | -------------------------------------------------------------------------------- /flutter_for_weibo/pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | archive: 5 | dependency: transitive 6 | description: 7 | name: archive 8 | url: "https://pub.flutter-io.cn" 9 | source: hosted 10 | version: "2.0.13" 11 | args: 12 | dependency: transitive 13 | description: 14 | name: args 15 | url: "https://pub.flutter-io.cn" 16 | source: hosted 17 | version: "1.6.0" 18 | async: 19 | dependency: transitive 20 | description: 21 | name: async 22 | url: "https://pub.flutter-io.cn" 23 | source: hosted 24 | version: "2.4.1" 25 | boolean_selector: 26 | dependency: transitive 27 | description: 28 | name: boolean_selector 29 | url: "https://pub.flutter-io.cn" 30 | source: hosted 31 | version: "2.0.0" 32 | charcode: 33 | dependency: transitive 34 | description: 35 | name: charcode 36 | url: "https://pub.flutter-io.cn" 37 | source: hosted 38 | version: "1.1.3" 39 | collection: 40 | dependency: transitive 41 | description: 42 | name: collection 43 | url: "https://pub.flutter-io.cn" 44 | source: hosted 45 | version: "1.14.12" 46 | convert: 47 | dependency: transitive 48 | description: 49 | name: convert 50 | url: "https://pub.flutter-io.cn" 51 | source: hosted 52 | version: "2.1.1" 53 | crypto: 54 | dependency: transitive 55 | description: 56 | name: crypto 57 | url: "https://pub.flutter-io.cn" 58 | source: hosted 59 | version: "2.1.4" 60 | cupertino_icons: 61 | dependency: "direct main" 62 | description: 63 | name: cupertino_icons 64 | url: "https://pub.flutter-io.cn" 65 | source: hosted 66 | version: "0.1.3" 67 | dio: 68 | dependency: "direct main" 69 | description: 70 | name: dio 71 | url: "https://pub.flutter-io.cn" 72 | source: hosted 73 | version: "3.0.9" 74 | file: 75 | dependency: transitive 76 | description: 77 | name: file 78 | url: "https://pub.flutter-io.cn" 79 | source: hosted 80 | version: "5.2.1" 81 | fluro: 82 | dependency: "direct main" 83 | description: 84 | name: fluro 85 | url: "https://pub.flutter-io.cn" 86 | source: hosted 87 | version: "1.6.3" 88 | flutter: 89 | dependency: "direct main" 90 | description: flutter 91 | source: sdk 92 | version: "0.0.0" 93 | flutter_test: 94 | dependency: "direct dev" 95 | description: flutter 96 | source: sdk 97 | version: "0.0.0" 98 | flutter_web_plugins: 99 | dependency: transitive 100 | description: flutter 101 | source: sdk 102 | version: "0.0.0" 103 | http_parser: 104 | dependency: transitive 105 | description: 106 | name: http_parser 107 | url: "https://pub.flutter-io.cn" 108 | source: hosted 109 | version: "3.1.4" 110 | image: 111 | dependency: transitive 112 | description: 113 | name: image 114 | url: "https://pub.flutter-io.cn" 115 | source: hosted 116 | version: "2.1.12" 117 | intl: 118 | dependency: transitive 119 | description: 120 | name: intl 121 | url: "https://pub.flutter-io.cn" 122 | source: hosted 123 | version: "0.16.1" 124 | matcher: 125 | dependency: transitive 126 | description: 127 | name: matcher 128 | url: "https://pub.flutter-io.cn" 129 | source: hosted 130 | version: "0.12.6" 131 | meta: 132 | dependency: transitive 133 | description: 134 | name: meta 135 | url: "https://pub.flutter-io.cn" 136 | source: hosted 137 | version: "1.1.8" 138 | path: 139 | dependency: transitive 140 | description: 141 | name: path 142 | url: "https://pub.flutter-io.cn" 143 | source: hosted 144 | version: "1.6.4" 145 | path_provider_linux: 146 | dependency: transitive 147 | description: 148 | name: path_provider_linux 149 | url: "https://pub.flutter-io.cn" 150 | source: hosted 151 | version: "0.0.1+2" 152 | path_provider_platform_interface: 153 | dependency: transitive 154 | description: 155 | name: path_provider_platform_interface 156 | url: "https://pub.flutter-io.cn" 157 | source: hosted 158 | version: "1.0.2" 159 | petitparser: 160 | dependency: transitive 161 | description: 162 | name: petitparser 163 | url: "https://pub.flutter-io.cn" 164 | source: hosted 165 | version: "2.4.0" 166 | platform: 167 | dependency: transitive 168 | description: 169 | name: platform 170 | url: "https://pub.flutter-io.cn" 171 | source: hosted 172 | version: "2.2.1" 173 | plugin_platform_interface: 174 | dependency: transitive 175 | description: 176 | name: plugin_platform_interface 177 | url: "https://pub.flutter-io.cn" 178 | source: hosted 179 | version: "1.0.2" 180 | process: 181 | dependency: transitive 182 | description: 183 | name: process 184 | url: "https://pub.flutter-io.cn" 185 | source: hosted 186 | version: "3.0.13" 187 | quiver: 188 | dependency: transitive 189 | description: 190 | name: quiver 191 | url: "https://pub.flutter-io.cn" 192 | source: hosted 193 | version: "2.1.3" 194 | shared_preferences: 195 | dependency: "direct main" 196 | description: 197 | name: shared_preferences 198 | url: "https://pub.flutter-io.cn" 199 | source: hosted 200 | version: "0.5.8" 201 | shared_preferences_linux: 202 | dependency: transitive 203 | description: 204 | name: shared_preferences_linux 205 | url: "https://pub.flutter-io.cn" 206 | source: hosted 207 | version: "0.0.2+1" 208 | shared_preferences_macos: 209 | dependency: transitive 210 | description: 211 | name: shared_preferences_macos 212 | url: "https://pub.flutter-io.cn" 213 | source: hosted 214 | version: "0.0.1+10" 215 | shared_preferences_platform_interface: 216 | dependency: transitive 217 | description: 218 | name: shared_preferences_platform_interface 219 | url: "https://pub.flutter-io.cn" 220 | source: hosted 221 | version: "1.0.4" 222 | shared_preferences_web: 223 | dependency: transitive 224 | description: 225 | name: shared_preferences_web 226 | url: "https://pub.flutter-io.cn" 227 | source: hosted 228 | version: "0.1.2+7" 229 | sky_engine: 230 | dependency: transitive 231 | description: flutter 232 | source: sdk 233 | version: "0.0.99" 234 | source_span: 235 | dependency: transitive 236 | description: 237 | name: source_span 238 | url: "https://pub.flutter-io.cn" 239 | source: hosted 240 | version: "1.7.0" 241 | stack_trace: 242 | dependency: transitive 243 | description: 244 | name: stack_trace 245 | url: "https://pub.flutter-io.cn" 246 | source: hosted 247 | version: "1.9.3" 248 | stream_channel: 249 | dependency: transitive 250 | description: 251 | name: stream_channel 252 | url: "https://pub.flutter-io.cn" 253 | source: hosted 254 | version: "2.0.0" 255 | string_scanner: 256 | dependency: transitive 257 | description: 258 | name: string_scanner 259 | url: "https://pub.flutter-io.cn" 260 | source: hosted 261 | version: "1.0.5" 262 | term_glyph: 263 | dependency: transitive 264 | description: 265 | name: term_glyph 266 | url: "https://pub.flutter-io.cn" 267 | source: hosted 268 | version: "1.1.0" 269 | test_api: 270 | dependency: transitive 271 | description: 272 | name: test_api 273 | url: "https://pub.flutter-io.cn" 274 | source: hosted 275 | version: "0.2.15" 276 | typed_data: 277 | dependency: transitive 278 | description: 279 | name: typed_data 280 | url: "https://pub.flutter-io.cn" 281 | source: hosted 282 | version: "1.1.6" 283 | vector_math: 284 | dependency: transitive 285 | description: 286 | name: vector_math 287 | url: "https://pub.flutter-io.cn" 288 | source: hosted 289 | version: "2.0.8" 290 | webview_flutter: 291 | dependency: "direct main" 292 | description: 293 | name: webview_flutter 294 | url: "https://pub.flutter-io.cn" 295 | source: hosted 296 | version: "0.3.22+1" 297 | xdg_directories: 298 | dependency: transitive 299 | description: 300 | name: xdg_directories 301 | url: "https://pub.flutter-io.cn" 302 | source: hosted 303 | version: "0.1.0" 304 | xml: 305 | dependency: transitive 306 | description: 307 | name: xml 308 | url: "https://pub.flutter-io.cn" 309 | source: hosted 310 | version: "3.6.1" 311 | sdks: 312 | dart: ">=2.7.0 <3.0.0" 313 | flutter: ">=1.12.13+hotfix.5 <2.0.0" 314 | --------------------------------------------------------------------------------