├── ios ├── Runner │ ├── Runner-Bridging-Header.h │ ├── File.swift │ ├── Assets.xcassets │ │ ├── LaunchImage.imageset │ │ │ ├── LaunchImage.png │ │ │ ├── LaunchImage@2x.png │ │ │ ├── LaunchImage@3x.png │ │ │ ├── README.md │ │ │ └── Contents.json │ │ └── AppIcon.appiconset │ │ │ ├── AppIcon60x60@2x.png │ │ │ ├── Icon-App-20x20@1x.png │ │ │ ├── Icon-App-20x20@2x.png │ │ │ ├── Icon-App-20x20@3x.png │ │ │ ├── Icon-App-29x29@1x.png │ │ │ ├── Icon-App-29x29@2x.png │ │ │ ├── Icon-App-29x29@3x.png │ │ │ ├── Icon-App-40x40@1x.png │ │ │ ├── Icon-App-40x40@2x.png │ │ │ ├── Icon-App-40x40@3x.png │ │ │ ├── Icon-App-60x60@3x.png │ │ │ ├── Icon-App-76x76@1x.png │ │ │ ├── Icon-App-76x76@2x.png │ │ │ ├── Icon-App-1024x1024@1x.png │ │ │ └── Icon-App-83.5x83.5@2x.png │ └── AppDelegate.swift ├── Flutter │ ├── Debug.xcconfig │ ├── Release.xcconfig │ └── AppFrameworkInfo.plist ├── Runner.xcodeproj │ └── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist ├── Runner.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── WorkspaceSettings.xcsettings │ │ └── IDEWorkspaceChecks.plist └── .gitignore ├── lib ├── utils │ ├── debug_util.dart │ ├── animation.dart │ ├── encrypt_util.dart │ └── colorUtils.dart ├── sections │ ├── village │ │ ├── page │ │ │ ├── cell │ │ │ │ └── component.dart │ │ │ ├── flow_adapter │ │ │ │ ├── cell_connec.dart │ │ │ │ └── adapter.dart │ │ │ ├── child │ │ │ │ └── page.dart │ │ │ ├── page.dart │ │ │ └── state.dart │ │ └── models │ │ │ └── category.dart │ ├── Leaderboard │ │ ├── models │ │ │ └── toplist.dart │ │ └── page │ │ │ ├── official │ │ │ └── component.dart │ │ │ ├── recommend │ │ │ └── component.dart │ │ │ ├── flow_adapter │ │ │ └── cell_connector.dart │ │ │ └── page.dart │ ├── home │ │ └── page │ │ │ ├── toplist │ │ │ └── component.dart │ │ │ ├── hot_podcast │ │ │ ├── view.dart │ │ │ └── component.dart │ │ │ ├── banner │ │ │ └── component.dart │ │ │ ├── yuncun │ │ │ └── component.dart │ │ │ ├── broadcast │ │ │ └── component.dart │ │ │ ├── custom │ │ │ └── component.dart │ │ │ ├── album │ │ │ ├── component.dart │ │ │ └── view.dart │ │ │ ├── calendar │ │ │ └── component.dart │ │ │ ├── recommend │ │ │ └── component.dart │ │ │ ├── drawer │ │ │ ├── reducer.dart │ │ │ ├── action.dart │ │ │ └── page.dart │ │ │ ├── flow_adapter │ │ │ └── cell_connector.dart │ │ │ └── page.dart │ ├── my │ │ └── page │ │ │ ├── action.dart │ │ │ ├── view.dart │ │ │ ├── state.dart │ │ │ ├── effect.dart │ │ │ ├── reducer.dart │ │ │ └── page.dart │ ├── search │ │ ├── page │ │ │ ├── detail │ │ │ │ ├── total │ │ │ │ │ ├── user │ │ │ │ │ │ ├── action.dart │ │ │ │ │ │ ├── effect.dart │ │ │ │ │ │ ├── reducer.dart │ │ │ │ │ │ ├── state.dart │ │ │ │ │ │ └── component.dart │ │ │ │ │ ├── album │ │ │ │ │ │ ├── action.dart │ │ │ │ │ │ ├── effect.dart │ │ │ │ │ │ ├── reducer.dart │ │ │ │ │ │ ├── state.dart │ │ │ │ │ │ └── component.dart │ │ │ │ │ ├── artist │ │ │ │ │ │ ├── action.dart │ │ │ │ │ │ ├── effect.dart │ │ │ │ │ │ ├── state.dart │ │ │ │ │ │ ├── reducer.dart │ │ │ │ │ │ └── component.dart │ │ │ │ │ ├── singer │ │ │ │ │ │ ├── action.dart │ │ │ │ │ │ ├── effect.dart │ │ │ │ │ │ ├── reducer.dart │ │ │ │ │ │ ├── view.dart │ │ │ │ │ │ ├── state.dart │ │ │ │ │ │ └── component.dart │ │ │ │ │ ├── sim │ │ │ │ │ │ ├── action.dart │ │ │ │ │ │ ├── effect.dart │ │ │ │ │ │ ├── state.dart │ │ │ │ │ │ ├── reducer.dart │ │ │ │ │ │ └── component.dart │ │ │ │ │ ├── playlist │ │ │ │ │ │ ├── action.dart │ │ │ │ │ │ ├── effect.dart │ │ │ │ │ │ ├── reducer.dart │ │ │ │ │ │ ├── state.dart │ │ │ │ │ │ └── component.dart │ │ │ │ │ └── action.dart │ │ │ │ ├── reducer.dart │ │ │ │ ├── action.dart │ │ │ │ ├── effect.dart │ │ │ │ ├── page.dart │ │ │ │ ├── simple │ │ │ │ │ ├── page.dart │ │ │ │ │ └── action.dart │ │ │ │ └── state.dart │ │ │ ├── search │ │ │ │ ├── topic │ │ │ │ │ ├── action.dart │ │ │ │ │ ├── effect.dart │ │ │ │ │ ├── state.dart │ │ │ │ │ ├── reducer.dart │ │ │ │ │ └── component.dart │ │ │ │ ├── hot │ │ │ │ │ ├── action.dart │ │ │ │ │ ├── state.dart │ │ │ │ │ ├── reducer.dart │ │ │ │ │ ├── component.dart │ │ │ │ │ └── effect.dart │ │ │ │ ├── recommend │ │ │ │ │ ├── reducer.dart │ │ │ │ │ ├── state.dart │ │ │ │ │ ├── component.dart │ │ │ │ │ ├── action.dart │ │ │ │ │ └── effect.dart │ │ │ │ └── history │ │ │ │ │ ├── state.dart │ │ │ │ │ ├── component.dart │ │ │ │ │ ├── reducer.dart │ │ │ │ │ └── action.dart │ │ │ └── singer_category │ │ │ │ └── page.dart │ │ └── models │ │ │ ├── singer_category.dart │ │ │ ├── search_hot_topic.dart │ │ │ ├── search_hot.dart │ │ │ ├── singer_category.g.dart │ │ │ └── search_default.dart │ ├── square │ │ ├── page │ │ │ ├── child │ │ │ │ ├── item │ │ │ │ │ ├── view.dart │ │ │ │ │ └── component.dart │ │ │ │ ├── flow_adpter │ │ │ │ │ └── item_connector.dart │ │ │ │ └── page.dart │ │ │ ├── recommend │ │ │ │ ├── row_component │ │ │ │ │ └── component.dart │ │ │ │ ├── action.dart │ │ │ │ ├── flow_adpater │ │ │ │ │ ├── row_connector.dart │ │ │ │ │ └── adapter.dart │ │ │ │ ├── page.dart │ │ │ │ ├── view.dart │ │ │ │ └── effect.dart │ │ │ ├── action.dart │ │ │ ├── edit │ │ │ │ ├── page.dart │ │ │ │ └── state.dart │ │ │ ├── page.dart │ │ │ └── state.dart │ │ └── models │ │ │ └── tag.dart │ ├── podcast │ │ ├── page │ │ │ ├── podcast │ │ │ │ ├── row_component │ │ │ │ │ └── component.dart │ │ │ │ ├── grid_component │ │ │ │ │ └── component.dart │ │ │ │ ├── banner_component │ │ │ │ │ └── component.dart │ │ │ │ ├── personal_component │ │ │ │ │ └── component.dart │ │ │ │ ├── flow_adapter │ │ │ │ │ ├── cell_connector.dart │ │ │ │ │ ├── banner_connector.dart │ │ │ │ │ └── personal_connector.dart │ │ │ │ └── page.dart │ │ │ ├── catelist │ │ │ │ ├── action.dart │ │ │ │ ├── page.dart │ │ │ │ └── child │ │ │ │ │ ├── page.dart │ │ │ │ │ └── action.dart │ │ │ └── detail │ │ │ │ └── page.dart │ │ └── models │ │ │ └── banner.dart │ ├── login │ │ └── page │ │ │ ├── login │ │ │ ├── reducer.dart │ │ │ ├── action.dart │ │ │ ├── state.dart │ │ │ ├── page.dart │ │ │ └── effect.dart │ │ │ └── photo_login │ │ │ ├── page.dart │ │ │ ├── state.dart │ │ │ ├── reducer.dart │ │ │ └── action.dart │ ├── video │ │ ├── models │ │ │ ├── detail.dart │ │ │ ├── url.dart │ │ │ ├── detail.g.dart │ │ │ └── info.dart │ │ └── page │ │ │ └── page.dart │ ├── webview │ │ └── page │ │ │ ├── state.dart │ │ │ ├── page.dart │ │ │ ├── effect.dart │ │ │ └── action.dart │ ├── music │ │ ├── page │ │ │ ├── recommend_list │ │ │ │ ├── action.dart │ │ │ │ ├── state.dart │ │ │ │ ├── page.dart │ │ │ │ └── reducer.dart │ │ │ ├── song │ │ │ │ ├── page.dart │ │ │ │ └── action.dart │ │ │ └── playlist_detail │ │ │ │ ├── page.dart │ │ │ │ └── action.dart │ │ └── models │ │ │ └── song.dart │ ├── follow │ │ └── page │ │ │ ├── action.dart │ │ │ └── page.dart │ └── application │ │ └── page │ │ └── page.dart ├── models │ ├── common_model.dart │ └── simple_model.dart ├── constants │ └── key.dart ├── main.dart ├── generated_plugin_registrant.dart ├── repository │ └── database │ │ ├── database_initer.dart │ │ └── database_keys.dart └── widgets │ ├── webview.dart │ ├── clipper │ └── bottom_clipper.dart │ ├── child │ ├── nav_add.dart │ └── praised_widget.dart │ └── sliver │ └── sliver_header.dart ├── web ├── favicon.png └── icons │ ├── Icon-192.png │ ├── Icon-512.png │ ├── Icon-maskable-192.png │ └── Icon-maskable-512.png ├── assets ├── fonts │ └── iconfont.ttf ├── images │ ├── welcome.png │ ├── icon_logo.png │ ├── cm2_icn_daren~iphone.png │ ├── cm2_icn_enter~iphone.png │ ├── cm7_recommond~iphone.png │ ├── cm_btn_filter~iphone.png │ ├── ad_icn_download~iphone.png │ ├── cm2_edit_QRcode~iphone.png │ ├── cm2_lay_icn_type~iphone.png │ ├── cm2_logo_mobile~iphone.png │ ├── cm6_list_tag_mv~iphone.png │ ├── cm6_set_icn_beat~iphone.png │ ├── cm6_set_icn_set~iphone.png │ ├── cm6_set_icn_time~iphone.png │ ├── cm8_nav_icn_scan~iphone.png │ ├── cm8_setting_kefu~iphone.png │ ├── 2.0x │ │ ├── cm2_icn_daren~iphone.png │ │ ├── cm2_icn_enter~iphone.png │ │ ├── cm7_recommond~iphone.png │ │ ├── cm_btn_filter~iphone.png │ │ ├── ad_icn_download~iphone.png │ │ ├── cm2_edit_QRcode~iphone.png │ │ ├── cm2_lay_icn_type~iphone.png │ │ ├── cm2_logo_mobile~iphone.png │ │ ├── cm6_list_tag_mv~iphone.png │ │ ├── cm6_set_icn_beat~iphone.png │ │ ├── cm6_set_icn_set~iphone.png │ │ ├── cm6_set_icn_time~iphone.png │ │ ├── cm8_nav_icn_scan~iphone.png │ │ ├── cm8_setting_kefu~iphone.png │ │ ├── bar_navi_icn_search~iphone.png │ │ ├── cm2_act_icn_praise~iphone.png │ │ ├── cm4_btm_icn_music~iphone.png │ │ ├── cm6_login_logo_qq~iphone.png │ │ ├── cm6_play_icn_loved~iphone.png │ │ ├── cm6_set_icn_about~iphone.png │ │ ├── cm6_set_icn_combo~iphone.png │ │ ├── cm6_set_icn_coupon~iphone.png │ │ ├── cm6_set_icn_night~iphone.png │ │ ├── cm6_set_icn_order~iphone.png │ │ ├── cm6_set_icn_share~iphone.png │ │ ├── cm6_set_icn_store~iphone.png │ │ ├── cm7_more_icon_fav~iphone.png │ │ ├── cm8_btm_icn_event~iphone.png │ │ ├── cm8_btm_icn_friend~iphone.png │ │ ├── cm8_btm_icn_music~iphone.png │ │ ├── cm8_btm_icn_voice~iphone.png │ │ ├── cm8_home_toplist_bg~iphone.png │ │ ├── cm8_profile_arrow~iphone.png │ │ ├── cm8_setting_message~iphone.png │ │ ├── cm8_video_icn_fire~iphone.png │ │ ├── att_pupup_kol_pic_bg~iphone.png │ │ ├── cm2_list_icn_loading1~iphone.png │ │ ├── cm2_list_icn_loading2~iphone.png │ │ ├── cm2_list_icn_loading3~iphone.png │ │ ├── cm2_list_icn_loading4~iphone.png │ │ ├── cm2_list_search_time~iphone.png │ │ ├── cm4_edit_customemoji~iphone.png │ │ ├── cm6_list_sup_hot_big~iphone.png │ │ ├── cm6_login_logo_apple~iphone.png │ │ ├── cm6_login_logo_wechat~iphone.png │ │ ├── cm6_login_logo_weibo~iphone.png │ │ ├── cm6_play_needle_play~iphone.png │ │ ├── cm6_playlist_icn_loop~iphone.png │ │ ├── cm6_playlist_icn_one~iphone.png │ │ ├── cm6_search_arrow_down~iphone.png │ │ ├── cm6_set_icn_alamclock~iphone.png │ │ ├── cm6_set_icn_ring_tone~iphone.png │ │ ├── cm6_square_feed_audio~iphone.png │ │ ├── cm6_square_feed_video~iphone.png │ │ ├── cm6_video_icn_praise~iphone.png │ │ ├── cm7_more_icon_inform~iphone.png │ │ ├── cm7_more_icon_reward~iphone.png │ │ ├── cm7_more_icon_yunbei~iphone.png │ │ ├── cm7_share_card_needle~iphone.png │ │ ├── cm8_btm_icn_discovery~iphone.png │ │ ├── cm8_nav_icn_searchmic~iphone.png │ │ ├── cm8_playlist_download~iphone.png │ │ ├── cm8_refresh_new_items~iphone.png │ │ ├── cm2_lay_icn_artist_new~iphone.png │ │ ├── cm2_lay_icn_similar_new~iphone.png │ │ ├── cm4_applewatch_add_btn~iphone.png │ │ ├── cm6_login_logo_netease~iphone.png │ │ ├── cm6_playlist_icn_order~iphone.png │ │ ├── cm6_playlist_icn_shuffle~iphone.png │ │ ├── cm6_set_icn_black_list~iphone.png │ │ ├── cm6_set_icn_ticketcenter~iphone.png │ │ ├── cm6_set_icn_youth_mode~iphone.png │ │ ├── cm8_btn_tabbar_playlist~iphone.png │ │ ├── cm8_event_flow_song_play~iphone.png │ │ ├── cm8_input_biubiubiu_off~iphone.png │ │ ├── cm8_input_biubiubiu_on~iphone.png │ │ ├── cm8_menu_comment_forward~iphone.png │ │ ├── cm8_menu_comment_share~iphone.png │ │ ├── cm8_my_empty_pic_night~iphone.png │ │ ├── cm8_my_music_intelligent~iphone.png │ │ ├── cm8_nav_icn_throughtrain~iphone.png │ │ ├── cm8_setting_skinSquare~iphone.png │ │ ├── cm8_voicelist_icon_check~iphone.png │ │ ├── cm2_default_cover_program~iphone.png │ │ ├── cm4_discover_play_cnt_icn~iphone.png │ │ ├── cm6_search_history_delete~iphone.png │ │ ├── cm6_set_icn_siri_shortcuts~iphone.png │ │ ├── cm8_event_flow_song_pause~iphone.png │ │ ├── cm8_mlog_playlist_comment~iphone.png │ │ ├── cm8_my_music_more_playlist~iphone.png │ │ ├── cm8_nav_icn_setting_normal~iphone.png │ │ ├── nml_varietyshow_admin_boy~iphone.png │ │ ├── nml_varietyshow_admin_girl~iphone.png │ │ ├── cm6_playlist_icn_intelligent~iphone.png │ │ ├── cm6_square_publish_scalelarge~iphone.png │ │ ├── cm6_square_publish_scalesmall~iphone.png │ │ ├── cm7_set_icn_music_redpacket~iphone.png │ │ ├── cm8_home_toplist_bottom_bg~iphone@2x.png │ │ ├── cm8_my_music_default_avatar~iphone.png │ │ ├── cm6_set_icn_whale_cloud_effect~iphone.png │ │ ├── cm8_artistPage_add_playlist~iphone@2x.png │ │ ├── cm8_setting_downloadAfterCache~iphone.png │ │ ├── cm7_playlist_registered_trademark~iphone.png │ │ ├── cm8_home_playlist_flow_cover_mask~iphone.png │ │ ├── cm8_privateMsg_cloud_success_icon~iphone.png │ │ ├── cm8_profile_head_arrow_down_larger~iphone.png │ │ ├── cm8_voicelist_bold_icon_sort_desc~iphone.png │ │ ├── cm8_mlog_playlist_collection_normal~iphone.png │ │ ├── cm8_privateMsg_cloud_to_download_icon~iphone.png │ │ └── ic_play_share_listen_together_blackcover~iphone.png │ ├── bar_navi_icn_search~iphone.png │ ├── cm2_act_icn_praise~iphone.png │ ├── cm4_btm_icn_music~iphone.png │ ├── cm6_login_logo_qq~iphone.png │ ├── cm6_play_icn_loved~iphone.png │ ├── cm6_set_icn_about~iphone.png │ ├── cm6_set_icn_combo~iphone.png │ ├── cm6_set_icn_coupon~iphone.png │ ├── cm6_set_icn_night~iphone.png │ ├── cm6_set_icn_order~iphone.png │ ├── cm6_set_icn_share~iphone.png │ ├── cm6_set_icn_store~iphone.png │ ├── cm7_more_icon_fav~iphone.png │ ├── cm8_btm_icn_event~iphone.png │ ├── cm8_btm_icn_friend~iphone.png │ ├── cm8_btm_icn_music~iphone.png │ ├── cm8_btm_icn_voice~iphone.png │ ├── cm8_home_toplist_bg~iphone.png │ ├── cm8_profile_arrow~iphone.png │ ├── cm8_setting_message~iphone.png │ ├── cm8_video_icn_fire~iphone.png │ ├── att_pupup_kol_pic_bg~iphone.png │ ├── cm2_list_icn_loading1~iphone.png │ ├── cm2_list_icn_loading2~iphone.png │ ├── cm2_list_icn_loading3~iphone.png │ ├── cm2_list_icn_loading4~iphone.png │ ├── cm2_list_search_time~iphone.png │ ├── cm4_edit_customemoji~iphone.png │ ├── cm6_list_sup_hot_big~iphone.png │ ├── cm6_login_logo_apple~iphone.png │ ├── cm6_login_logo_wechat~iphone.png │ ├── cm6_login_logo_weibo~iphone.png │ ├── cm6_play_needle_play~iphone.png │ ├── cm6_playlist_icn_loop~iphone.png │ ├── cm6_playlist_icn_one~iphone.png │ ├── cm6_search_arrow_down~iphone.png │ ├── cm6_set_icn_alamclock~iphone.png │ ├── cm6_set_icn_ring_tone~iphone.png │ ├── cm6_square_feed_audio~iphone.png │ ├── cm6_square_feed_video~iphone.png │ ├── cm6_video_icn_praise~iphone.png │ ├── cm7_more_icon_inform~iphone.png │ ├── cm7_more_icon_reward~iphone.png │ ├── cm7_more_icon_yunbei~iphone.png │ ├── cm7_share_card_needle~iphone.png │ ├── cm8_btm_icn_discovery~iphone.png │ ├── cm8_nav_icn_searchmic~iphone.png │ ├── cm8_playlist_download~iphone.png │ ├── cm8_refresh_new_items~iphone.png │ ├── cm2_lay_icn_artist_new~iphone.png │ ├── cm2_lay_icn_similar_new~iphone.png │ ├── cm4_applewatch_add_btn~iphone.png │ ├── cm6_login_logo_netease~iphone.png │ ├── cm6_playlist_icn_order~iphone.png │ ├── cm6_playlist_icn_shuffle~iphone.png │ ├── cm6_set_icn_black_list~iphone.png │ ├── cm6_set_icn_ticketcenter~iphone.png │ ├── cm6_set_icn_youth_mode~iphone.png │ ├── cm8_btn_tabbar_playlist~iphone.png │ ├── cm8_event_flow_song_play~iphone.png │ ├── cm8_input_biubiubiu_off~iphone.png │ ├── cm8_input_biubiubiu_on~iphone.png │ ├── cm8_menu_comment_forward~iphone.png │ ├── cm8_menu_comment_share~iphone.png │ ├── cm8_my_empty_pic_night~iphone.png │ ├── cm8_my_music_intelligent~iphone.png │ ├── cm8_nav_icn_throughtrain~iphone.png │ ├── cm8_setting_skinSquare~iphone.png │ ├── cm8_voicelist_icon_check~iphone.png │ ├── cm2_default_cover_program~iphone.png │ ├── cm4_discover_play_cnt_icn~iphone.png │ ├── cm6_search_history_delete~iphone.png │ ├── cm6_set_icn_siri_shortcuts~iphone.png │ ├── cm8_event_flow_song_pause~iphone.png │ ├── cm8_home_toplist_bottom_bg~iphone.png │ ├── cm8_mlog_playlist_comment~iphone.png │ ├── cm8_my_music_more_playlist~iphone.png │ ├── cm8_nav_icn_setting_normal~iphone.png │ ├── nml_varietyshow_admin_boy~iphone.png │ ├── nml_varietyshow_admin_girl~iphone.png │ ├── cm6_playlist_icn_intelligent~iphone.png │ ├── cm6_square_publish_scalelarge~iphone.png │ ├── cm6_square_publish_scalesmall~iphone.png │ ├── cm7_set_icn_music_redpacket~iphone.png │ ├── cm8_my_music_default_avatar~iphone.png │ ├── cm6_set_icn_whale_cloud_effect~iphone.png │ ├── cm8_setting_downloadAfterCache~iphone.png │ ├── cm7_playlist_registered_trademark~iphone.png │ ├── cm8_home_playlist_flow_cover_mask~iphone.png │ ├── cm8_privateMsg_cloud_success_icon~iphone.png │ ├── cm8_profile_head_arrow_down_larger~iphone.png │ ├── cm8_voicelist_bold_icon_sort_desc~iphone.png │ ├── cm8_mlog_playlist_collection_normal~iphone.png │ ├── cm8_privateMsg_cloud_to_download_icon~iphone.png │ └── ic_play_share_listen_together_blackcover~iphone.png └── json │ ├── video_detail_info.json │ ├── search_recommend.json │ ├── search_default.json │ ├── dj_banner.json │ ├── song_url.json │ ├── video_url.json │ └── search_multimatch.json ├── android ├── gradle.properties ├── 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 │ │ │ ├── drawable │ │ │ │ └── launch_background.xml │ │ │ └── drawable-v21 │ │ │ │ └── launch_background.xml │ │ └── kotlin │ │ │ └── com │ │ │ └── example │ │ │ └── flutter_music │ │ │ └── MainActivity.kt │ │ ├── debug │ │ └── AndroidManifest.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties ├── .gitignore ├── settings.gradle └── build.gradle ├── sh ├── json.sh └── font.sh ├── .metadata └── .gitignore /ios/Runner/Runner-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | #import "GeneratedPluginRegistrant.h" 2 | -------------------------------------------------------------------------------- /lib/utils/debug_util.dart: -------------------------------------------------------------------------------- 1 | class DebugUtils { 2 | static final bool debug = true; 3 | } 4 | -------------------------------------------------------------------------------- /web/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/web/favicon.png -------------------------------------------------------------------------------- /web/icons/Icon-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/web/icons/Icon-192.png -------------------------------------------------------------------------------- /web/icons/Icon-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/web/icons/Icon-512.png -------------------------------------------------------------------------------- /assets/fonts/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/fonts/iconfont.ttf -------------------------------------------------------------------------------- /assets/images/welcome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/welcome.png -------------------------------------------------------------------------------- /assets/images/icon_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/icon_logo.png -------------------------------------------------------------------------------- /assets/json/video_detail_info.json: -------------------------------------------------------------------------------- 1 | {"likedCount":1715,"shareCount":626,"commentCount":146,"liked":false,"code":200} -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /web/icons/Icon-maskable-192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/web/icons/Icon-maskable-192.png -------------------------------------------------------------------------------- /web/icons/Icon-maskable-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/web/icons/Icon-maskable-512.png -------------------------------------------------------------------------------- /assets/images/cm2_icn_daren~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_icn_daren~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_icn_enter~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_icn_enter~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_recommond~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_recommond~iphone.png -------------------------------------------------------------------------------- /assets/images/cm_btn_filter~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm_btn_filter~iphone.png -------------------------------------------------------------------------------- /assets/images/ad_icn_download~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/ad_icn_download~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_edit_QRcode~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_edit_QRcode~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_lay_icn_type~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_lay_icn_type~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_logo_mobile~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_logo_mobile~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_list_tag_mv~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_list_tag_mv~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_beat~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_beat~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_set~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_set~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_time~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_time~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_nav_icn_scan~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_nav_icn_scan~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_setting_kefu~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_setting_kefu~iphone.png -------------------------------------------------------------------------------- /ios/Flutter/Debug.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /ios/Runner/File.swift: -------------------------------------------------------------------------------- 1 | // 2 | // File.swift 3 | // Runner 4 | // 5 | // Created by 牛新怀 on 2022/8/23. 6 | // 7 | 8 | import Foundation 9 | -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_icn_daren~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_icn_daren~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_icn_enter~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_icn_enter~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_recommond~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_recommond~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm_btn_filter~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm_btn_filter~iphone.png -------------------------------------------------------------------------------- /assets/images/bar_navi_icn_search~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/bar_navi_icn_search~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_act_icn_praise~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_act_icn_praise~iphone.png -------------------------------------------------------------------------------- /assets/images/cm4_btm_icn_music~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm4_btm_icn_music~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_login_logo_qq~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_login_logo_qq~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_play_icn_loved~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_play_icn_loved~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_about~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_about~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_combo~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_combo~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_coupon~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_coupon~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_night~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_night~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_order~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_order~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_share~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_share~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_store~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_store~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_more_icon_fav~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_more_icon_fav~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_btm_icn_event~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_btm_icn_event~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_btm_icn_friend~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_btm_icn_friend~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_btm_icn_music~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_btm_icn_music~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_btm_icn_voice~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_btm_icn_voice~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_home_toplist_bg~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_home_toplist_bg~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_profile_arrow~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_profile_arrow~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_setting_message~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_setting_message~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_video_icn_fire~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_video_icn_fire~iphone.png -------------------------------------------------------------------------------- /ios/Flutter/Release.xcconfig: -------------------------------------------------------------------------------- 1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" 2 | #include "Generated.xcconfig" 3 | -------------------------------------------------------------------------------- /assets/images/2.0x/ad_icn_download~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/ad_icn_download~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_edit_QRcode~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_edit_QRcode~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_lay_icn_type~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_lay_icn_type~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_logo_mobile~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_logo_mobile~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_list_tag_mv~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_list_tag_mv~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_beat~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_beat~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_set~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_set~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_time~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_time~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_nav_icn_scan~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_nav_icn_scan~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_setting_kefu~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_setting_kefu~iphone.png -------------------------------------------------------------------------------- /assets/images/att_pupup_kol_pic_bg~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/att_pupup_kol_pic_bg~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_list_icn_loading1~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_list_icn_loading1~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_list_icn_loading2~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_list_icn_loading2~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_list_icn_loading3~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_list_icn_loading3~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_list_icn_loading4~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_list_icn_loading4~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_list_search_time~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_list_search_time~iphone.png -------------------------------------------------------------------------------- /assets/images/cm4_edit_customemoji~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm4_edit_customemoji~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_list_sup_hot_big~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_list_sup_hot_big~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_login_logo_apple~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_login_logo_apple~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_login_logo_wechat~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_login_logo_wechat~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_login_logo_weibo~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_login_logo_weibo~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_play_needle_play~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_play_needle_play~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_playlist_icn_loop~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_playlist_icn_loop~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_playlist_icn_one~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_playlist_icn_one~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_search_arrow_down~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_search_arrow_down~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_alamclock~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_alamclock~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_ring_tone~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_ring_tone~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_square_feed_audio~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_square_feed_audio~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_square_feed_video~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_square_feed_video~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_video_icn_praise~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_video_icn_praise~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_more_icon_inform~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_more_icon_inform~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_more_icon_reward~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_more_icon_reward~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_more_icon_yunbei~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_more_icon_yunbei~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_share_card_needle~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_share_card_needle~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_btm_icn_discovery~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_btm_icn_discovery~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_nav_icn_searchmic~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_nav_icn_searchmic~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_playlist_download~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_playlist_download~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_refresh_new_items~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_refresh_new_items~iphone.png -------------------------------------------------------------------------------- /sh/json.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | flutter packages pub run build_runner build --define "json_serializable=any_map=true" --delete-conflicting-outputs 3 | -------------------------------------------------------------------------------- /assets/images/2.0x/bar_navi_icn_search~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/bar_navi_icn_search~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_act_icn_praise~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_act_icn_praise~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm4_btm_icn_music~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm4_btm_icn_music~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_login_logo_qq~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_login_logo_qq~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_play_icn_loved~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_play_icn_loved~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_about~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_about~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_combo~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_combo~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_coupon~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_coupon~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_night~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_night~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_order~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_order~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_share~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_share~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_store~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_store~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_more_icon_fav~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_more_icon_fav~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_btm_icn_event~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_btm_icn_event~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_btm_icn_friend~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_btm_icn_friend~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_btm_icn_music~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_btm_icn_music~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_btm_icn_voice~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_btm_icn_voice~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_home_toplist_bg~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_home_toplist_bg~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_profile_arrow~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_profile_arrow~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_setting_message~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_setting_message~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_video_icn_fire~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_video_icn_fire~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_lay_icn_artist_new~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_lay_icn_artist_new~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_lay_icn_similar_new~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_lay_icn_similar_new~iphone.png -------------------------------------------------------------------------------- /assets/images/cm4_applewatch_add_btn~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm4_applewatch_add_btn~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_login_logo_netease~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_login_logo_netease~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_playlist_icn_order~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_playlist_icn_order~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_playlist_icn_shuffle~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_playlist_icn_shuffle~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_black_list~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_black_list~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_ticketcenter~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_ticketcenter~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_youth_mode~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_youth_mode~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_btn_tabbar_playlist~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_btn_tabbar_playlist~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_event_flow_song_play~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_event_flow_song_play~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_input_biubiubiu_off~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_input_biubiubiu_off~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_input_biubiubiu_on~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_input_biubiubiu_on~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_menu_comment_forward~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_menu_comment_forward~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_menu_comment_share~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_menu_comment_share~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_my_empty_pic_night~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_my_empty_pic_night~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_my_music_intelligent~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_my_music_intelligent~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_nav_icn_throughtrain~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_nav_icn_throughtrain~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_setting_skinSquare~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_setting_skinSquare~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_voicelist_icon_check~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_voicelist_icon_check~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/att_pupup_kol_pic_bg~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/att_pupup_kol_pic_bg~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_list_icn_loading1~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_list_icn_loading1~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_list_icn_loading2~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_list_icn_loading2~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_list_icn_loading3~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_list_icn_loading3~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_list_icn_loading4~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_list_icn_loading4~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_list_search_time~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_list_search_time~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm4_edit_customemoji~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm4_edit_customemoji~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_list_sup_hot_big~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_list_sup_hot_big~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_login_logo_apple~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_login_logo_apple~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_login_logo_wechat~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_login_logo_wechat~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_login_logo_weibo~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_login_logo_weibo~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_play_needle_play~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_play_needle_play~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_playlist_icn_loop~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_playlist_icn_loop~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_playlist_icn_one~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_playlist_icn_one~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_search_arrow_down~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_search_arrow_down~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_alamclock~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_alamclock~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_ring_tone~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_ring_tone~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_square_feed_audio~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_square_feed_audio~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_square_feed_video~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_square_feed_video~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_video_icn_praise~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_video_icn_praise~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_more_icon_inform~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_more_icon_inform~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_more_icon_reward~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_more_icon_reward~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_more_icon_yunbei~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_more_icon_yunbei~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_share_card_needle~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_share_card_needle~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_btm_icn_discovery~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_btm_icn_discovery~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_nav_icn_searchmic~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_nav_icn_searchmic~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_playlist_download~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_playlist_download~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_refresh_new_items~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_refresh_new_items~iphone.png -------------------------------------------------------------------------------- /assets/images/cm2_default_cover_program~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm2_default_cover_program~iphone.png -------------------------------------------------------------------------------- /assets/images/cm4_discover_play_cnt_icn~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm4_discover_play_cnt_icn~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_search_history_delete~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_search_history_delete~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_siri_shortcuts~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_siri_shortcuts~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_event_flow_song_pause~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_event_flow_song_pause~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_home_toplist_bottom_bg~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_home_toplist_bottom_bg~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_mlog_playlist_comment~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_mlog_playlist_comment~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_my_music_more_playlist~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_my_music_more_playlist~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_nav_icn_setting_normal~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_nav_icn_setting_normal~iphone.png -------------------------------------------------------------------------------- /assets/images/nml_varietyshow_admin_boy~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/nml_varietyshow_admin_boy~iphone.png -------------------------------------------------------------------------------- /assets/images/nml_varietyshow_admin_girl~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/nml_varietyshow_admin_girl~iphone.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_lay_icn_artist_new~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_lay_icn_artist_new~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_lay_icn_similar_new~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_lay_icn_similar_new~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm4_applewatch_add_btn~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm4_applewatch_add_btn~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_login_logo_netease~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_login_logo_netease~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_playlist_icn_order~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_playlist_icn_order~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_playlist_icn_shuffle~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_playlist_icn_shuffle~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_black_list~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_black_list~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_ticketcenter~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_ticketcenter~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_youth_mode~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_youth_mode~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_btn_tabbar_playlist~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_btn_tabbar_playlist~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_event_flow_song_play~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_event_flow_song_play~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_input_biubiubiu_off~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_input_biubiubiu_off~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_input_biubiubiu_on~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_input_biubiubiu_on~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_menu_comment_forward~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_menu_comment_forward~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_menu_comment_share~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_menu_comment_share~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_my_empty_pic_night~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_my_empty_pic_night~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_my_music_intelligent~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_my_music_intelligent~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_nav_icn_throughtrain~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_nav_icn_throughtrain~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_setting_skinSquare~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_setting_skinSquare~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_voicelist_icon_check~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_voicelist_icon_check~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_playlist_icn_intelligent~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_playlist_icn_intelligent~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_square_publish_scalelarge~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_square_publish_scalelarge~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_square_publish_scalesmall~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_square_publish_scalesmall~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_set_icn_music_redpacket~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_set_icn_music_redpacket~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_my_music_default_avatar~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_my_music_default_avatar~iphone.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm2_default_cover_program~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm2_default_cover_program~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm4_discover_play_cnt_icn~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm4_discover_play_cnt_icn~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_search_history_delete~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_search_history_delete~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_siri_shortcuts~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_siri_shortcuts~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_event_flow_song_pause~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_event_flow_song_pause~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_mlog_playlist_comment~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_mlog_playlist_comment~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_my_music_more_playlist~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_my_music_more_playlist~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_nav_icn_setting_normal~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_nav_icn_setting_normal~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/nml_varietyshow_admin_boy~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/nml_varietyshow_admin_boy~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/nml_varietyshow_admin_girl~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/nml_varietyshow_admin_girl~iphone.png -------------------------------------------------------------------------------- /assets/images/cm6_set_icn_whale_cloud_effect~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm6_set_icn_whale_cloud_effect~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_setting_downloadAfterCache~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_setting_downloadAfterCache~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_playlist_icn_intelligent~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_playlist_icn_intelligent~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_square_publish_scalelarge~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_square_publish_scalelarge~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_square_publish_scalesmall~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_square_publish_scalesmall~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_set_icn_music_redpacket~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_set_icn_music_redpacket~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_home_toplist_bottom_bg~iphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_home_toplist_bottom_bg~iphone@2x.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_my_music_default_avatar~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_my_music_default_avatar~iphone.png -------------------------------------------------------------------------------- /assets/images/cm7_playlist_registered_trademark~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm7_playlist_registered_trademark~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_home_playlist_flow_cover_mask~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_home_playlist_flow_cover_mask~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_privateMsg_cloud_success_icon~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_privateMsg_cloud_success_icon~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_profile_head_arrow_down_larger~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_profile_head_arrow_down_larger~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_voicelist_bold_icon_sort_desc~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_voicelist_bold_icon_sort_desc~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm6_set_icn_whale_cloud_effect~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm6_set_icn_whale_cloud_effect~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_artistPage_add_playlist~iphone@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_artistPage_add_playlist~iphone@2x.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_setting_downloadAfterCache~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_setting_downloadAfterCache~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_mlog_playlist_collection_normal~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_mlog_playlist_collection_normal~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm7_playlist_registered_trademark~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm7_playlist_registered_trademark~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_home_playlist_flow_cover_mask~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_home_playlist_flow_cover_mask~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_privateMsg_cloud_success_icon~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_privateMsg_cloud_success_icon~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_profile_head_arrow_down_larger~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_profile_head_arrow_down_larger~iphone.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_voicelist_bold_icon_sort_desc~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_voicelist_bold_icon_sort_desc~iphone.png -------------------------------------------------------------------------------- /assets/images/cm8_privateMsg_cloud_to_download_icon~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/cm8_privateMsg_cloud_to_download_icon~iphone.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_mlog_playlist_collection_normal~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_mlog_playlist_collection_normal~iphone.png -------------------------------------------------------------------------------- /assets/images/ic_play_share_listen_together_blackcover~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/ic_play_share_listen_together_blackcover~iphone.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/AppIcon60x60@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png -------------------------------------------------------------------------------- /assets/images/2.0x/cm8_privateMsg_cloud_to_download_icon~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/cm8_privateMsg_cloud_to_download_icon~iphone.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /assets/images/2.0x/ic_play_share_listen_together_blackcover~iphone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/assets/images/2.0x/ic_play_share_listen_together_blackcover~iphone.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png -------------------------------------------------------------------------------- /ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/niuxinhuai/flutter_music/HEAD/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/flutter_music/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.flutter_music 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/sections/village/page/cell/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'view.dart'; 4 | 5 | class CellComponent extends Component { 6 | CellComponent() 7 | : super( 8 | view: buildView, 9 | ); 10 | } 11 | -------------------------------------------------------------------------------- /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-6.7-all.zip 7 | -------------------------------------------------------------------------------- /lib/sections/Leaderboard/models/toplist.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/sections/Leaderboard/models/leaderboard.dart'; 2 | 3 | class ToplistDetailSection { 4 | ToplistDetailSection(); 5 | 6 | String? title; 7 | String? segmentTitle; 8 | List items = []; 9 | } 10 | -------------------------------------------------------------------------------- /lib/sections/home/page/toplist/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class ToplistComponent extends Component { 7 | ToplistComponent() : super(view: buildView); 8 | } 9 | -------------------------------------------------------------------------------- /lib/sections/my/page/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum UserCenterAction { action } 5 | 6 | class UserCenterActionCreator { 7 | static Action onAction() { 8 | return const Action(UserCenterAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/sections/my/page/view.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/material.dart'; 3 | 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Widget buildView(UserCenterState state, Dispatch dispatch, ViewService viewService) { 8 | return Container(); 9 | } 10 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/user/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum UserAction { action } 5 | 6 | class UserActionCreator { 7 | static Action onAction() { 8 | return const Action(UserAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/sections/home/page/hot_podcast/view.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_music/sections/home/models/home.dart'; 4 | 5 | Widget buildView(MusicItem item, Dispatch dispatch, ViewService viewService) { 6 | return Container(); 7 | } 8 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/album/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum AlbumAction { action } 5 | 6 | class AlbumActionCreator { 7 | static Action onAction() { 8 | return const Action(AlbumAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/artist/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum ArtistAction { action } 5 | 6 | class ArtistActionCreator { 7 | static Action onAction() { 8 | return const Action(ArtistAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/singer/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum SingerAction { action } 5 | 6 | class SingerActionCreator { 7 | static Action onAction() { 8 | return const Action(SingerAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/sim/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum SimQueryAction { action } 5 | 6 | class SimQueryActionCreator { 7 | static Action onAction() { 8 | return const Action(SimQueryAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/playlist/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum PlaylistAction { action } 5 | 6 | class PlaylistActionCreator { 7 | static Action onAction() { 8 | return const Action(PlaylistAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/topic/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | //TODO replace with your own action 4 | enum SearchTopicAction { action } 5 | 6 | class SearchTopicActionCreator { 7 | static Action onAction() { 8 | return const Action(SearchTopicAction.action); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreviewsEnabled 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /lib/sections/square/page/child/item/view.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_music/sections/square/models/playlist.dart'; 4 | 5 | Widget buildView( 6 | PlaylistSquareWrap wrap, Dispatch dispatch, ViewService viewService) { 7 | return Container(); 8 | } 9 | -------------------------------------------------------------------------------- /sh/font.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | #1. 将 iconfont.css , iconfont.ttf 拷贝到 grapes_flutter/fonts/目录下 4 | #2. 运行此脚本 5 | if [ ! -d "sh" ];then 6 | cd .. 7 | fi 8 | cd assets/fonts/ && 9 | python3 translate_icon_font_from_css_to_dart.py 10 | # rm iconfont.css 11 | # rm iconfont.ttf 12 | mv iconfont.dart ../../lib/res/iconfont.dart 13 | 14 | -------------------------------------------------------------------------------- /lib/sections/home/page/banner/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class BannerComponent extends Component { 7 | BannerComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/home/page/yuncun/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class YuncunComponent extends Component { 7 | YuncunComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/models/common_model.dart: -------------------------------------------------------------------------------- 1 | import 'package:event_bus/event_bus.dart'; 2 | 3 | EventBus eventBus = EventBus(); 4 | 5 | abstract class CommonModel { 6 | String? message; 7 | int? code; 8 | T? data; 9 | } 10 | 11 | class EventBusFireModule { 12 | EventBusFireModule(); 13 | 14 | //歌单广场数据,返回刷新状态 15 | bool? squareRefresh; 16 | } 17 | -------------------------------------------------------------------------------- /lib/sections/my/page/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | class UserCenterState implements Cloneable { 4 | @override 5 | UserCenterState clone() { 6 | return UserCenterState(); 7 | } 8 | } 9 | 10 | UserCenterState initState(Map? args) { 11 | return UserCenterState(); 12 | } 13 | -------------------------------------------------------------------------------- /lib/sections/home/page/broadcast/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class BoradcastComponent extends Component { 7 | BoradcastComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/home/page/custom/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class TopicCustomComponent extends Component { 7 | TopicCustomComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /lib/sections/home/page/album/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class SongNewAlbumComponent extends Component { 7 | SongNewAlbumComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/home/page/hot_podcast/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class HotPodcastsComponent extends Component { 7 | HotPodcastsComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/home/page/calendar/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class MusicCalendarComponent extends Component { 7 | MusicCalendarComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/home/page/recommend/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class RecommendSongComponent extends Component { 7 | RecommendSongComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/square/page/child/item/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/playlist.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class ItemComponent extends Component { 7 | ItemComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /.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: 18116933e77adc82f80866c928266a5b4f1ed645 8 | channel: flutter-2.5-candidate.5 9 | 10 | project_type: app 11 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/row_component/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/podcast.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class LifeComponent extends Component { 7 | LifeComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/user/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | UserAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /lib/sections/my/page/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | UserCenterAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/grid_component/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/podcast.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class GridItemComponent extends Component { 7 | GridItemComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/album/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | AlbumAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /lib/sections/Leaderboard/page/official/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/Leaderboard/models/toplist.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class TopOfficialComponent extends Component { 7 | TopOfficialComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/artist/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | ArtistAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/singer/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | SingerAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/sections/Leaderboard/page/recommend/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/Leaderboard/models/toplist.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class TopRecommendComponent extends Component { 7 | TopRecommendComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/sim/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | SimQueryAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/banner_component/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/banner.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class SwiperBannerComponent extends Component { 7 | SwiperBannerComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/playlist/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | PlaylistAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /lib/sections/square/page/recommend/row_component/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/recommend.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class RecommendRowComponent extends Component { 7 | RecommendRowComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | } 12 | -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /lib/sections/search/page/search/topic/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | SearchTopicAction.action: _onAction, 8 | }); 9 | } 10 | 11 | void _onAction(Action action, Context ctx) {} 12 | -------------------------------------------------------------------------------- /lib/sections/village/page/flow_adapter/cell_connec.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/village/page/state.dart'; 3 | 4 | class CellConnector extends ConnOp { 5 | final int index; 6 | CellConnector({this.index = 0}); 7 | 8 | @override 9 | String? get(VillageState? state) { 10 | return ""; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /lib/utils/animation.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class AnimationUtil { 4 | static transition(Animation animation, Widget widget) { 5 | return SlideTransition( 6 | position: new Tween( 7 | begin: const Offset(1, 0), 8 | end: const Offset(0, 0), 9 | ).animate(animation), 10 | child: widget, 11 | ); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/personal_component/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/personalize.dart'; 3 | 4 | import 'view.dart'; 5 | 6 | class PersonalizeComponent extends Component { 7 | PersonalizeComponent() 8 | : super( 9 | view: buildView, 10 | ); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /lib/sections/login/page/login/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | LoginAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | LoginState _onAction(LoginState state, Action action) { 15 | final LoginState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/artist/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_result.dart'; 3 | 4 | class ArtistState implements Cloneable { 5 | SearchResultItem? item; 6 | 7 | @override 8 | ArtistState clone() { 9 | return ArtistState()..item = item; 10 | } 11 | } 12 | 13 | ArtistState initState(Map args) { 14 | return ArtistState(); 15 | } 16 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/user/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | UserAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | UserState _onAction(UserState state, Action action) { 15 | final UserState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/album/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | AlbumAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | AlbumState _onAction(AlbumState state, Action action) { 15 | final AlbumState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/sim/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_result.dart'; 3 | 4 | class SimQueryState implements Cloneable { 5 | SearchResultItem? item; 6 | 7 | @override 8 | SimQueryState clone() { 9 | return SimQueryState()..item = item; 10 | } 11 | } 12 | 13 | SimQueryState initState(Map args) { 14 | return SimQueryState(); 15 | } 16 | -------------------------------------------------------------------------------- /lib/sections/my/page/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | UserCenterAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | UserCenterState _onAction(UserCenterState state, Action action) { 15 | final UserCenterState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/artist/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | ArtistAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | ArtistState _onAction(ArtistState state, Action action) { 15 | final ArtistState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/singer/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | SingerAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | SingerState _onAction(SingerState state, Action action) { 15 | final SingerState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/singer/view.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_music/sections/search/widget/total_song.dart'; 4 | 5 | import 'action.dart'; 6 | import 'state.dart'; 7 | 8 | Widget buildView( 9 | SingerState state, Dispatch dispatch, ViewService viewService) { 10 | return SearchTotalSongWidget( 11 | item: state.item, 12 | searchKey: state.searchkey, 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /lib/sections/login/page/login/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | enum LoginAction { action, onLeading, onTapLogin } 4 | 5 | class LoginActionCreator { 6 | static Action onAction() { 7 | return const Action(LoginAction.action); 8 | } 9 | 10 | static Action onLeadingAction() { 11 | return const Action(LoginAction.onLeading); 12 | } 13 | 14 | static Action onTapLoginAction() { 15 | return const Action(LoginAction.onTapLogin); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/topic/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_hot_topic.dart'; 3 | 4 | class SearchTopicState implements Cloneable { 5 | SearchHotTopicWrap? wrap; 6 | @override 7 | SearchTopicState clone() { 8 | return SearchTopicState()..wrap = wrap; 9 | } 10 | } 11 | 12 | SearchTopicState initState(Map args) { 13 | return SearchTopicState(); 14 | } 15 | -------------------------------------------------------------------------------- /lib/sections/home/page/drawer/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | HomeDrawerAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | HomeDrawerState _onAction(HomeDrawerState state, Action action) { 15 | final HomeDrawerState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/sim/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | SimQueryAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | SimQueryState _onAction(SimQueryState state, Action action) { 15 | final SimQueryState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/playlist/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | PlaylistAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | PlaylistState _onAction(PlaylistState state, Action action) { 15 | final PlaylistState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/hot/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_hot.dart'; 3 | 4 | enum SearchHotAction { action, didFetchData } 5 | 6 | class SearchHotActionCreator { 7 | static Action onAction() { 8 | return const Action(SearchHotAction.action); 9 | } 10 | 11 | static Action didFetchDataAction(SearchHotWrap wrap) { 12 | return Action(SearchHotAction.didFetchData, payload: wrap); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/constants/key.dart: -------------------------------------------------------------------------------- 1 | class ConstantsKey { 2 | static final String encrypterKey = 3 | "my 32 length key................"; //qwertyuiop1234567lkjhgf 4 | static final String encrypterIV = "0123456789ABCDEF"; 5 | 6 | static final String weatherToken = "oU6JnqAWhL9mMHks"; 7 | 8 | static final String aMapiOSKey = "9ef9431c196f67437cfa403dfad4a969"; 9 | 10 | //歌单广场,个人数据key 11 | static final String squareKey = "-1"; 12 | 13 | //歌单广场,精品歌单默认显示 14 | static final String square_tag = "全部精品"; 15 | } 16 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | SearchDetailAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | SearchDetailState _onAction(SearchDetailState state, Action action) { 15 | final SearchDetailState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/topic/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | SearchTopicAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | SearchTopicState _onAction(SearchTopicState state, Action action) { 15 | final SearchTopicState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/user/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_result.dart'; 3 | 4 | class UserState implements Cloneable { 5 | SearchResultItem? item; 6 | String? searchKey; 7 | 8 | @override 9 | UserState clone() { 10 | return UserState() 11 | ..item = item 12 | ..searchKey = searchKey; 13 | } 14 | } 15 | 16 | UserState initState(Map args) { 17 | return UserState(); 18 | } 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/album/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_result.dart'; 3 | 4 | class AlbumState implements Cloneable { 5 | SearchResultItem? item; 6 | String? searchKey; 7 | 8 | @override 9 | AlbumState clone() { 10 | return AlbumState() 11 | ..item = item 12 | ..searchKey = searchKey; 13 | } 14 | } 15 | 16 | AlbumState initState(Map args) { 17 | return AlbumState(); 18 | } 19 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/hot/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_hot.dart'; 3 | import 'package:flutter_music/widgets/loading_wrap.dart'; 4 | 5 | class SearchHotState implements Cloneable { 6 | SearchHotWrap? wrap; 7 | 8 | @override 9 | SearchHotState clone() { 10 | return SearchHotState()..wrap = wrap; 11 | } 12 | } 13 | 14 | SearchHotState initState(Map args) { 15 | return SearchHotState(); 16 | } 17 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/recommend/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | SearchRecommendAction.action: _onAction, 10 | }, 11 | ); 12 | } 13 | 14 | SearchRecommendState _onAction(SearchRecommendState state, Action action) { 15 | final SearchRecommendState newState = state.clone(); 16 | return newState; 17 | } 18 | -------------------------------------------------------------------------------- /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 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/singer/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_result.dart'; 3 | 4 | class SingerState implements Cloneable { 5 | SearchResultItem? item; 6 | String? searchkey; 7 | 8 | @override 9 | SingerState clone() { 10 | return SingerState() 11 | ..item = item 12 | ..searchkey = searchkey; 13 | } 14 | } 15 | 16 | SingerState initState(Map args) { 17 | return SingerState(); 18 | } 19 | -------------------------------------------------------------------------------- /lib/sections/video/models/detail.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/models/common_model.dart'; 2 | import 'package:flutter_music/sections/village/models/source.dart'; 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | part 'detail.g.dart'; 6 | 7 | @JsonSerializable() 8 | class VideoDetailWrap extends CommonModel { 9 | VideoDetailWrap(); 10 | 11 | factory VideoDetailWrap.fromJson(Map json) => 12 | _$VideoDetailWrapFromJson(json); 13 | 14 | toJson() => _$VideoDetailWrapToJson(this); 15 | } 16 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | enum SearchDetailAction { action, onTapClean, onTapSubmit } 4 | 5 | class SearchDetailActionCreator { 6 | static Action onAction() { 7 | return const Action(SearchDetailAction.action); 8 | } 9 | 10 | static Action onTapSubmitAction(String text) { 11 | return Action(SearchDetailAction.onTapSubmit, payload: text); 12 | } 13 | 14 | static Action onTapCleanAction() { 15 | return const Action(SearchDetailAction.onTapClean); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/playlist/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_result.dart'; 3 | 4 | class PlaylistState implements Cloneable { 5 | SearchResultItem? item; 6 | String? searchKey; 7 | 8 | @override 9 | PlaylistState clone() { 10 | return PlaylistState() 11 | ..item = item 12 | ..searchKey = searchKey; 13 | } 14 | } 15 | 16 | PlaylistState initState(Map args) { 17 | return PlaylistState(); 18 | } 19 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/hot/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/widgets/loading_wrap.dart'; 3 | 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Reducer? buildReducer() { 8 | return asReducer( 9 | >{ 10 | SearchHotAction.action: _onAction, 11 | }, 12 | ); 13 | } 14 | 15 | SearchHotState _onAction(SearchHotState state, Action action) { 16 | final SearchHotState newState = state.clone(); 17 | return newState; 18 | } 19 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/history/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/models/db/db_model.dart'; 3 | import 'package:flutter_music/widgets/loading_wrap.dart'; 4 | 5 | class SearchHistoryState implements Cloneable { 6 | List logs = []; 7 | 8 | @override 9 | SearchHistoryState clone() { 10 | return SearchHistoryState()..logs = logs; 11 | } 12 | } 13 | 14 | SearchHistoryState initState(Map args) { 15 | return SearchHistoryState(); 16 | } 17 | -------------------------------------------------------------------------------- /lib/utils/encrypt_util.dart: -------------------------------------------------------------------------------- 1 | import 'package:encrypt/encrypt.dart' as encry; 2 | import 'package:flutter_music/constants/key.dart'; 3 | 4 | class EncrypterUtils { 5 | static final key = encry.Key.fromUtf8(ConstantsKey.encrypterKey); 6 | static final iv = encry.IV.fromUtf8(ConstantsKey.encrypterIV); 7 | static final encrypter = encry.Encrypter(encry.AES(key)); 8 | 9 | static String encrypt(String encryptStr) => 10 | encrypter.encrypt(encryptStr, iv: iv).base64; 11 | 12 | static String decrypt(String str) => encrypter.decrypt64(str, iv: iv); 13 | } 14 | -------------------------------------------------------------------------------- /lib/sections/home/page/flow_adapter/cell_connector.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | import 'package:flutter_music/sections/home/page/state.dart'; 4 | 5 | class CellConnector extends ConnOp { 6 | final int index; 7 | CellConnector({this.index = 0}); 8 | 9 | @override 10 | MusicItem? get(HomeMusicState? state) { 11 | if (index > state!.musicWrap!.data!.blocks!.length) return null; 12 | return state.musicWrap!.data!.blocks![index]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/flow_adapter/cell_connector.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/podcast.dart'; 3 | import 'package:flutter_music/sections/podcast/page/podcast/state.dart'; 4 | 5 | class CellConnector extends ConnOp { 6 | final int index; 7 | CellConnector({this.index = 0}); 8 | 9 | @override 10 | PodcastStage? get(PodcastState? state) { 11 | if (index > state!.podcastWrap!.data!.length) return null; 12 | return state.podcastWrap!.data![index]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /assets/json/search_recommend.json: -------------------------------------------------------------------------------- 1 | {"code":200,"result":{"hots":[{"first":"他只是经过","second":1,"third":null,"iconType":1},{"first":"会不会","second":1,"third":null,"iconType":1},{"first":"永不失联的爱","second":1,"third":null,"iconType":1},{"first":"不曾遗忘的符号","second":1,"third":null,"iconType":1},{"first":"薛之谦","second":1,"third":null,"iconType":1},{"first":"日不落","second":1,"third":null,"iconType":1},{"first":"Dear John","second":1,"third":null,"iconType":1},{"first":"为你我受冷风吹","second":1,"third":null,"iconType":1},{"first":"魏大勋新歌","second":1,"third":null,"iconType":1},{"first":"起风了","second":1,"third":null,"iconType":1}]}} -------------------------------------------------------------------------------- /lib/sections/Leaderboard/page/flow_adapter/cell_connector.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/Leaderboard/models/toplist.dart'; 3 | import 'package:flutter_music/sections/Leaderboard/page/state.dart'; 4 | 5 | class CellConnector extends ConnOp { 6 | final int index; 7 | CellConnector({this.index = 0}); 8 | 9 | @override 10 | ToplistDetailSection? get(LeaderboardState? state) { 11 | if (index > state!.sections!.length) return null; 12 | return state.sections![index]; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /lib/sections/square/page/child/flow_adpter/item_connector.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/playlist.dart'; 3 | import 'package:flutter_music/sections/square/page/child/state.dart'; 4 | 5 | class ItemConnertor extends ConnOp { 6 | @override 7 | PlaylistSquareWrap? get(SquareChildState? state) { 8 | return state?.squareWrap; 9 | } 10 | 11 | @override 12 | void set(SquareChildState state, PlaylistSquareWrap subState) { 13 | state.squareWrap = subState; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /assets/json/search_default.json: -------------------------------------------------------------------------------- 1 | {"code":200,"message":null,"data":{"showKeyword":"Letting Go 最近很火哦","styleKeyword":{"keyWord":null,"descWord":"Letting Go 最近很火哦"},"realkeyword":"Letting Go","searchType":1018,"action":0,"alg":"dq_0_0_T3_R12_9fee94d002af31c00967592ee9080f14_#","gap":0,"source":null,"bizQueryInfo":"{\"showQuery\":\"Letting Go 最近很火哦\",\"source\":\"default_search\",\"intentStrategy\":null,\"bizIntentList\":[{\"searchQuery\":\"Letting Go\",\"queryTemplateType\":\"UNKNOWN\",\"itemID\":\"0\",\"itemType\":\"\",\"level\":1,\"bestMatch\":true}],\"songRecIntent\":false,\"mixRecIntent\":null}","logInfo":null}} -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_music/res/theme.dart'; 3 | import 'package:flutter_music/sections/application/page/page.dart'; 4 | 5 | void main() { 6 | runApp(const MyApp()); 7 | } 8 | 9 | class MyApp extends StatelessWidget { 10 | const MyApp({Key? key}) : super(key: key); 11 | 12 | @override 13 | Widget build(BuildContext context) { 14 | return MaterialApp( 15 | theme: getAppTheme(), 16 | home: Builder(builder: (BuildContext context) { 17 | return ApplicationPage().buildPage({}); 18 | }), 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/user/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class UserComponent extends Component { 9 | UserComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /assets/json/dj_banner.json: -------------------------------------------------------------------------------- 1 | {"data":[{"targetId":0,"targetType":60004,"pic":"http://p1.music.126.net/HguITdGhPSH5KR8dcEqZ6Q==/109951167790804434.jpg","url":"https://y.music.163.com/m/at/lovestory","typeTitle":"策划","exclusive":false},{"targetId":2509710998,"targetType":60001,"pic":"http://p1.music.126.net/7gN3l9mbiYh2DQeiXjqMhg==/109951167790815487.jpg","url":"orpheus://program/2509710998","typeTitle":"知识","exclusive":false},{"targetId":2069905287,"targetType":60001,"pic":"http://p1.music.126.net/aFc78izGX4j2pQuZMnrhyQ==/109951167790842016.jpg","url":"orpheus://program/2069905287","typeTitle":"广播剧","exclusive":false}],"code":200} -------------------------------------------------------------------------------- /lib/sections/search/page/detail/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/helper/router.dart'; 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Effect? buildEffect() { 7 | return combineEffects(>{ 8 | SearchDetailAction.action: _onAction, 9 | SearchDetailAction.onTapClean: _onTapClean, 10 | }); 11 | } 12 | 13 | void _onTapClean(Action action, Context ctx) { 14 | ARouter.pop(ctx.context); 15 | } 16 | 17 | void _onAction(Action action, Context ctx) {} 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/recommend/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_recommend.dart'; 3 | import 'package:flutter_music/widgets/loading_wrap.dart'; 4 | 5 | class SearchRecommendState implements Cloneable { 6 | SearchRecommendWrap? recommendWrap; 7 | 8 | @override 9 | SearchRecommendState clone() { 10 | return SearchRecommendState()..recommendWrap = recommendWrap; 11 | } 12 | } 13 | 14 | SearchRecommendState initState(Map args) { 15 | return SearchRecommendState(); 16 | } 17 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/flow_adapter/banner_connector.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/banner.dart'; 3 | import 'package:flutter_music/sections/podcast/page/podcast/state.dart'; 4 | 5 | class BannerConnector extends ConnOp { 6 | BannerConnector(); 7 | 8 | @override 9 | PodcastBannerWrap? get(PodcastState? state) { 10 | return state?.bannerWrap; 11 | } 12 | 13 | @override 14 | void set(PodcastState state, PodcastBannerWrap subState) { 15 | state.bannerWrap = subState; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/album/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class AlbumComponent extends Component { 9 | AlbumComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/artist/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class ArtistComponent extends Component { 9 | ArtistComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/singer/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SingerComponent extends Component { 9 | SingerComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/sim/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SimQueryComponent extends Component { 9 | SimQueryComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/hot/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SearchHotComponent extends Component { 9 | SearchHotComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/flow_adapter/personal_connector.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/personalize.dart'; 3 | import 'package:flutter_music/sections/podcast/page/podcast/state.dart'; 4 | 5 | class PersonalConnector extends ConnOp { 6 | PersonalConnector(); 7 | 8 | @override 9 | PersonalizeWrap? get(PodcastState? state) { 10 | return state?.personalizeWrap; 11 | } 12 | 13 | @override 14 | void set(PodcastState state, PersonalizeWrap subState) { 15 | state.personalizeWrap = subState; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/playlist/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class PlaylistComponent extends Component { 9 | PlaylistComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/login/page/login/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | class LoginState implements Cloneable { 4 | List assets = []; 5 | 6 | @override 7 | LoginState clone() { 8 | return LoginState()..assets = assets; 9 | } 10 | } 11 | 12 | LoginState initState(Map? args) { 13 | return LoginState() 14 | ..assets = [ 15 | "cm6_login_logo_wechat~iphone.png", 16 | "cm6_login_logo_qq~iphone.png", 17 | "cm6_login_logo_weibo~iphone.png", 18 | "cm6_login_logo_apple~iphone.png", 19 | "cm6_login_logo_netease~iphone.png" 20 | ]; 21 | } 22 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/topic/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SearchTopicComponent extends Component { 9 | SearchTopicComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/village/page/flow_adapter/adapter.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'package:flutter_music/sections/village/page/cell/component.dart'; 4 | import 'package:flutter_music/sections/village/page/flow_adapter/cell_connec.dart'; 5 | import 'package:flutter_music/sections/village/page/state.dart'; 6 | 7 | FlowAdapter get adapter => FlowAdapter( 8 | view: (VillageState state) => DependentArray( 9 | builder: (int index) { 10 | // print(">>>>>>>>>str:$str"); 11 | return CellConnector(index: index) + CellComponent(); 12 | }, 13 | length: 0)); 14 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/history/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SearchHistoryComponent extends Component { 9 | SearchHistoryComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/hot/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/repository/services/common_service.dart'; 3 | import 'package:flutter_music/sections/search/models/search_hot.dart'; 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Effect? buildEffect() { 8 | return combineEffects(>{ 9 | SearchHotAction.action: _onAction, 10 | Lifecycle.initState: _initState, 11 | }); 12 | } 13 | 14 | void _initState(Action action, Context ctx) async {} 15 | 16 | void _onAction(Action action, Context ctx) {} 17 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/recommend/component.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SearchRecommendComponent extends Component { 9 | SearchRecommendComponent() 10 | : super( 11 | effect: buildEffect(), 12 | reducer: buildReducer(), 13 | view: buildView, 14 | dependencies: Dependencies( 15 | adapter: null, 16 | slots: >{ 17 | }),); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/square/page/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/catlist.dart'; 3 | 4 | enum PlaylistSquareAction { action, onTapEditButton, didFeatchData } 5 | 6 | class PlaylistSquareActionCreator { 7 | static Action onAction() { 8 | return const Action(PlaylistSquareAction.action); 9 | } 10 | 11 | static Action onTapEditButtonAction() { 12 | return const Action(PlaylistSquareAction.onTapEditButton); 13 | } 14 | 15 | static Action didFeatchDataAction(List items) { 16 | return Action(PlaylistSquareAction.didFeatchData, payload: items); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /lib/sections/square/page/recommend/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/recommend.dart'; 3 | 4 | enum SquareRecommendAction { action, didFetchData } 5 | 6 | class SquareRecommendActionCreator { 7 | static Action onAction() { 8 | return const Action(SquareRecommendAction.action); 9 | } 10 | 11 | static Action didFetchDataAction( 12 | SquareEveryDayRecommendWrap everyDayRecommendWrap, 13 | SquareRecommendWrap recommendWrap) { 14 | return Action(SquareRecommendAction.didFetchData, 15 | payload: Tuple2(everyDayRecommendWrap, recommendWrap)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/webview/page/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | class CustomWebViewState implements Cloneable { 4 | String? url; 5 | int progress = 0; 6 | bool showProgress = true; 7 | 8 | @override 9 | CustomWebViewState clone() { 10 | return CustomWebViewState() 11 | ..url = url 12 | ..progress = progress 13 | ..showProgress = showProgress; 14 | } 15 | } 16 | 17 | CustomWebViewState initState(Map? args) { 18 | String url = ""; 19 | if (args != null && args.keys.contains("url")) { 20 | url = args["url"]; 21 | } 22 | return CustomWebViewState()..url = url; 23 | } 24 | -------------------------------------------------------------------------------- /lib/sections/home/page/drawer/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | enum HomeDrawerAction { action, onTapSegment, onTapLogin, onTapQRCode } 4 | 5 | class HomeDrawerActionCreator { 6 | static Action onAction() { 7 | return const Action(HomeDrawerAction.action); 8 | } 9 | 10 | static Action onTapSegmentAction(String value) { 11 | return Action(HomeDrawerAction.onTapSegment, payload: value); 12 | } 13 | 14 | static Action onTapLoginAction() { 15 | return const Action(HomeDrawerAction.onTapLogin); 16 | } 17 | 18 | static Action onTapQRCodeAction() { 19 | return const Action(HomeDrawerAction.onTapQRCode); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/sections/music/page/recommend_list/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/music/models/recommend.dart'; 3 | 4 | enum RecommendListAction { action, onTapItem, didFetchData } 5 | 6 | class RecommendListActionCreator { 7 | static Action onAction() { 8 | return const Action(RecommendListAction.action); 9 | } 10 | 11 | static Action onTapItemAction(DailySongItem item) { 12 | return Action(RecommendListAction.onTapItem, payload: item); 13 | } 14 | 15 | static Action didFetchDataAction(RecommendListWrap wrap) { 16 | return Action(RecommendListAction.didFetchData, payload: wrap); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /lib/sections/login/page/photo_login/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class PhotoLoginPage extends Page> { 9 | PhotoLoginPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, slots: >{}), 17 | middleware: >[], 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/music/page/recommend_list/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/music/models/recommend.dart'; 3 | import 'package:flutter_music/widgets/loading_wrap.dart'; 4 | 5 | class RecommendListState implements Cloneable { 6 | RecommendListWrap? wrap; 7 | LoadingState? loadingState; 8 | 9 | @override 10 | RecommendListState clone() { 11 | return RecommendListState() 12 | ..wrap = wrap 13 | ..loadingState = loadingState; 14 | } 15 | } 16 | 17 | RecommendListState initState(Map? args) { 18 | return RecommendListState()..loadingState = LoadingState.isLoading; 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/follow/page/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | enum MyFocusAction { action, viewPortShow, didRefresh, didRefreshImage } 4 | 5 | class MyFocusActionCreator { 6 | static Action onAction() { 7 | return const Action(MyFocusAction.action); 8 | } 9 | 10 | static Action viewPortShowAction(int first, int last) { 11 | return Action(MyFocusAction.viewPortShow, payload: Tuple2(first, last)); 12 | } 13 | 14 | static Action didRefreshImageAction() { 15 | return const Action(MyFocusAction.didRefreshImage); 16 | } 17 | 18 | static Action didRefreshAction(String path) { 19 | return Action(MyFocusAction.didRefresh, payload: path); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/total/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_multimatch.dart'; 3 | import 'package:flutter_music/sections/search/models/search_result.dart'; 4 | 5 | enum SearchResultTotalAction { action, didFetchData } 6 | 7 | class SearchResultTotalActionCreator { 8 | static Action onAction() { 9 | return const Action(SearchResultTotalAction.action); 10 | } 11 | 12 | static Action didFetchDataAction( 13 | SearchResultWrap wrap, SearchMultimatchWrap multimatchWrap) { 14 | return Action(SearchResultTotalAction.didFetchData, 15 | payload: Tuple2(wrap, multimatchWrap)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/recommend/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_recommend.dart'; 3 | 4 | enum SearchRecommendAction { action, onTapItem, didFetchData } 5 | 6 | class SearchRecommendActionCreator { 7 | static Action onAction() { 8 | return const Action(SearchRecommendAction.action); 9 | } 10 | 11 | static Action onTapItemAction(SearchRecommendHotsItem item) { 12 | return Action(SearchRecommendAction.onTapItem, payload: item); 13 | } 14 | 15 | static Action didFetchDataAction(SearchRecommendWrap wrap) { 16 | return Action(SearchRecommendAction.didFetchData, payload: wrap); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://www.dartlang.org/guides/libraries/private-files 2 | 3 | # Files and directories created by pub 4 | .dart_tool/ 5 | .packages 6 | build/ 7 | # If you're building an application, you may want to check-in your pubspec.lock 8 | pubspec.lock 9 | 10 | # Directory created by dartdoc 11 | # If you don't generate documentation locally you can remove this line. 12 | doc/api/ 13 | 14 | # Avoid committing generated Javascript files: 15 | *.dart.js 16 | *.info.json # Produced by the --dump-info flag. 17 | *.js # When generated by dart2js. Don't specify *.js if your 18 | # project includes source files written in JavaScript. 19 | *.js_ 20 | *.js.deps 21 | *.js.map 22 | -------------------------------------------------------------------------------- /lib/sections/login/page/photo_login/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | 4 | class PhotoLoginState implements Cloneable { 5 | TextEditingController? emailController; 6 | TextEditingController? passwordController; 7 | 8 | @override 9 | PhotoLoginState clone() { 10 | return PhotoLoginState() 11 | ..emailController = emailController 12 | ..passwordController = passwordController; 13 | } 14 | } 15 | 16 | PhotoLoginState initState(Map? args) { 17 | return PhotoLoginState() 18 | ..emailController = TextEditingController() 19 | ..passwordController = TextEditingController(); 20 | } 21 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.5.31' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:4.1.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | project.evaluationDependsOn(':app') 25 | } 26 | 27 | task clean(type: Delete) { 28 | delete rootProject.buildDir 29 | } 30 | -------------------------------------------------------------------------------- /assets/json/song_url.json: -------------------------------------------------------------------------------- 1 | {"data":[{"id":115162,"url":"http://m701.music.126.net/20220921151336/99c3f15bc79f055a912dddfee9c68f47/jdymusic/obj/wo3DlMOGwrbDjj7DisKw/14096539817/fe9f/4075/3178/e0f0ffbb191e61128f0aeaf3f17e0e4b.mp3","br":128000,"size":4668230,"md5":"e0f0ffbb191e61128f0aeaf3f17e0e4b","code":200,"expi":1200,"type":"mp3","gain":-4.0278,"fee":8,"uf":null,"payed":0,"flag":260,"canExtend":false,"freeTrialInfo":null,"level":"standard","encodeType":"mp3","freeTrialPrivilege":{"resConsumable":false,"userConsumable":false,"listenType":null},"freeTimeTrialPrivilege":{"resConsumable":false,"userConsumable":false,"type":0,"remainTime":0},"urlSource":0,"rightSource":0,"podcastCtrp":null,"effectTypes":null,"time":291709}],"code":200} -------------------------------------------------------------------------------- /lib/sections/login/page/login/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class LoginPage extends Page> { 9 | LoginPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/login/page/photo_login/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'action.dart'; 4 | import 'state.dart'; 5 | 6 | Reducer? buildReducer() { 7 | return asReducer( 8 | >{ 9 | PhotoLoginAction.action: _onAction, 10 | PhotoLoginAction.didRefresh: _didRefresh, 11 | }, 12 | ); 13 | } 14 | 15 | PhotoLoginState _didRefresh(PhotoLoginState state, Action action) { 16 | final PhotoLoginState newState = state.clone(); 17 | return newState; 18 | } 19 | 20 | PhotoLoginState _onAction(PhotoLoginState state, Action action) { 21 | final PhotoLoginState newState = state.clone(); 22 | return newState; 23 | } 24 | -------------------------------------------------------------------------------- /lib/sections/follow/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class MyFocusPage extends Page> { 9 | MyFocusPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/home/page/album/view.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_music/res/colors.dart'; 4 | import 'package:flutter_music/sections/home/models/home.dart'; 5 | import 'package:flutter_music/sections/home/widget/segment.dart'; 6 | 7 | Widget buildView(MusicItem state, Dispatch dispatch, ViewService viewService) { 8 | double size = MediaQuery.of(viewService.context).size.width; 9 | return Container( 10 | margin: const EdgeInsets.only(bottom: 10), 11 | color: CommonColors.foregroundColor, 12 | child: SegmentWidget( 13 | item: state, 14 | width: size, 15 | dispatch: dispatch, 16 | ), 17 | ); 18 | } 19 | -------------------------------------------------------------------------------- /ios/.gitignore: -------------------------------------------------------------------------------- 1 | **/dgph 2 | *.mode1v3 3 | *.mode2v3 4 | *.moved-aside 5 | *.pbxuser 6 | *.perspectivev3 7 | **/*sync/ 8 | .sconsign.dblite 9 | .tags* 10 | **/.vagrant/ 11 | **/DerivedData/ 12 | Icon? 13 | **/Pods/ 14 | **/.symlinks/ 15 | profile 16 | xcuserdata 17 | **/.generated/ 18 | Flutter/App.framework 19 | Flutter/Flutter.framework 20 | Flutter/Flutter.podspec 21 | Flutter/Generated.xcconfig 22 | Flutter/ephemeral/ 23 | Flutter/app.flx 24 | Flutter/app.zip 25 | Flutter/flutter_assets/ 26 | Flutter/flutter_export_environment.sh 27 | ServiceDefinitions.json 28 | Runner/GeneratedPluginRegistrant.* 29 | 30 | # Exceptions to above rules. 31 | !default.mode1v3 32 | !default.mode2v3 33 | !default.pbxuser 34 | !default.perspectivev3 35 | -------------------------------------------------------------------------------- /lib/sections/my/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class UserCenterPage extends Page> { 9 | UserCenterPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/catelist/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/catelist.dart'; 3 | 4 | enum CatelistAction { action, onTapError, didError, didFetchData } 5 | 6 | class CatelistActionCreator { 7 | static Action onAction() { 8 | return const Action(CatelistAction.action); 9 | } 10 | 11 | static Action onTapErrorAction() { 12 | return const Action(CatelistAction.onTapError); 13 | } 14 | 15 | static Action didErrorAction() { 16 | return const Action(CatelistAction.didError); 17 | } 18 | 19 | static Action didFetchDataAction(CatelistWrap wrap) { 20 | return Action(CatelistAction.didFetchData, payload: wrap); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/catelist/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class CatelistPage extends Page> { 9 | CatelistPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/generated_plugin_registrant.dart: -------------------------------------------------------------------------------- 1 | // 2 | // Generated file. Do not edit. 3 | // 4 | 5 | // ignore_for_file: directives_ordering 6 | // ignore_for_file: lines_longer_than_80_chars 7 | 8 | import 'package:audioplayers/web/audioplayers_web.dart'; 9 | import 'package:shared_preferences_web/shared_preferences_web.dart'; 10 | import 'package:video_player_web/video_player_web.dart'; 11 | 12 | import 'package:flutter_web_plugins/flutter_web_plugins.dart'; 13 | 14 | // ignore: public_member_api_docs 15 | void registerPlugins(Registrar registrar) { 16 | AudioplayersPlugin.registerWith(registrar); 17 | SharedPreferencesPlugin.registerWith(registrar); 18 | VideoPlayerPlugin.registerWith(registrar); 19 | registrar.registerMessageHandler(); 20 | } 21 | -------------------------------------------------------------------------------- /lib/sections/home/page/drawer/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class HomeDrawerPage extends Page> { 9 | HomeDrawerPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/square/page/edit/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SquareEditPage extends Page> { 9 | SquareEditPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/video/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class VideoDetailPage extends Page> { 9 | VideoDetailPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/application/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class ApplicationPage extends Page> { 9 | ApplicationPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/music/page/song/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class AudioPlayerPage extends Page> { 9 | AudioPlayerPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/search/models/singer_category.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/sections/search/models/search_result.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'singer_category.g.dart'; 5 | 6 | @JsonSerializable() 7 | class SearchSingerCategoryWrap { 8 | SearchSingerCategoryWrap(); 9 | 10 | bool? more; 11 | List? artists; 12 | int? code; 13 | 14 | factory SearchSingerCategoryWrap.fromJson(Map json) => 15 | _$SearchSingerCategoryWrapFromJson(json); 16 | 17 | toJson() => _$SearchSingerCategoryWrapToJson(this); 18 | } 19 | 20 | class SearchSingerMenuModel { 21 | SearchSingerMenuModel(); 22 | 23 | String? text; 24 | int? id; 25 | bool selected = false; 26 | } 27 | -------------------------------------------------------------------------------- /lib/sections/square/page/child/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SquareChildPage extends Page> { 9 | SquareChildPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/home/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | import 'flow_adapter/adapter.dart'; 8 | 9 | class HomeMusicPage extends Page> { 10 | HomeMusicPage() 11 | : super( 12 | initState: initState, 13 | effect: buildEffect(), 14 | reducer: buildReducer(), 15 | view: buildView, 16 | dependencies: Dependencies( 17 | adapter: NoneConn() + adapter, 18 | slots: >{}), 19 | middleware: >[], 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /lib/sections/square/models/tag.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'tag.g.dart'; 4 | 5 | ///精品歌单分类下的内容 6 | @JsonSerializable() 7 | class HighqualityTagsWrap { 8 | HighqualityTagsWrap(); 9 | 10 | int? code; 11 | List? tags; 12 | 13 | factory HighqualityTagsWrap.fromJson(Map json) => 14 | _$HighqualityTagsWrapFromJson(json); 15 | 16 | toJson() => _$HighqualityTagsWrapToJson(this); 17 | } 18 | 19 | @JsonSerializable() 20 | class Tag { 21 | Tag(); 22 | 23 | int? id; 24 | String? name; 25 | int? type; 26 | int? category; 27 | bool? hot; 28 | 29 | factory Tag.fromJson(Map json) => _$TagFromJson(json); 30 | 31 | toJson() => _$TagToJson(this); 32 | } 33 | -------------------------------------------------------------------------------- /lib/sections/music/page/song/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/music/models/lyric.dart'; 3 | import 'package:flutter_music/sections/music/models/song.dart'; 4 | 5 | enum AudioPlayerAction { action, didTapShowLyric, didFetchData } 6 | 7 | class AudioPlayerActionCreator { 8 | static Action onAction() { 9 | return const Action(AudioPlayerAction.action); 10 | } 11 | 12 | static Action didTapShowLyricAction() { 13 | return const Action(AudioPlayerAction.didTapShowLyric); 14 | } 15 | 16 | static Action didFetchDataAction(SongWrap songWrap, SongLyric songLyric) { 17 | return Action(AudioPlayerAction.didFetchData, 18 | payload: Tuple2(songWrap, songLyric)); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SearchDetailPage extends Page> { 9 | SearchDetailPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/webview/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class CustomWebViewPage extends Page> { 9 | CustomWebViewPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/detail/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class PodcastDetailPage extends Page> { 9 | PodcastDetailPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/simple/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SearchSimplePage extends Page> { 9 | SearchSimplePage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/search/page/detail/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | class SearchDetailState implements Cloneable { 4 | String? text; 5 | String? hint; 6 | 7 | @override 8 | SearchDetailState clone() { 9 | return SearchDetailState() 10 | ..text = text 11 | ..hint = hint; 12 | } 13 | } 14 | 15 | SearchDetailState initState(Map? args) { 16 | String text = ""; 17 | String hint = ""; 18 | if (args != null) { 19 | if (args.containsKey("text")) { 20 | text = args["text"]; 21 | } 22 | if (args.containsKey("hint")) { 23 | hint = args["hint"]; 24 | } 25 | } 26 | 27 | return SearchDetailState() 28 | ..text = text 29 | ..hint = hint; 30 | } 31 | -------------------------------------------------------------------------------- /lib/sections/square/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class PlaylistSquarePage extends Page> { 9 | PlaylistSquarePage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/music/page/recommend_list/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class RecommendListPage extends Page> { 9 | RecommendListPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/village/page/child/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class VideoWaterfallPage extends Page> { 9 | VideoWaterfallPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /assets/json/video_url.json: -------------------------------------------------------------------------------- 1 | { 2 | "urls":[ 3 | { 4 | "id":"D52DA5A9DA969DF16175877C7527E828", 5 | "url":"http://vodkgeyttp9.vod.126.net/vodkgeyttp8/OFdXisjn_20600476_shd.mp4?ts=1663746222&rid=B19FFF1FAE505A379EC8DE7D58A13B73&rl=3&rs=NbYVUMYFIFxRXEODgOjomhgQdTWFRyMr&sign=d7c047ae20a12a23a347dbfe1b16956a&ext=G6E54zo%2Fy9eC2Trw6D8Y5dO0BzsDQOBkDruJSbgLHoAJr01pBpz2N4aMOHC6bdDyAi46kf4RzVf6oQi8ELHJ7XLMqQ%2FzyKByR%2BqDok2B7WXNzzmBYXkI5twdJWf0zT4o1H417REnHCB%2BJsUrrUJzxeS3tXBp6Amo7Di%2B0uFSyj4%2ByfebKowciKm1laIQrGwABODVmBVOQTTuTm5BhYiREcLbfNueL%2FfacOcV1pWIOCSduQ2eKVg%2FOmnTUERRRdJV", 6 | "size":77011363, 7 | "validityTime":1200, 8 | "needPay":false, 9 | "payInfo":null, 10 | "r":720 11 | } 12 | ], 13 | "code":200 14 | } -------------------------------------------------------------------------------- /lib/sections/search/page/detail/simple/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_result.dart'; 3 | import 'package:flutter_music/sections/search/models/search_voice.dart'; 4 | 5 | enum SearchSimpleAction { action, didFetchData, didFetchVoiceData } 6 | 7 | class SearchSimpleActionCreator { 8 | static Action onAction() { 9 | return const Action(SearchSimpleAction.action); 10 | } 11 | 12 | static Action didFetchDataAction(SearchResultWrap wrap) { 13 | return Action(SearchSimpleAction.didFetchData, payload: wrap); 14 | } 15 | 16 | static Action didFetchVoiceDataAction(SearchVoiceWrap wrap) { 17 | return Action(SearchSimpleAction.didFetchVoiceData, payload: wrap); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /lib/sections/music/page/playlist_detail/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class PlaylistDetailPage extends Page> { 9 | PlaylistDetailPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/search/page/singer_category/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class SingerCategoryPage extends Page> { 9 | SingerCategoryPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/village/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/village/page/flow_adapter/adapter.dart'; 3 | 4 | import 'effect.dart'; 5 | import 'reducer.dart'; 6 | import 'state.dart'; 7 | import 'view.dart'; 8 | 9 | class VillagePage extends Page> { 10 | VillagePage() 11 | : super( 12 | initState: initState, 13 | effect: buildEffect(), 14 | reducer: buildReducer(), 15 | view: buildView, 16 | dependencies: Dependencies( 17 | adapter: NoneConn() + adapter, 18 | slots: >{}), 19 | middleware: >[], 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /lib/repository/database/database_initer.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/repository/database/database_keys.dart'; 2 | 3 | class DBInitialize { 4 | static var dbInitList = [ 5 | _createSearchLog, 6 | _createCollectLog, 7 | ]; 8 | 9 | static var _createSearchLog = ''' 10 | CREATE TABLE IF NOT EXISTS ${TUserSearchHistoryProperty.TABLE_NAME} ( 11 | ${TUserSearchHistoryProperty.cKeyWord} TEXT NOT NULL, 12 | ${TUserSearchHistoryProperty.cTime} INTEGER NOT NULL, 13 | PRIMARY KEY(${TUserSearchHistoryProperty.cKeyWord}) 14 | ) 15 | '''; 16 | 17 | static var _createCollectLog = ''' 18 | CREATE TABLE IF NOT EXISTS ${TUserCollectProperty.TABLE_NAME} ( 19 | ${TUserCollectProperty.cId} INTEGER NOT NULL, 20 | PRIMARY KEY(${TUserCollectProperty.cId}) 21 | ) 22 | '''; 23 | } 24 | -------------------------------------------------------------------------------- /lib/sections/music/page/playlist_detail/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/playlist.dart'; 3 | 4 | enum PlaylistDetailAction { action, onTapError, didFetchData, didError } 5 | 6 | class PlaylistDetailActionCreator { 7 | static Action onAction() { 8 | return const Action(PlaylistDetailAction.action); 9 | } 10 | 11 | static Action onTapErrorAction() { 12 | return const Action(PlaylistDetailAction.onTapError); 13 | } 14 | 15 | static Action didFetchDataAction(PlaylistSquareWrap squareWrap) { 16 | return Action(PlaylistDetailAction.didFetchData, payload: squareWrap); 17 | } 18 | 19 | static Action didErrorAction() { 20 | return const Action(PlaylistDetailAction.didError); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/video/models/url.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'url.g.dart'; 4 | 5 | @JsonSerializable() 6 | class VideoUrlWrap { 7 | VideoUrlWrap(); 8 | 9 | int? code; 10 | List? urls; 11 | 12 | factory VideoUrlWrap.fromJson(Map json) => 13 | _$VideoUrlWrapFromJson(json); 14 | 15 | toJson() => _$VideoUrlWrapToJson(this); 16 | } 17 | 18 | @JsonSerializable() 19 | class VideoUrlItem { 20 | VideoUrlItem(); 21 | 22 | String? id; 23 | String? url; 24 | int? size; 25 | int? validityTime; 26 | bool? needPay; 27 | double? r; 28 | 29 | factory VideoUrlItem.fromJson(Map json) => 30 | _$VideoUrlItemFromJson(json); 31 | 32 | toJson() => _$VideoUrlItemToJson(this); 33 | } 34 | -------------------------------------------------------------------------------- /lib/utils/colorUtils.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:flutter_music/res/colors.dart'; 3 | 4 | class ColorUtils { 5 | static Map colorMap() => { 6 | "blue": Colors.blue, 7 | "red": Colors.red, 8 | "gray": CommonColors.textColor999, 9 | "colorPrimary1": Colors.red, 10 | "colorSecondary7": Colors.green, 11 | }; 12 | } 13 | 14 | class HexColor extends Color { 15 | static int _getColorFromHex(String hexColor) { 16 | hexColor = hexColor.toUpperCase().replaceAll("#", ""); 17 | if (hexColor.length == 6) { 18 | hexColor = "FF" + hexColor; 19 | } 20 | return int.parse(hexColor, radix: 16); 21 | } 22 | 23 | HexColor(final String hexColor) : super(_getColorFromHex(hexColor)); 24 | } 25 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/catelist/child/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | import 'effect.dart'; 4 | import 'reducer.dart'; 5 | import 'state.dart'; 6 | import 'view.dart'; 7 | 8 | class CatelistRecommendPage extends Page> { 9 | CatelistRecommendPage() 10 | : super( 11 | initState: initState, 12 | effect: buildEffect(), 13 | reducer: buildReducer(), 14 | view: buildView, 15 | dependencies: Dependencies( 16 | adapter: null, 17 | slots: >{ 18 | }), 19 | middleware: >[ 20 | ],); 21 | 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/catelist/child/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/models/catelist.dart'; 3 | 4 | enum CatelistRecommendAction { action, onTapError, didError, didFetchData } 5 | 6 | class CatelistRecommendActionCreator { 7 | static Action onAction() { 8 | return const Action(CatelistRecommendAction.action); 9 | } 10 | 11 | static Action onTapErrorAction() { 12 | return const Action(CatelistRecommendAction.onTapError); 13 | } 14 | 15 | static Action didErrorAction() { 16 | return const Action(CatelistRecommendAction.didError); 17 | } 18 | 19 | static Action didFetchDataAction(CatelistRecommendWrap wrap) { 20 | return Action(CatelistRecommendAction.didFetchData, payload: wrap); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/podcast/page/podcast/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/podcast/page/podcast/flow_adapter/adapter.dart'; 3 | 4 | import 'effect.dart'; 5 | import 'reducer.dart'; 6 | import 'state.dart'; 7 | import 'view.dart'; 8 | 9 | class PodcastPage extends Page> { 10 | PodcastPage() 11 | : super( 12 | initState: initState, 13 | effect: buildEffect(), 14 | reducer: buildReducer(), 15 | view: buildView, 16 | dependencies: Dependencies( 17 | adapter: NoneConn() + adapter, 18 | slots: >{}), 19 | middleware: >[], 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /lib/sections/Leaderboard/page/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/Leaderboard/page/flow_adapter/adapter.dart'; 3 | 4 | import 'effect.dart'; 5 | import 'reducer.dart'; 6 | import 'state.dart'; 7 | import 'view.dart'; 8 | 9 | class LeaderboardPage extends Page> { 10 | LeaderboardPage() 11 | : super( 12 | initState: initState, 13 | effect: buildEffect(), 14 | reducer: buildReducer(), 15 | view: buildView, 16 | dependencies: Dependencies( 17 | adapter: NoneConn() + adapter, 18 | slots: >{}), 19 | middleware: >[], 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /lib/sections/music/models/song.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/models/common_model.dart'; 2 | import 'package:json_annotation/json_annotation.dart'; 3 | 4 | part 'song.g.dart'; 5 | 6 | @JsonSerializable() 7 | class SongWrap extends CommonModel> { 8 | SongWrap(); 9 | 10 | factory SongWrap.fromJson(Map json) => 11 | _$SongWrapFromJson(json); 12 | 13 | toJson() => _$SongWrapToJson(this); 14 | } 15 | 16 | @JsonSerializable() 17 | class SongData { 18 | SongData(); 19 | 20 | int? id; 21 | String? url; 22 | int? br; 23 | int? size; 24 | String? md5; 25 | int? code; 26 | String? type; 27 | String? level; 28 | 29 | factory SongData.fromJson(Map json) => 30 | _$SongDataFromJson(json); 31 | 32 | toJson() => _$SongDataToJson(this); 33 | } 34 | -------------------------------------------------------------------------------- /lib/sections/login/page/photo_login/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | enum PhotoLoginAction { 4 | action, 5 | onTapClear, 6 | onTapLogin, 7 | onTapSendCaptcha, 8 | didRefresh 9 | } 10 | 11 | class PhotoLoginActionCreator { 12 | static Action onAction() { 13 | return const Action(PhotoLoginAction.action); 14 | } 15 | 16 | static Action onTapLoginAction() { 17 | return const Action(PhotoLoginAction.onTapLogin); 18 | } 19 | 20 | static Action onTapClearAction() { 21 | return const Action(PhotoLoginAction.onTapClear); 22 | } 23 | 24 | static Action onTapSendCaptchaAction() { 25 | return const Action(PhotoLoginAction.onTapSendCaptcha); 26 | } 27 | 28 | static Action didRefreshAction() { 29 | return const Action(PhotoLoginAction.didRefresh); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/sections/square/page/recommend/flow_adpater/row_connector.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/home/models/home.dart'; 3 | import 'package:flutter_music/sections/home/page/state.dart'; 4 | import 'package:flutter_music/sections/square/models/recommend.dart'; 5 | import 'package:flutter_music/sections/square/page/recommend/state.dart'; 6 | 7 | class CellConnector 8 | extends ConnOp { 9 | final int index; 10 | CellConnector({this.index = 0}); 11 | 12 | @override 13 | RecommendSectionModel? get(SquareRecommendState? state) { 14 | if (index == 1) { 15 | return state?.everyDayRecommendMode; 16 | } 17 | if (index == 2) { 18 | return state?.recommendModel; 19 | } 20 | return null; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/login/page/login/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/helper/router.dart'; 3 | import 'package:flutter_music/helper/router_helper.dart'; 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Effect? buildEffect() { 8 | return combineEffects(>{ 9 | LoginAction.action: _onAction, 10 | LoginAction.onLeading: _onLeading, 11 | LoginAction.onTapLogin: _onTapLogin, 12 | }); 13 | } 14 | 15 | void _onLeading(Action action, Context ctx) { 16 | ARouter.close(ctx.context); 17 | } 18 | 19 | void _onTapLogin(Action action, Context ctx) { 20 | ARouter.close(ctx.context); 21 | ARouter.open(ctx.context, RouterKeys.photo_login); 22 | } 23 | 24 | void _onAction(Action action, Context ctx) {} 25 | -------------------------------------------------------------------------------- /lib/sections/video/models/detail.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'detail.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | VideoDetailWrap _$VideoDetailWrapFromJson(Map json) => VideoDetailWrap() 10 | ..message = json['message'] as String? 11 | ..code = json['code'] as int? 12 | ..data = json['data'] == null 13 | ? null 14 | : VideoItemData.fromJson(Map.from(json['data'] as Map)); 15 | 16 | Map _$VideoDetailWrapToJson(VideoDetailWrap instance) => 17 | { 18 | 'message': instance.message, 19 | 'code': instance.code, 20 | 'data': instance.data, 21 | }; 22 | -------------------------------------------------------------------------------- /lib/sections/village/page/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/cupertino.dart'; 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_music/sections/village/models/category.dart'; 5 | import 'package:flutter_music/widgets/loading_wrap.dart'; 6 | 7 | class VillageState implements Cloneable { 8 | LoadingState? loadingState; 9 | GlobalKey globalKey = GlobalKey(); 10 | VideoCategoryWrap? categoryWrap; 11 | 12 | @override 13 | VillageState clone() { 14 | return VillageState() 15 | ..loadingState = loadingState 16 | ..globalKey = globalKey 17 | ..categoryWrap = categoryWrap; 18 | } 19 | } 20 | 21 | VillageState initState(Map? args) { 22 | return VillageState()..loadingState = LoadingState.isLoading; 23 | } 24 | -------------------------------------------------------------------------------- /lib/sections/square/page/recommend/flow_adpater/adapter.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/page/recommend/flow_adpater/row_connector.dart'; 3 | import 'package:flutter_music/sections/square/page/recommend/row_component/component.dart'; 4 | import 'package:flutter_music/sections/square/page/recommend/state.dart'; 5 | 6 | FlowAdapter get adapter => 7 | FlowAdapter( 8 | view: (SquareRecommendState state) => DependentArray( 9 | builder: (int index) { 10 | if (index == 1 || index == 2) { 11 | return CellConnector(index: index) + RecommendRowComponent(); 12 | } 13 | // return CellConnector(index: index) + HomeCellComponent(); 14 | }, 15 | length: 5)); 16 | -------------------------------------------------------------------------------- /lib/repository/database/database_keys.dart: -------------------------------------------------------------------------------- 1 | ///all database key 2 | 3 | ///历史搜索 4 | class TUserSearchHistoryProperty { 5 | TUserSearchHistoryProperty._(); 6 | 7 | static const String TABLE_NAME = "t_search_history"; 8 | static const String cKeyWord = "key_wrod"; 9 | static const String cTime = "time"; 10 | } 11 | 12 | ///收藏 13 | class TUserCollectProperty { 14 | TUserCollectProperty._(); 15 | 16 | static const String TABLE_NAME = "t_collect"; 17 | static const String cId = "id"; 18 | } 19 | 20 | ///天气 21 | class TUserWeatherProperty { 22 | TUserWeatherProperty._(); 23 | 24 | static const String TABLE_NAME = "t_weather"; 25 | static const String cId = "city_id"; 26 | static const String cCity = "city"; 27 | static const String cLat = "lat"; 28 | static const String cLng = "lng"; 29 | static const String cInd = "ind"; 30 | } 31 | -------------------------------------------------------------------------------- /lib/sections/square/page/edit/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/catlist.dart'; 3 | import 'package:flutter_music/widgets/loading_wrap.dart'; 4 | 5 | class SquareEditState implements Cloneable { 6 | List? sections; 7 | LoadingState? loadingState; 8 | bool? editing; 9 | int? minCount; 10 | 11 | @override 12 | SquareEditState clone() { 13 | return SquareEditState() 14 | ..loadingState = loadingState 15 | ..sections = sections 16 | ..editing = editing 17 | ..minCount = minCount; 18 | } 19 | } 20 | 21 | SquareEditState initState(Map? args) { 22 | return SquareEditState() 23 | ..loadingState = LoadingState.isLoading 24 | ..sections = [] 25 | ..editing = false 26 | ..minCount = 6; 27 | } 28 | -------------------------------------------------------------------------------- /lib/sections/square/page/recommend/page.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/page/recommend/flow_adpater/adapter.dart'; 3 | 4 | import 'effect.dart'; 5 | import 'reducer.dart'; 6 | import 'state.dart'; 7 | import 'view.dart'; 8 | 9 | class SquareRecommendPage 10 | extends Page> { 11 | SquareRecommendPage() 12 | : super( 13 | initState: initState, 14 | effect: buildEffect(), 15 | reducer: buildReducer(), 16 | view: buildView, 17 | dependencies: Dependencies( 18 | adapter: NoneConn() + adapter, 19 | slots: >{}), 20 | middleware: >[], 21 | ); 22 | } 23 | -------------------------------------------------------------------------------- /lib/sections/village/models/category.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/models/common_model.dart'; 2 | 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | part 'category.g.dart'; 6 | 7 | @JsonSerializable() 8 | class VideoCategoryWrap extends CommonModel> { 9 | VideoCategoryWrap(); 10 | 11 | factory VideoCategoryWrap.fromJson(Map json) => 12 | _$VideoCategoryWrapFromJson(json); 13 | 14 | toJson() => _$VideoCategoryWrapToJson(this); 15 | } 16 | 17 | @JsonSerializable() 18 | class VideoCategoryItem { 19 | VideoCategoryItem(); 20 | 21 | int? id; 22 | String? name; 23 | String? relatedVideoType; 24 | bool? selectTab; 25 | 26 | factory VideoCategoryItem.fromJson(Map json) => 27 | _$VideoCategoryItemFromJson(json); 28 | 29 | toJson() => _$VideoCategoryItemToJson(this); 30 | } 31 | -------------------------------------------------------------------------------- /lib/sections/square/page/state.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/square/models/catlist.dart'; 3 | import 'package:flutter_music/widgets/loading_wrap.dart'; 4 | 5 | class PlaylistSquareState implements Cloneable { 6 | String? title; 7 | LoadingState? loadingState; 8 | List? items; 9 | List? normalList; 10 | 11 | @override 12 | PlaylistSquareState clone() { 13 | return PlaylistSquareState() 14 | ..title = title 15 | ..loadingState = loadingState 16 | ..items = items 17 | ..normalList = normalList; 18 | } 19 | } 20 | 21 | PlaylistSquareState initState(Map? args) { 22 | return PlaylistSquareState() 23 | ..title = "歌单广场" 24 | ..loadingState = LoadingState.isLoading 25 | ..normalList = ["推荐", "官方", "精品"]; 26 | } 27 | -------------------------------------------------------------------------------- /lib/sections/search/models/search_hot_topic.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'search_hot_topic.g.dart'; 4 | 5 | @JsonSerializable() 6 | class SearchHotTopicWrap { 7 | SearchHotTopicWrap(); 8 | 9 | int? code; 10 | List? hot; 11 | 12 | factory SearchHotTopicWrap.fromJson(Map json) => 13 | _$SearchHotTopicWrapFromJson(json); 14 | 15 | toJson() => _$SearchHotTopicWrapToJson(this); 16 | } 17 | 18 | @JsonSerializable() 19 | class SearchHotTopicItem { 20 | SearchHotTopicItem(); 21 | 22 | String? title; 23 | List? text; 24 | int? actId; 25 | int? participateCount; 26 | String? sharePicUrl; 27 | 28 | factory SearchHotTopicItem.fromJson(Map json) => 29 | _$SearchHotTopicItemFromJson(json); 30 | 31 | toJson() => _$SearchHotTopicItemToJson(this); 32 | } 33 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/history/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/widgets/loading_wrap.dart'; 3 | 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Reducer? buildReducer() { 8 | return asReducer( 9 | >{ 10 | SearchHistoryAction.action: _onAction, 11 | SearchHistoryAction.didFetchData: _didFetchData, 12 | }, 13 | ); 14 | } 15 | 16 | SearchHistoryState _didFetchData(SearchHistoryState state, Action action) { 17 | // print(">>>>>>>>>>走了成功了"); 18 | final SearchHistoryState newState = state.clone(); 19 | newState.logs = action.payload; 20 | return newState; 21 | } 22 | 23 | SearchHistoryState _onAction(SearchHistoryState state, Action action) { 24 | final SearchHistoryState newState = state.clone(); 25 | return newState; 26 | } 27 | -------------------------------------------------------------------------------- /lib/sections/video/models/info.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | part 'info.g.dart'; 4 | 5 | @JsonSerializable() 6 | class VideoDetailInfoWrap { 7 | VideoDetailInfoWrap(); 8 | 9 | int? code; 10 | int? likedCount; 11 | int? shareCount; 12 | int? commentCount; 13 | bool? liked; 14 | 15 | factory VideoDetailInfoWrap.fromJson(Map json) => 16 | _$VideoDetailInfoWrapFromJson(json); 17 | 18 | toJson() => _$VideoDetailInfoWrapToJson(this); 19 | } 20 | 21 | @JsonSerializable() 22 | class VideoUrlItem { 23 | VideoUrlItem(); 24 | 25 | String? id; 26 | String? url; 27 | int? size; 28 | int? validityTime; 29 | bool? needPay; 30 | double? r; 31 | 32 | factory VideoUrlItem.fromJson(Map json) => 33 | _$VideoUrlItemFromJson(json); 34 | 35 | toJson() => _$VideoUrlItemToJson(this); 36 | } 37 | -------------------------------------------------------------------------------- /assets/json/search_multimatch.json: -------------------------------------------------------------------------------- 1 | {"result":{"artist":[{"name":"队长","id":1143033,"picId":109951164546544260,"img1v1Id":109951167573473140,"briefDesc":"","picUrl":"https://p2.music.126.net/CsGY6JmX21cxa-5DZKIqpQ==/109951164546544248.jpg","img1v1Url":"https://p2.music.126.net/i602BtKvl61sUsTY5tqnnA==/109951167573473133.jpg","albumSize":44,"alias":["杨浪,youngcaptain"],"trans":"","musicSize":99,"picId_str":"109951164546544248","img1v1Id_str":"109951167573473133","transNames":null,"mvSize":17,"alg":"alg_search_precision_bestmatch_normal_song_typing_{\"needChange\":true,\"ctrUv\":0.027567,\"impressUv30d\":933789,\"strategy\":\"normal\"}","fansSize":3264677,"videoSize":0,"officialTags":[],"searchCircle":{"id":"01023F5F4016D17FD49D2762957E0B70A38B","entranceText":"来逛逛TA的话题圈","entranceUrl":"orpheus://nm/circle/mainPage?circleId=01023F5F4016D17FD49D2762957E0B70A38B"},"occupation":"歌手"}],"orders":["artist"]},"code":200} -------------------------------------------------------------------------------- /lib/sections/webview/page/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'action.dart'; 3 | import 'state.dart'; 4 | 5 | Effect? buildEffect() { 6 | return combineEffects(>{ 7 | CustomWebViewAction.action: _onAction, 8 | CustomWebViewAction.onProgress: _onProgress, 9 | CustomWebViewAction.onPageFinished: _onPageFinished 10 | }); 11 | } 12 | 13 | void _onProgress(Action action, Context ctx) { 14 | final int progress = action.payload; 15 | 16 | ctx.dispatch(CustomWebViewActionCreator.didProgressAction(progress)); 17 | } 18 | 19 | void _onPageFinished(Action action, Context ctx) { 20 | ctx.dispatch( 21 | CustomWebViewActionCreator.didPageFinishedAction(action.payload)); 22 | } 23 | 24 | void _onAction(Action action, Context ctx) {} 25 | -------------------------------------------------------------------------------- /lib/sections/music/page/recommend_list/reducer.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/widgets/loading_wrap.dart'; 3 | 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Reducer? buildReducer() { 8 | return asReducer( 9 | >{ 10 | RecommendListAction.action: _onAction, 11 | RecommendListAction.didFetchData: _didFetchData, 12 | }, 13 | ); 14 | } 15 | 16 | RecommendListState _didFetchData(RecommendListState state, Action action) { 17 | final RecommendListState newState = state.clone(); 18 | newState.loadingState = LoadingState.success; 19 | newState.wrap = action.payload; 20 | return newState; 21 | } 22 | 23 | RecommendListState _onAction(RecommendListState state, Action action) { 24 | final RecommendListState newState = state.clone(); 25 | return newState; 26 | } 27 | -------------------------------------------------------------------------------- /lib/sections/search/models/search_hot.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/models/common_model.dart'; 2 | 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | part 'search_hot.g.dart'; 6 | 7 | @JsonSerializable() 8 | class SearchHotWrap extends CommonModel> { 9 | SearchHotWrap(); 10 | 11 | factory SearchHotWrap.fromJson(Map json) => 12 | _$SearchHotWrapFromJson(json); 13 | 14 | toJson() => _$SearchHotWrapToJson(this); 15 | } 16 | 17 | @JsonSerializable() 18 | class SearchHotDataItem { 19 | SearchHotDataItem(); 20 | 21 | String? searchWord; 22 | String? content; 23 | int? score; 24 | String? iconUrl; 25 | int? source; 26 | int? iconType; 27 | 28 | factory SearchHotDataItem.fromJson(Map json) => 29 | _$SearchHotDataItemFromJson(json); 30 | 31 | toJson() => _$SearchHotDataItemToJson(this); 32 | } 33 | -------------------------------------------------------------------------------- /ios/Flutter/AppFrameworkInfo.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 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 | 9.0 25 | 26 | 27 | -------------------------------------------------------------------------------- /lib/sections/podcast/models/banner.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/models/common_model.dart'; 2 | 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | part 'banner.g.dart'; 6 | 7 | @JsonSerializable() 8 | class PodcastBannerWrap extends CommonModel> { 9 | PodcastBannerWrap(); 10 | 11 | factory PodcastBannerWrap.fromJson(Map json) => 12 | _$PodcastBannerWrapFromJson(json); 13 | 14 | toJson() => _$PodcastBannerWrapToJson(this); 15 | } 16 | 17 | @JsonSerializable() 18 | class PodcastBannerItem { 19 | PodcastBannerItem(); 20 | 21 | int? targetId; 22 | int? targetType; 23 | String? pic; 24 | String? url; 25 | String? typeTitle; 26 | bool? exclusive; 27 | 28 | factory PodcastBannerItem.fromJson(Map json) => 29 | _$PodcastBannerItemFromJson(json); 30 | 31 | toJson() => _$PodcastBannerItemToJson(this); 32 | } 33 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/history/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/models/db/db_model.dart'; 3 | 4 | enum SearchHistoryAction { action, onRefresh,onTapItem,onClean,didFetchData } 5 | 6 | class SearchHistoryActionCreator { 7 | static Action onAction() { 8 | return const Action(SearchHistoryAction.action); 9 | } 10 | 11 | static Action onRefreshAction() { 12 | return const Action(SearchHistoryAction.onRefresh); 13 | } 14 | 15 | static Action onCleanAction() { 16 | return const Action(SearchHistoryAction.onClean); 17 | } 18 | 19 | static Action onTapItemAction(UserSearchLog searchLog) { 20 | return Action(SearchHistoryAction.onTapItem,payload: searchLog); 21 | } 22 | 23 | static Action didFetchDataAction(List logs) { 24 | return Action(SearchHistoryAction.didFetchData, payload: logs); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/sections/webview/page/action.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | 3 | enum CustomWebViewAction { 4 | action, 5 | onProgress, 6 | onPageFinished, 7 | didProgress, 8 | didPageFinished 9 | } 10 | 11 | class CustomWebViewActionCreator { 12 | static Action onAction() { 13 | return const Action(CustomWebViewAction.action); 14 | } 15 | 16 | static Action onPageFinishedAction(String url) { 17 | return Action(CustomWebViewAction.onPageFinished, payload: url); 18 | } 19 | 20 | static Action onProgressAction(int progress) { 21 | return Action(CustomWebViewAction.onProgress, payload: progress); 22 | } 23 | 24 | static Action didProgressAction(int progress) { 25 | return Action(CustomWebViewAction.didProgress, payload: progress); 26 | } 27 | 28 | static Action didPageFinishedAction(String url) { 29 | return Action(CustomWebViewAction.didPageFinished, payload: url); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/widgets/webview.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:webview_flutter/webview_flutter.dart'; 3 | 4 | class WebViewWidget extends StatefulWidget { 5 | final String? url; 6 | final PageLoadingCallback? onProgress; 7 | final PageFinishedCallback? onPageFinished; 8 | 9 | WebViewWidget({this.url, this.onProgress, this.onPageFinished}); 10 | 11 | @override 12 | _WebViewWidgetState createState() => _WebViewWidgetState(); 13 | } 14 | 15 | class _WebViewWidgetState extends State { 16 | @override 17 | void initState() { 18 | super.initState(); 19 | // Enable virtual display. 20 | } 21 | 22 | @override 23 | Widget build(BuildContext context) { 24 | return WebView( 25 | initialUrl: widget.url, 26 | onProgress: widget.onProgress, 27 | javascriptMode: JavascriptMode.unrestricted, 28 | onPageFinished: widget.onPageFinished, 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/widgets/clipper/bottom_clipper.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class BottonClipper extends CustomClipper { 4 | @override 5 | Path getClip(Size size) { 6 | // 路径 7 | var path = Path(); 8 | // 设置路径的开始点 9 | path.lineTo(0, size.height); 10 | path.lineTo(0, 0); 11 | 12 | // 设置曲线的开始样式 13 | var firstControlPoint = Offset(size.width / 2, size.height - 50); 14 | // 设置曲线的结束样式 15 | var firstEndPont = Offset(size.width, 0); 16 | // 把设置的曲线添加到路径里面 17 | path.quadraticBezierTo(firstControlPoint.dx, firstControlPoint.dy, 18 | firstEndPont.dx, firstEndPont.dy); 19 | 20 | // 设置路径的结束点 21 | path.lineTo(size.width, 0); 22 | path.lineTo(size.width, size.height); 23 | path.lineTo(0, size.height); 24 | 25 | // 返回路径 26 | return path; 27 | } 28 | 29 | @override 30 | bool shouldReclip(CustomClipper oldClipper) { 31 | return false; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/sections/search/page/search/recommend/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/sections/search/models/search_recommend.dart'; 3 | import 'package:flutter_music/sections/search/page/search/action.dart'; 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Effect? buildEffect() { 8 | return combineEffects(>{ 9 | SearchRecommendAction.action: _onAction, 10 | Lifecycle.initState: _initState, 11 | SearchRecommendAction.onTapItem: _onTapItem, 12 | }); 13 | } 14 | 15 | void _initState(Action action, Context ctx) async {} 16 | 17 | void _onTapItem(Action action, Context ctx) { 18 | final SearchRecommendHotsItem item = action.payload; 19 | ctx.dispatch(SearchActionCreator.onTapSearchAction(item.first)); 20 | } 21 | 22 | void _onAction(Action action, Context ctx) {} 23 | -------------------------------------------------------------------------------- /lib/widgets/child/nav_add.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class NavAddWidget extends StatelessWidget { 4 | final VoidCallback? callback; 5 | 6 | NavAddWidget({this.callback}); 7 | 8 | @override 9 | Widget build(BuildContext context) { 10 | return GestureDetector( 11 | onTap: () { 12 | if (callback != null) { 13 | callback!(); 14 | } 15 | }, 16 | child: UnconstrainedBox( 17 | child: Container( 18 | width: 44, 19 | height: 44, 20 | child: Container( 21 | margin: EdgeInsets.all(8), 22 | decoration: const BoxDecoration( 23 | color: Colors.red, 24 | borderRadius: BorderRadius.all(Radius.circular(22))), 25 | child: const Icon( 26 | Icons.add, 27 | color: Colors.white, 28 | )), 29 | ), 30 | ), 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/sections/search/models/singer_category.g.dart: -------------------------------------------------------------------------------- 1 | // GENERATED CODE - DO NOT MODIFY BY HAND 2 | 3 | part of 'singer_category.dart'; 4 | 5 | // ************************************************************************** 6 | // JsonSerializableGenerator 7 | // ************************************************************************** 8 | 9 | SearchSingerCategoryWrap _$SearchSingerCategoryWrapFromJson(Map json) => 10 | SearchSingerCategoryWrap() 11 | ..more = json['more'] as bool? 12 | ..artists = (json['artists'] as List?) 13 | ?.map( 14 | (e) => ArtistsItem.fromJson(Map.from(e as Map))) 15 | .toList() 16 | ..code = json['code'] as int?; 17 | 18 | Map _$SearchSingerCategoryWrapToJson( 19 | SearchSingerCategoryWrap instance) => 20 | { 21 | 'more': instance.more, 22 | 'artists': instance.artists, 23 | 'code': instance.code, 24 | }; 25 | -------------------------------------------------------------------------------- /lib/widgets/sliver/sliver_header.dart: -------------------------------------------------------------------------------- 1 | import 'dart:math'; 2 | 3 | import 'package:flutter/material.dart'; 4 | 5 | class SliverAppBarDelegate extends SliverPersistentHeaderDelegate { 6 | SliverAppBarDelegate({ 7 | @required this.minHeight, 8 | @required this.maxHeight, 9 | @required this.child, 10 | }); 11 | 12 | final double? minHeight; 13 | final double? maxHeight; 14 | final Widget? child; 15 | 16 | @override 17 | double get minExtent => minHeight!; 18 | 19 | @override 20 | double get maxExtent => max(maxHeight!, minHeight!); 21 | 22 | @override 23 | Widget build( 24 | BuildContext context, double shrinkOffset, bool overlapsContent) { 25 | return new SizedBox.expand(child: child); 26 | } 27 | 28 | @override 29 | bool shouldRebuild(SliverAppBarDelegate oldDelegate) { 30 | return maxHeight != oldDelegate.maxHeight || 31 | minHeight != oldDelegate.minHeight || 32 | child != oldDelegate.child; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /lib/sections/search/models/search_default.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter_music/models/common_model.dart'; 2 | 3 | import 'package:json_annotation/json_annotation.dart'; 4 | 5 | part 'search_default.g.dart'; 6 | 7 | @JsonSerializable() 8 | class SearchDefaultWrap extends CommonModel { 9 | SearchDefaultWrap(); 10 | 11 | factory SearchDefaultWrap.fromJson(Map json) => 12 | _$SearchDefaultWrapFromJson(json); 13 | 14 | toJson() => _$SearchDefaultWrapToJson(this); 15 | } 16 | 17 | @JsonSerializable() 18 | class SearchDefaultData { 19 | SearchDefaultData(); 20 | 21 | String? showKeyword; 22 | String? realkeyword; 23 | int? searchType; 24 | 25 | factory SearchDefaultData.fromJson(Map json) => 26 | _$SearchDefaultDataFromJson(json); 27 | 28 | toJson() => _$SearchDefaultDataToJson(this); 29 | } 30 | 31 | class SearchTopModel { 32 | SearchTopModel(); 33 | 34 | String? imageNamed; 35 | String? text; 36 | } 37 | -------------------------------------------------------------------------------- /lib/widgets/child/praised_widget.dart: -------------------------------------------------------------------------------- 1 | import 'dart:ui'; 2 | 3 | import 'package:flutter/material.dart'; 4 | import 'package:flutter_music/res/colors.dart'; 5 | import 'package:flutter_music/res/other_theme.dart'; 6 | 7 | class PraisedWidget extends StatefulWidget { 8 | final int? count; 9 | 10 | PraisedWidget({this.count = 0}); 11 | 12 | @override 13 | _PraisedWidgetState createState() => _PraisedWidgetState(); 14 | } 15 | 16 | class _PraisedWidgetState extends State { 17 | @override 18 | Widget build(BuildContext context) { 19 | return Row( 20 | children: [ 21 | Image.asset("assets/images/cm2_act_icn_praise~iphone.png"), 22 | Padding( 23 | padding: EdgeInsets.only(left: 3), 24 | child: Text( 25 | "${widget.count}", 26 | style: GpOtherTheme.size12(context)! 27 | .copyWith(color: CommonColors.textColor999), 28 | ), 29 | ) 30 | ], 31 | ); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /lib/models/simple_model.dart: -------------------------------------------------------------------------------- 1 | import 'package:json_annotation/json_annotation.dart'; 2 | 3 | import 'common_model.dart'; 4 | 5 | part 'simple_model.g.dart'; 6 | 7 | @JsonSerializable() 8 | class SimpleModel extends CommonModel { 9 | SimpleModel(); 10 | 11 | factory SimpleModel.fromJson(Map json) => 12 | _$SimpleModelFromJson(json); 13 | 14 | toJson() => _$SimpleModelToJson(this); 15 | } 16 | 17 | @JsonSerializable() 18 | class IntSimpleModel extends CommonModel { 19 | IntSimpleModel(); 20 | 21 | factory IntSimpleModel.fromJson(Map json) => 22 | _$IntSimpleModelFromJson(json); 23 | 24 | toJson() => _$IntSimpleModelToJson(this); 25 | } 26 | 27 | @JsonSerializable() 28 | class StringSimpleModel extends CommonModel { 29 | StringSimpleModel(); 30 | 31 | factory StringSimpleModel.fromJson(Map json) => 32 | _$StringSimpleModelFromJson(json); 33 | 34 | toJson() => _$StringSimpleModelToJson(this); 35 | } 36 | -------------------------------------------------------------------------------- /lib/sections/square/page/recommend/view.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:flutter_music/res/colors.dart'; 4 | import 'package:flutter_music/widgets/loading_wrap.dart'; 5 | 6 | import 'action.dart'; 7 | import 'state.dart'; 8 | 9 | Widget buildView( 10 | SquareRecommendState state, Dispatch dispatch, ViewService viewService) { 11 | ListAdapter? adapter = viewService.buildAdapter(); 12 | return LoadingWrap( 13 | loadingState: state.loadingState, 14 | successChild: Builder( 15 | builder: (context) { 16 | return Container( 17 | color: CommonColors.backgroundColor, 18 | child: ListView.builder( 19 | padding: EdgeInsets.only(top: 0, bottom: 20), 20 | physics: AlwaysScrollableScrollPhysics(), 21 | itemCount: adapter!.itemCount, 22 | itemBuilder: adapter.itemBuilder!, 23 | ), 24 | ); 25 | }, 26 | ), 27 | ); 28 | } 29 | -------------------------------------------------------------------------------- /lib/sections/square/page/recommend/effect.dart: -------------------------------------------------------------------------------- 1 | import 'package:fish_redux/fish_redux.dart'; 2 | import 'package:flutter_music/repository/services/common_service.dart'; 3 | import 'package:flutter_music/sections/square/models/recommend.dart'; 4 | import 'action.dart'; 5 | import 'state.dart'; 6 | 7 | Effect? buildEffect() { 8 | return combineEffects(>{ 9 | SquareRecommendAction.action: _onAction, 10 | Lifecycle.initState: _initState, 11 | }); 12 | } 13 | 14 | void _initState(Action action, Context ctx) async { 15 | SquareEveryDayRecommendWrap everyDayRecommendWrap = 16 | await CommonService.getRecommendResource(); 17 | 18 | SquareRecommendWrap recommendWrap = 19 | await CommonService.getRecommendPersonalized(); 20 | 21 | ctx.dispatch(SquareRecommendActionCreator.didFetchDataAction( 22 | everyDayRecommendWrap, recommendWrap)); 23 | } 24 | 25 | void _onAction(Action action, Context ctx) {} 26 | --------------------------------------------------------------------------------