├── .github
├── ISSUE_TEMPLATE
│ ├── bug-反馈.md
│ └── 功能请求.md
└── workflows
│ ├── CI.yml
│ └── main.yml
├── .gitignore
├── .metadata
├── .vscode
├── launch.json
└── settings.json
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android
├── .gitignore
├── app
│ ├── build.gradle
│ └── src
│ │ ├── debug
│ │ └── AndroidManifest.xml
│ │ ├── main
│ │ ├── AndroidManifest.xml
│ │ ├── ic_launcher-playstore.png
│ │ ├── kotlin
│ │ │ └── com
│ │ │ │ └── guozhigq
│ │ │ │ └── pilipala
│ │ │ │ └── MainActivity.kt
│ │ └── res
│ │ │ ├── drawable-anydpi-v24
│ │ │ └── ic_notification_icon.xml
│ │ │ ├── drawable-hdpi
│ │ │ └── ic_notification_icon.png
│ │ │ ├── drawable-mdpi
│ │ │ └── ic_notification_icon.png
│ │ │ ├── drawable-xhdpi
│ │ │ └── ic_notification_icon.png
│ │ │ ├── drawable-xxhdpi
│ │ │ └── ic_notification_icon.png
│ │ │ ├── drawable
│ │ │ ├── ic_baseline_forward_10_24.xml
│ │ │ ├── ic_baseline_replay_10_24.xml
│ │ │ ├── ic_launcher_background.xml
│ │ │ ├── ic_launcher_foreground.xml
│ │ │ ├── ic_notification_icon.xml
│ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26
│ │ │ ├── ic_launcher.xml
│ │ │ └── ic_launcher_round.xml
│ │ │ ├── mipmap-hdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-mdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── mipmap-xxxhdpi
│ │ │ ├── ic_launcher.png
│ │ │ └── ic_launcher_round.png
│ │ │ ├── raw
│ │ │ └── keep.xml
│ │ │ ├── values-night
│ │ │ └── styles.xml
│ │ │ └── values
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ └── profile
│ │ └── AndroidManifest.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ └── gradle-wrapper.properties
└── settings.gradle
├── assets
├── fonts
│ ├── Jura-Bold.ttf
│ └── fansCard.ttf
├── images
│ ├── ai.png
│ ├── big-vip.png
│ ├── dm.svg
│ ├── dm_gray.png
│ ├── dm_white.png
│ ├── error.svg
│ ├── live.gif
│ ├── live.png
│ ├── live
│ │ └── default_bg.webp
│ ├── loading.gif
│ ├── loading.png
│ ├── logo
│ │ ├── logo_android.png
│ │ ├── logo_android_2.png
│ │ └── logo_ios.png
│ ├── lv
│ │ ├── lv0.png
│ │ ├── lv1.png
│ │ ├── lv2.png
│ │ ├── lv3.png
│ │ ├── lv4.png
│ │ ├── lv5.png
│ │ └── lv6.png
│ ├── noface.jpeg
│ ├── play.png
│ ├── play.svg
│ ├── run-pokemon.gif
│ ├── tv.svg
│ ├── up.svg
│ ├── up_gray.png
│ ├── view.svg
│ ├── view_gray.png
│ └── view_white.png
└── screenshots
│ ├── 174shots_so.png
│ ├── 510shots_so.png
│ ├── 850shots_so.png
│ ├── bangumi.png
│ ├── bangumi_detail.png
│ ├── dynamic.png
│ ├── home.png
│ ├── main_screen.png
│ ├── media.png
│ ├── member.png
│ ├── search.png
│ └── set.png
├── change_log
├── 1.0.0.0817.md
├── 1.0.1.0817.md
├── 1.0.10.1016.md
├── 1.0.11.1112.md
├── 1.0.12.1114.md
├── 1.0.13.1217.md
├── 1.0.14.1225.md
├── 1.0.15.0101.md
├── 1.0.16.0102.md
├── 1.0.17.0125.md
├── 1.0.18.0130.md
├── 1.0.19.0131.md
├── 1.0.2.0819.md
├── 1.0.3.0821.md
├── 1.0.4.0822.md
├── 1.0.5.0826.md
├── 1.0.6.0902.md
├── 1.0.7.0908.md
├── 1.0.8.0917.md
└── 1.0.9.1015.md
├── fastlane
└── metadata
│ └── android
│ ├── en-US
│ ├── full_description.txt
│ ├── images
│ │ ├── featureGraphic.png
│ │ ├── icon.png
│ │ └── phoneScreenshots
│ │ │ ├── 1.png
│ │ │ ├── 2.png
│ │ │ └── 3.png
│ ├── short_description.txt
│ └── title.txt
│ └── zh-CN
│ ├── changelogs
│ └── 2001.txt
│ ├── full_description.txt
│ ├── images
│ ├── featureGraphic.png
│ ├── icon.png
│ └── phoneScreenshots
│ │ ├── 1.png
│ │ ├── 2.png
│ │ └── 3.png
│ ├── short_description.txt
│ └── title.txt
├── ios
├── .gitignore
├── Flutter
│ ├── AppFrameworkInfo.plist
│ ├── Debug.xcconfig
│ └── Release.xcconfig
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ ├── contents.xcworkspacedata
│ │ └── xcshareddata
│ │ │ ├── IDEWorkspaceChecks.plist
│ │ │ └── WorkspaceSettings.xcsettings
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── 100.png
│ │ ├── 1024.png
│ │ ├── 114.png
│ │ ├── 120.png
│ │ ├── 144.png
│ │ ├── 152.png
│ │ ├── 167.png
│ │ ├── 180.png
│ │ ├── 20.png
│ │ ├── 29.png
│ │ ├── 40.png
│ │ ├── 50.png
│ │ ├── 57.png
│ │ ├── 58.png
│ │ ├── 60.png
│ │ ├── 72.png
│ │ ├── 76.png
│ │ ├── 80.png
│ │ ├── 87.png
│ │ └── Contents.json
│ └── LaunchImage.imageset
│ │ ├── Contents.json
│ │ ├── LaunchImage.png
│ │ ├── LaunchImage@2x.png
│ │ ├── LaunchImage@3x.png
│ │ └── README.md
│ ├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
│ ├── Info.plist
│ └── Runner-Bridging-Header.h
├── lib
├── common
│ ├── constants.dart
│ ├── skeleton
│ │ ├── dynamic_card.dart
│ │ ├── media_bangumi.dart
│ │ ├── skeleton.dart
│ │ ├── video_card_h.dart
│ │ ├── video_card_v.dart
│ │ └── video_reply.dart
│ └── widgets
│ │ ├── animated_dialog.dart
│ │ ├── app_expansion_panel_list.dart
│ │ ├── appbar.dart
│ │ ├── badge.dart
│ │ ├── content_container.dart
│ │ ├── custom_toast.dart
│ │ ├── html_render.dart
│ │ ├── http_error.dart
│ │ ├── live_card.dart
│ │ ├── network_img_layer.dart
│ │ ├── no_data.dart
│ │ ├── overlay_pop.dart
│ │ ├── pull_to_refresh_header.dart
│ │ ├── sliver_header.dart
│ │ ├── stat
│ │ ├── danmu.dart
│ │ └── view.dart
│ │ ├── video_card_h.dart
│ │ ├── video_card_v.dart
│ │ └── video_popup_menu.dart
├── http
│ ├── api.dart
│ ├── bangumi.dart
│ ├── black.dart
│ ├── common.dart
│ ├── constants.dart
│ ├── danmaku.dart
│ ├── dynamics.dart
│ ├── fan.dart
│ ├── follow.dart
│ ├── html.dart
│ ├── index.dart
│ ├── init.dart
│ ├── interceptor.dart
│ ├── interceptor_anonymity.dart
│ ├── live.dart
│ ├── login.dart
│ ├── member.dart
│ ├── msg.dart
│ ├── reply.dart
│ ├── search.dart
│ ├── user.dart
│ └── video.dart
├── main.dart
├── models
│ ├── bangumi
│ │ ├── info.dart
│ │ └── list.dart
│ ├── common
│ │ ├── business_type.dart
│ │ ├── color_type.dart
│ │ ├── dynamic_badge_mode.dart
│ │ ├── dynamics_type.dart
│ │ ├── rcmd_type.dart
│ │ ├── reply_sort_type.dart
│ │ ├── reply_type.dart
│ │ ├── search_type.dart
│ │ ├── tab_type.dart
│ │ └── theme_type.dart
│ ├── danmaku
│ │ ├── dm.pb.dart
│ │ ├── dm.pbenum.dart
│ │ ├── dm.pbjson.dart
│ │ ├── dm.pbserver.dart
│ │ └── dm.proto
│ ├── dynamics
│ │ ├── result.dart
│ │ └── up.dart
│ ├── fans
│ │ └── result.dart
│ ├── follow
│ │ └── result.dart
│ ├── github
│ │ └── latest.dart
│ ├── home
│ │ └── rcmd
│ │ │ └── result.dart
│ ├── live
│ │ ├── item.dart
│ │ ├── room_info.dart
│ │ └── room_info_h5.dart
│ ├── login
│ │ └── index.dart
│ ├── member
│ │ ├── archive.dart
│ │ ├── coin.dart
│ │ ├── info.dart
│ │ ├── seasons.dart
│ │ └── tags.dart
│ ├── model_hot_video_item.dart
│ ├── model_owner.dart
│ ├── model_owner.g.dart
│ ├── model_rec_video_item.dart
│ ├── model_rec_video_item.g.dart
│ ├── msg
│ │ ├── account.dart
│ │ ├── msgfeed_at_me.dart
│ │ ├── msgfeed_like_me.dart
│ │ ├── msgfeed_reply_me.dart
│ │ ├── msgfeed_unread.dart
│ │ └── session.dart
│ ├── search
│ │ ├── hot.dart
│ │ ├── hot.g.dart
│ │ ├── result.dart
│ │ └── suggest.dart
│ ├── user
│ │ ├── black.dart
│ │ ├── fav_detail.dart
│ │ ├── fav_folder.dart
│ │ ├── history.dart
│ │ ├── info.dart
│ │ ├── info.g.dart
│ │ ├── stat.dart
│ │ └── stat.g.dart
│ ├── video
│ │ ├── ai.dart
│ │ ├── play
│ │ │ ├── quality.dart
│ │ │ └── url.dart
│ │ └── reply
│ │ │ ├── config.dart
│ │ │ ├── content.dart
│ │ │ ├── data.dart
│ │ │ ├── item.dart
│ │ │ ├── member.dart
│ │ │ ├── page.dart
│ │ │ ├── top_replies.dart
│ │ │ └── upper.dart
│ └── video_detail_res.dart
├── pages
│ ├── about
│ │ └── index.dart
│ ├── bangumi
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── introduction
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ ├── view.dart
│ │ │ └── widgets
│ │ │ │ └── intro_detail.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ ├── bangumi_panel.dart
│ │ │ └── bangumu_card_v.dart
│ ├── blacklist
│ │ └── index.dart
│ ├── danmaku
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── dynamics
│ │ ├── controller.dart
│ │ ├── detail
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ └── view.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ ├── action_panel.dart
│ │ │ ├── additional_panel.dart
│ │ │ ├── article_panel.dart
│ │ │ ├── author_panel.dart
│ │ │ ├── content_panel.dart
│ │ │ ├── dynamic_panel.dart
│ │ │ ├── forward_panel.dart
│ │ │ ├── live_panel.dart
│ │ │ ├── live_rcmd_panel.dart
│ │ │ ├── pic_panel.dart
│ │ │ ├── rich_node_panel.dart
│ │ │ ├── up_panel.dart
│ │ │ └── video_panel.dart
│ ├── fan
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── fan_item.dart
│ ├── fav
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── item.dart
│ ├── fav_detail
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widget
│ │ │ └── fav_video_card.dart
│ ├── fav_search
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── follow
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ ├── follow_item.dart
│ │ │ ├── follow_list.dart
│ │ │ └── owner_follow_list.dart
│ ├── follow_search
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── history
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── item.dart
│ ├── history_search
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── home
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── app_bar.dart
│ ├── hot
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── html
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── later
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── live
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── live_item.dart
│ ├── live_room
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── bottom_control.dart
│ ├── login
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── main
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── media
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── member
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ ├── conis.dart
│ │ │ ├── profile.dart
│ │ │ └── seasons.dart
│ ├── member_archive
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── member_coin
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── item.dart
│ ├── member_dynamics
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── member_like
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── member_search
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── member_seasons
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ └── item.dart
│ ├── mine
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── msg_feed_top
│ │ ├── at_me
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ └── view.dart
│ │ ├── like_me
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ └── view.dart
│ │ └── reply_me
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ └── view.dart
│ ├── preview
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── rcmd
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── search
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ ├── hot_keyword.dart
│ │ │ └── search_text.dart
│ ├── search_panel
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ ├── article_panel.dart
│ │ │ ├── live_panel.dart
│ │ │ ├── media_bangumi_panel.dart
│ │ │ ├── user_panel.dart
│ │ │ └── video_panel.dart
│ ├── search_result
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── setting
│ │ ├── controller.dart
│ │ ├── extra_setting.dart
│ │ ├── hidden_settings.dart
│ │ ├── index.dart
│ │ ├── pages
│ │ │ ├── color_select.dart
│ │ │ ├── display_mode.dart
│ │ │ ├── font_size_select.dart
│ │ │ ├── home_tabbar_set.dart
│ │ │ ├── logs.dart
│ │ │ └── play_speed_set.dart
│ │ ├── play_setting.dart
│ │ ├── privacy_setting.dart
│ │ ├── recommend_setting.dart
│ │ ├── style_setting.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ │ ├── select_dialog.dart
│ │ │ ├── select_item.dart
│ │ │ ├── slide_dialog.dart
│ │ │ └── switch_item.dart
│ ├── video
│ │ ├── README.md
│ │ └── detail
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ ├── introduction
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ ├── view.dart
│ │ │ └── widgets
│ │ │ │ ├── action_item.dart
│ │ │ │ ├── action_row_item.dart
│ │ │ │ ├── fav_panel.dart
│ │ │ │ ├── group_panel.dart
│ │ │ │ ├── intro_detail.dart
│ │ │ │ ├── menu_row.dart
│ │ │ │ ├── page.dart
│ │ │ │ └── season.dart
│ │ │ ├── related
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ └── view.dart
│ │ │ ├── reply
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ ├── view.dart
│ │ │ └── widgets
│ │ │ │ ├── reply_item.dart
│ │ │ │ └── zan.dart
│ │ │ ├── reply_new
│ │ │ ├── index.dart
│ │ │ └── view.dart
│ │ │ ├── reply_reply
│ │ │ ├── controller.dart
│ │ │ ├── index.dart
│ │ │ └── view.dart
│ │ │ ├── view.dart
│ │ │ └── widgets
│ │ │ ├── ai_detail.dart
│ │ │ ├── app_bar.dart
│ │ │ ├── expandable_section.dart
│ │ │ └── header_control.dart
│ ├── webview
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ ├── whisper
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ └── view.dart
│ └── whisper_detail
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── view.dart
│ │ └── widget
│ │ └── chat_item.dart
├── plugin
│ └── pl_player
│ │ ├── controller.dart
│ │ ├── index.dart
│ │ ├── models
│ │ ├── bottom_progress_behavior.dart
│ │ ├── data_source.dart
│ │ ├── data_status.dart
│ │ ├── duration.dart
│ │ ├── fullscreen_mode.dart
│ │ ├── play_repeat.dart
│ │ ├── play_speed.dart
│ │ └── play_status.dart
│ │ ├── utils.dart
│ │ ├── utils
│ │ └── fullscreen.dart
│ │ ├── view.dart
│ │ └── widgets
│ │ ├── app_bar_ani.dart
│ │ ├── backward_seek.dart
│ │ ├── bottom_control.dart
│ │ ├── common_btn.dart
│ │ ├── forward_seek.dart
│ │ └── play_pause_btn.dart
├── router
│ └── app_pages.dart
├── scripts
│ └── build.sh
├── services
│ ├── audio_handler.dart
│ ├── audio_session.dart
│ ├── loggeer.dart
│ ├── service_locator.dart
│ └── shutdown_timer_service.dart
└── utils
│ ├── app_scheme.dart
│ ├── cache_manage.dart
│ ├── cookie.dart
│ ├── danmaku.dart
│ ├── data.dart
│ ├── download.dart
│ ├── em.dart
│ ├── event_bus.dart
│ ├── extension.dart
│ ├── feed_back.dart
│ ├── grid.dart
│ ├── id_utils.dart
│ ├── login.dart
│ ├── proxy.dart
│ ├── recommend_filter.dart
│ ├── storage.dart
│ ├── url_utils.dart
│ ├── utils.dart
│ ├── video_utils.dart
│ └── wbi_sign.dart
├── linux
├── .gitignore
├── CMakeLists.txt
├── flutter
│ └── CMakeLists.txt
├── main.cc
├── my_application.cc
└── my_application.h
├── macos
├── .gitignore
├── Flutter
│ ├── Flutter-Debug.xcconfig
│ └── Flutter-Release.xcconfig
├── Podfile
├── Podfile.lock
├── Runner.xcodeproj
│ ├── project.pbxproj
│ ├── project.xcworkspace
│ │ └── xcshareddata
│ │ │ └── IDEWorkspaceChecks.plist
│ └── xcshareddata
│ │ └── xcschemes
│ │ └── Runner.xcscheme
├── Runner.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── Runner
│ ├── AppDelegate.swift
│ ├── Assets.xcassets
│ └── AppIcon.appiconset
│ │ ├── 1024.png
│ │ ├── 128.png
│ │ ├── 16.png
│ │ ├── 256.png
│ │ ├── 32.png
│ │ ├── 512.png
│ │ ├── 64.png
│ │ └── Contents.json
│ ├── Base.lproj
│ └── MainMenu.xib
│ ├── Configs
│ ├── AppInfo.xcconfig
│ ├── Debug.xcconfig
│ ├── Release.xcconfig
│ └── Warnings.xcconfig
│ ├── DebugProfile.entitlements
│ ├── Info.plist
│ ├── MainFlutterWindow.swift
│ └── Release.entitlements
├── pubspec.lock
├── pubspec.yaml
├── test
└── widget_test.dart
├── web
├── favicon.png
├── icons
│ ├── Icon-192.png
│ ├── Icon-512.png
│ ├── Icon-maskable-192.png
│ └── Icon-maskable-512.png
├── index.html
└── manifest.json
└── windows
├── .gitignore
├── CMakeLists.txt
├── flutter
└── CMakeLists.txt
└── runner
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── resources
└── app_icon.ico
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
/.github/ISSUE_TEMPLATE/bug-反馈.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug 反馈
3 | about: 描述你所遇到的bug
4 | title: ''
5 | labels: 问题反馈
6 | assignees: orz12
7 |
8 | ---
9 |
10 | ### 问题描述
11 | 请提供一个清晰而简明的问题描述。
12 |
13 | ### 复现步骤
14 | 请提供复现该问题所需的具体步骤。
15 |
16 | ### 预期行为
17 | 请描述你期望的正确行为或结果。
18 |
19 | ### 错误日志
20 | 请提供关于-错误日志中的内容。如果没有,请提供您的app版本号、系统版本、设备型号等相关信息。
21 |
22 | ### 相关信息
23 | 请补充截图、录屏、BV号等其他有助于解决问题的信息。
24 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/功能请求.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 功能请求
3 | about: 对于功能的一些建议
4 | title: ''
5 | labels: 功能
6 | assignees: orz12
7 |
8 | ---
9 |
10 | ### 功能描述
11 | 请提供对所请求功能的清晰描述。
12 |
13 | ### 目标
14 | 请描述你希望通过这个功能实现的目标。
15 |
16 | ### 解决方案
17 | 如果你有任何关于如何实现这个功能的想法或建议,请在这里提供。
18 |
19 | ### 其他
20 | 请提供已实现该功能或类似功能的应用
21 |
--------------------------------------------------------------------------------
/.metadata:
--------------------------------------------------------------------------------
1 | # This file tracks properties of this Flutter project.
2 | # Used by Flutter tool to assess capabilities and perform upgrades etc.
3 | #
4 | # This file should be version controlled.
5 |
6 | version:
7 | revision: 4b12645012342076800eb701bcdfe18f87da21cf
8 | channel: stable
9 |
10 | project_type: app
11 |
12 | # Tracks metadata for the flutter migrate command
13 | migration:
14 | platforms:
15 | - platform: root
16 | create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
17 | base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
18 | - platform: android
19 | create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
20 | base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
21 | - platform: ios
22 | create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
23 | base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
24 | - platform: linux
25 | create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
26 | base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
27 | - platform: macos
28 | create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
29 | base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
30 | - platform: web
31 | create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
32 | base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
33 | - platform: windows
34 | create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
35 | base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
36 |
37 | # User provided section
38 |
39 | # List of Local paths (relative to this file) that should be
40 | # ignored by the migrate tool.
41 | #
42 | # Files that are not part of the templates will be ignored by default.
43 | unmanaged_files:
44 | - 'lib/main.dart'
45 | - 'ios/Runner.xcodeproj/project.pbxproj'
46 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // 使用 IntelliSense 了解相关属性。
3 | // 悬停以查看现有属性的描述。
4 | // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "pilipala",
9 | "request": "launch",
10 | "type": "dart"
11 | },
12 | {
13 | "name": "pilipala (profile mode)",
14 | "request": "launch",
15 | "type": "dart",
16 | "flutterMode": "profile"
17 | },
18 | {
19 | "name": "pilipala (release mode)",
20 | "request": "launch",
21 | "type": "dart",
22 | "flutterMode": "release"
23 | }
24 | ]
25 | }
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true,
3 | "[dart]": {
4 | "editor.formatOnType": true
5 | }
6 | }
--------------------------------------------------------------------------------
/analysis_options.yaml:
--------------------------------------------------------------------------------
1 | # This file configures the analyzer, which statically analyzes Dart code to
2 | # check for errors, warnings, and lints.
3 | #
4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled
5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
6 | # invoked from the command line by running `flutter analyze`.
7 |
8 | # The following line activates a set of recommended lints for Flutter apps,
9 | # packages, and plugins designed to encourage good coding practices.
10 | include: package:flutter_lints/flutter.yaml
11 |
12 | linter:
13 | # The lint rules applied to this project can be customized in the
14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml`
15 | # included above or to enable additional rules. A list of all available lints
16 | # and their documentation is published at
17 | # https://dart-lang.github.io/linter/lints/index.html.
18 | #
19 | # Instead of disabling a lint rule for the entire project in the
20 | # section below, it can also be suppressed for a single line of code
21 | # or a specific dart file by using the `// ignore: name_of_lint` and
22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file
23 | # producing the lint.
24 | rules:
25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule
26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
27 |
28 | # Additional information about this file can be found at
29 | # https://dart.dev/guides/language/analysis-options
30 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/android/app/src/debug/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/android/app/src/main/kotlin/com/guozhigq/pilipala/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package com.orz12.PiliPalaX
2 |
3 | import io.flutter.embedding.android.FlutterActivity
4 |
5 | class MainActivity: FlutterActivity() {
6 | }
7 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-anydpi-v24/ic_notification_icon.xml:
--------------------------------------------------------------------------------
1 |
7 |
11 |
16 |
21 |
26 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-hdpi/ic_notification_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/drawable-hdpi/ic_notification_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-mdpi/ic_notification_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/drawable-mdpi/ic_notification_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xhdpi/ic_notification_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/drawable-xhdpi/ic_notification_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable-xxhdpi/ic_notification_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/drawable-xxhdpi/ic_notification_icon.png
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_baseline_forward_10_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_baseline_replay_10_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/ic_notification_icon.xml:
--------------------------------------------------------------------------------
1 |
7 |
11 |
16 |
21 |
26 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/android/app/src/main/res/drawable/launch_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/android/app/src/main/res/raw/keep.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values-night/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ffffff
4 |
--------------------------------------------------------------------------------
/android/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
15 |
19 |
20 |
--------------------------------------------------------------------------------
/android/app/src/profile/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/android/build.gradle:
--------------------------------------------------------------------------------
1 | buildscript {
2 | ext.kotlin_version = '1.9.22'
3 | repositories {
4 | maven { url "https://maven.aliyun.com/repository/google" }
5 | maven { url "https://maven.aliyun.com/repository/central" }
6 | maven { url "https://maven.aliyun.com/repository/jcenter" }
7 | maven { url "https://maven.aliyun.com/repository/public" }
8 | maven { url "http://download.flutter.io"
9 | allowInsecureProtocol = true
10 | }
11 | google()
12 | mavenCentral()
13 | }
14 |
15 | dependencies {
16 | classpath 'com.android.tools.build:gradle:7.2.0'
17 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
18 | }
19 | }
20 |
21 | allprojects {
22 | repositories {
23 | maven { url "https://maven.aliyun.com/repository/google" }
24 | maven { url "https://maven.aliyun.com/repository/central" }
25 | maven { url "https://maven.aliyun.com/repository/jcenter" }
26 | maven { url "https://maven.aliyun.com/repository/public" }
27 | maven { url "http://download.flutter.io"
28 | allowInsecureProtocol = true
29 | }
30 | google()
31 | mavenCentral()
32 | }
33 | }
34 |
35 | rootProject.buildDir = '../build'
36 | subprojects {
37 | project.buildDir = "${rootProject.buildDir}/${project.name}"
38 | }
39 | subprojects {
40 | project.evaluationDependsOn(':app')
41 | }
42 |
43 | tasks.register("clean", Delete) {
44 | delete rootProject.buildDir
45 | }
46 |
--------------------------------------------------------------------------------
/android/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx1536M
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 |
--------------------------------------------------------------------------------
/android/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | zipStoreBase=GRADLE_USER_HOME
4 | zipStorePath=wrapper/dists
5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
6 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/assets/fonts/Jura-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/fonts/Jura-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/fansCard.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/fonts/fansCard.ttf
--------------------------------------------------------------------------------
/assets/images/ai.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/ai.png
--------------------------------------------------------------------------------
/assets/images/big-vip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/big-vip.png
--------------------------------------------------------------------------------
/assets/images/dm_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/dm_gray.png
--------------------------------------------------------------------------------
/assets/images/dm_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/dm_white.png
--------------------------------------------------------------------------------
/assets/images/live.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/live.gif
--------------------------------------------------------------------------------
/assets/images/live.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/live.png
--------------------------------------------------------------------------------
/assets/images/live/default_bg.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/live/default_bg.webp
--------------------------------------------------------------------------------
/assets/images/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/loading.gif
--------------------------------------------------------------------------------
/assets/images/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/loading.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_android.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/logo/logo_android.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_android_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/logo/logo_android_2.png
--------------------------------------------------------------------------------
/assets/images/logo/logo_ios.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/logo/logo_ios.png
--------------------------------------------------------------------------------
/assets/images/lv/lv0.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/lv/lv0.png
--------------------------------------------------------------------------------
/assets/images/lv/lv1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/lv/lv1.png
--------------------------------------------------------------------------------
/assets/images/lv/lv2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/lv/lv2.png
--------------------------------------------------------------------------------
/assets/images/lv/lv3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/lv/lv3.png
--------------------------------------------------------------------------------
/assets/images/lv/lv4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/lv/lv4.png
--------------------------------------------------------------------------------
/assets/images/lv/lv5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/lv/lv5.png
--------------------------------------------------------------------------------
/assets/images/lv/lv6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/lv/lv6.png
--------------------------------------------------------------------------------
/assets/images/noface.jpeg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/noface.jpeg
--------------------------------------------------------------------------------
/assets/images/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/play.png
--------------------------------------------------------------------------------
/assets/images/play.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/run-pokemon.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/run-pokemon.gif
--------------------------------------------------------------------------------
/assets/images/tv.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/up_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/up_gray.png
--------------------------------------------------------------------------------
/assets/images/view.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/view_gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/view_gray.png
--------------------------------------------------------------------------------
/assets/images/view_white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/images/view_white.png
--------------------------------------------------------------------------------
/assets/screenshots/174shots_so.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/174shots_so.png
--------------------------------------------------------------------------------
/assets/screenshots/510shots_so.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/510shots_so.png
--------------------------------------------------------------------------------
/assets/screenshots/850shots_so.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/850shots_so.png
--------------------------------------------------------------------------------
/assets/screenshots/bangumi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/bangumi.png
--------------------------------------------------------------------------------
/assets/screenshots/bangumi_detail.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/bangumi_detail.png
--------------------------------------------------------------------------------
/assets/screenshots/dynamic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/dynamic.png
--------------------------------------------------------------------------------
/assets/screenshots/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/home.png
--------------------------------------------------------------------------------
/assets/screenshots/main_screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/main_screen.png
--------------------------------------------------------------------------------
/assets/screenshots/media.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/media.png
--------------------------------------------------------------------------------
/assets/screenshots/member.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/member.png
--------------------------------------------------------------------------------
/assets/screenshots/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/search.png
--------------------------------------------------------------------------------
/assets/screenshots/set.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/assets/screenshots/set.png
--------------------------------------------------------------------------------
/change_log/1.0.0.0817.md:
--------------------------------------------------------------------------------
1 | ## 1.0.0
2 |
3 | ### 初始版本
4 | + 直播、推荐、动态功能
5 | + 投稿、番剧播放功能
6 | + 播放器手势支持
7 | + 画质、音质、解码格式支持
8 | + 点赞、投币、收藏功能
9 | + 关注/取关、用户主页功能
10 | + 评论功能
11 | + 历史记录、稍后再看功能
--------------------------------------------------------------------------------
/change_log/1.0.1.0817.md:
--------------------------------------------------------------------------------
1 | ## 1.0.1
2 |
3 | ### 修复
4 | + 升级播放器依赖
5 | + android平台 AV1格式视频支持
6 | + 视频全屏功能
7 |
8 |
--------------------------------------------------------------------------------
/change_log/1.0.10.1016.md:
--------------------------------------------------------------------------------
1 | ## 1.0.10
2 |
3 | ### 修复
4 | + 长按倍速抬起后未恢复默认倍速
--------------------------------------------------------------------------------
/change_log/1.0.11.1112.md:
--------------------------------------------------------------------------------
1 | ## 1.0.11
2 |
3 | ### 新功能
4 | + 适配了原生媒体通知栏 @Daydreamer-riri
5 | + 视频主题图标 @Daydreamer-riri
6 | + 关闭软件后自动画中画播放
7 | + UP主分组管理
8 | + md2样式底栏
9 | +
10 |
11 |
12 | ### 修复
13 | + 历史记录记忆播放
14 | + 部分类型视频连播
15 | + 播放速度选择框不支持返回手势
16 | + 播放速度选择框不支持返回手势
17 | + 视频播放速度总是显示1.0X
18 | + 评论页面计数错误
19 | + 退出视频还有声音
20 |
21 |
22 | ### 优化
23 | + 视频加载速度
24 |
25 | 更多更新日志可在Github上查看
26 | 问题反馈、功能建议请查看「关于」页面。
--------------------------------------------------------------------------------
/change_log/1.0.12.1114.md:
--------------------------------------------------------------------------------
1 | ## 1.0.12
2 |
3 |
4 | ### 修复
5 | + iOS端视频播放时没有声音
6 | + 超过6分钟弹幕不显示
7 | + 视频详情页网络异常
8 |
9 |
10 | 更多更新日志可在Github上查看
11 | 问题反馈、功能建议请查看「关于」页面。
--------------------------------------------------------------------------------
/change_log/1.0.13.1217.md:
--------------------------------------------------------------------------------
1 | ## 1.0.13
2 |
3 |
4 | ### 新功能
5 | + 视频详情页稍后再看
6 | + 发送弹幕 感谢@orz12
7 | + 消息展示
8 | + up主页显示获赞数
9 | + up主页显示合集
10 | + 视频详情页「ai总结」增加开关
11 |
12 | ### 修复
13 | + 首页推荐问题(需要重新登录)
14 | + 长按倍速逻辑
15 | + 视频详情页网络异常
16 |
17 | ### 优化
18 | + 设置面板样式 感谢@GuMengYu @KoolShow
19 |
20 |
21 | 更多更新日志可在Github上查看
22 | 问题反馈、功能建议请查看「关于」页面。
23 |
--------------------------------------------------------------------------------
/change_log/1.0.14.1225.md:
--------------------------------------------------------------------------------
1 | ## 1.0.14
2 |
3 | 圣诞节快乐~ 🎉
4 |
5 | 大部分内容由@orz12提供,感谢👏
6 |
7 | ### 修复
8 | + 全屏弹幕消失
9 | + iOS全屏/退出全屏视频暂停
10 | + 个人主页关注状态
11 | + 视频合集向下滑动UI问题
12 | + 媒体库滑动底栏不隐藏
13 | + 个人主页动态加载问题 * 2
14 | + 未登录状态访问个人主页异常
15 | + 视频搜索标题特殊字符转义
16 | + iOS闪退
17 | + 消息页面夜间模式异常
18 | + 消息页面含有撤回消息时异常
19 | + 弹幕速度
20 |
21 | ### 优化
22 | + 全屏播放方案优化
23 | + 弹幕加载逻辑优化
24 | + 点赞、投币逻辑优化
25 | + 进度条及播放时间渲染优化
26 |
27 | 更多更新日志可在Github上查看
28 | 问题反馈、功能建议请查看「关于」页面。
29 |
--------------------------------------------------------------------------------
/change_log/1.0.15.0101.md:
--------------------------------------------------------------------------------
1 | ## 1.0.15
2 |
3 | 元旦快乐~ 🎉
4 |
5 | ### 功能
6 | + 转发动态评论展示
7 | + 推荐、最热、收藏视频增肌日期显示
8 |
9 | ### 修复
10 | + 全屏播放相关问题
11 | + 评论区@用户展示问题
12 | + 登录状态闪退问题
13 | + pip意外触发问题
14 | + 动态页tab切换样式问题
15 |
16 | ### 优化
17 | + 首页默认使用web端推荐
18 | + 取消iOS路由切换效果
19 | + 视频分享中添加Up主
20 |
21 | 更多更新日志可在Github上查看
22 | 问题反馈、功能建议请查看「关于」页面。
23 |
--------------------------------------------------------------------------------
/change_log/1.0.16.0102.md:
--------------------------------------------------------------------------------
1 | ## 1.0.16
2 |
3 |
4 | ### 功能
5 | + toast 背景支持透明度调节
6 |
7 | ### 修复
8 | + web端推荐未展示【已关注】
9 | + up主动态页异常
10 | + 未打开自动播放时,视频详情页异常
11 | + 视频暂停状态取消自动ip
12 |
13 |
14 | 更多更新日志可在Github上查看
15 | 问题反馈、功能建议请查看「关于」页面。
16 |
--------------------------------------------------------------------------------
/change_log/1.0.17.0125.md:
--------------------------------------------------------------------------------
1 | ## 1.0.17
2 |
3 |
4 | ### 功能
5 | + 视频全屏时隐藏进度条
6 | + 动态内容增加投稿跳转
7 | + 未开启自动播放时点击封面播放
8 | + 弹幕发送标识
9 | + 定时关闭
10 | + 推荐视频卡片拉黑up功能
11 | + 首页tabbar编辑排序
12 |
13 | ### 修复
14 | + 连续跳转搜索页未刷新
15 | + 搜索结果为空时页面异常
16 | + 评论区链接解析
17 | + 视频全屏状态栏背景色
18 | + 私信对话气泡位置
19 | + 设置up关注分组样式
20 | + 每次推荐请求数据相同
21 | + iOS代理网络异常
22 | + 双击切换播放状态无声
23 | + 设置自定义倍速白屏
24 | + 免登录查看1080p
25 |
26 | ### 优化
27 | + 首页web端推荐观看数展示
28 | + 首页web端推荐接口更新
29 | + 首页样式
30 | + 搜索页跳转
31 | + 弹幕资源优化
32 | + 图片渲染占用内存优化(部分)
33 | + 两次返回退出应用
34 | + schame 补充
35 |
36 |
37 |
38 | 更多更新日志可在Github上查看
39 | 问题反馈、功能建议请查看「关于」页面。
40 |
--------------------------------------------------------------------------------
/change_log/1.0.18.0130.md:
--------------------------------------------------------------------------------
1 | ## 1.0.18
2 |
3 |
4 | ### 功能
5 |
6 |
7 | ### 修复
8 |
9 |
10 | ### 优化
11 |
12 |
13 |
14 |
15 | 更多更新日志可在Github上查看
16 | 问题反馈、功能建议请查看「关于」页面。
17 |
--------------------------------------------------------------------------------
/change_log/1.0.19.0131.md:
--------------------------------------------------------------------------------
1 | ## 1.0.19
2 |
3 |
4 | ### 修复
5 | + 视频404、评论加载错误
6 | + bvav转换
7 |
8 | ### 优化
9 | + 视频详情页内存占用
10 |
11 |
12 |
13 |
14 | 更多更新日志可在Github上查看
15 | 问题反馈、功能建议请查看「关于」页面。
16 |
--------------------------------------------------------------------------------
/change_log/1.0.2.0819.md:
--------------------------------------------------------------------------------
1 | ## 1.0.2
2 |
3 | ### 新功能
4 | + 自动检查更新
5 | + 封面图片保存
6 | + 动态跳转番剧
7 | + 历史记录番剧记忆播放
8 | + 一键清空稍后再看
9 |
10 | ### 修复
11 | + 切换分P cid未切换
12 | + cookie存储问题
13 | + 登录/退出登录问题
14 |
15 | ### 优化
16 | + 页面空/异常状态样式
17 | + 退出登录提示
18 | + 请求节流
19 | + 全屏播放
--------------------------------------------------------------------------------
/change_log/1.0.3.0821.md:
--------------------------------------------------------------------------------
1 | ## 1.0.3
2 |
3 | 建议卸载1.0.2版本,重新安装
4 | ### 新功能
5 | + 底部播放进度条设置
6 | + 复制图片链接
7 |
8 |
9 | ### 修复
10 | + 用户数据格式修改
11 | + video Fit
12 | + 没有audio 资源的视频异常
13 | + 评论区域图片无法点击
14 | + 视频进度条拖动问题
15 |
16 | ### 优化
17 | + 页面空/异常状态样式
18 | + 部分页面样式
19 | + 图片预览页面样式
--------------------------------------------------------------------------------
/change_log/1.0.4.0822.md:
--------------------------------------------------------------------------------
1 | ## 1.0.4
2 |
3 | ### 新功能
4 | + 热搜刷新
5 | + 视频搜索排序、筛选
6 | + app字体大小自定义
7 | + app主题色自定义
8 | + 「课堂」类动态渲染
9 |
10 |
11 | ### 修复
12 | + 搜索词联想richText渲染异常
13 | + 部分动态点赞异常
14 | + 默认视频解码格式
15 | + 搜索页面返回搜索词未清空
16 | + 动态详情评论加载异常
17 | + 动态页面下拉刷新数据异常
18 |
19 | ### 优化
20 | + 一些样式修改
21 | + 取消热搜词缓存
--------------------------------------------------------------------------------
/change_log/1.0.5.0826.md:
--------------------------------------------------------------------------------
1 | ## 1.0.5
2 |
3 | 主要是bug修复跟一部分小功能,弹幕功能需要下一版。
4 | 问题反馈请前往QQ频道或提交issues。
5 | 感谢🙏酷友「无力感*」「斤斤计较呀」「Pseudopamine」
6 |
7 | ### 新功能
8 | + 高帧率支持
9 | + 默认评论排序设置
10 | + 默认动态类别设置
11 | + 动态合集查看
12 | + 同时观看人数
13 | + iOS路由切换效果
14 |
15 |
16 | ### 修复
17 | + 收藏夹翻页
18 | + 首页搜索框频繁点击消失
19 | + 评论排序切换空白
20 | + 快速返回首页
21 | + 重复进入个人中心页面数据未刷新
22 | + 动态goods数据异常
23 | + 大会员切换番剧
24 | + 高画质codes匹配
25 |
26 |
27 | ### 优化
28 | + 倍速选择
29 | + 播放器亮度记忆
30 | + 下载对应版本apk
--------------------------------------------------------------------------------
/change_log/1.0.6.0902.md:
--------------------------------------------------------------------------------
1 | ## 1.0.6
2 |
3 | 问题反馈、功能建议请查看「关于」页面。
4 |
5 | ### 新功能
6 | + 首页单列布局
7 | + 首页推荐展示播放量、弹幕数
8 | + 简单弹幕功能实现(持续开发中...)
9 | + 评论区搜索关键词开关 issues#46
10 | + 热搜榜隐藏功能 issues#35
11 | + 自动全屏 issues#37
12 | + 快速收藏功能
13 | + 双击快进/快退开关
14 | + 评论链接跳转视频
15 | + 支持移除单个稍后再看
16 | + app scheme外链跳转
17 |
18 |
19 | ### 修复
20 | + 杜比、无损音频切换
21 | + 收藏夹展示 issues#42
22 | + 搜索建议次 issues#47
23 |
24 |
25 | ### 优化
26 | + 倍速选择优化
27 | + 导航条沉浸
28 | + 取消Hero动画
29 | + 视频锁定逻辑
30 | + 登录逻辑优化
31 | + 图片预览样式
32 | + +评论区用户点击范围
33 | + 关注、粉丝页面优化
34 | + 关闭自动播放时播放器初始化逻辑
--------------------------------------------------------------------------------
/change_log/1.0.7.0908.md:
--------------------------------------------------------------------------------
1 | ## 1.0.7
2 |
3 | 默认倍速、直播弹幕、专栏等功能开发中
4 |
5 | ### 新功能
6 | + 弹幕设置、屏蔽功能
7 | + 不是很完美的后台播放功能
8 | + 不是很完美的画中画(pip)功能(Android端)
9 |
10 | ### 修复
11 | + 动态页面加载异常
12 | + 网络异常时页面空白
13 | + 竖屏全屏状态栏问题
14 | + iOS端代理请求异常
15 |
16 | ### 优化
17 | + 图片预览
18 | + 全屏播放时自动旋转
19 | + 转发内容增加视频标题
20 |
21 | 更多更新日志可在Github上查看
22 | 问题反馈、功能建议请查看「关于」页面。
23 |
--------------------------------------------------------------------------------
/change_log/1.0.8.0917.md:
--------------------------------------------------------------------------------
1 | ## 1.0.8
2 |
3 | 直播弹幕、循环播放等功能开发中
4 |
5 | ### 新功能
6 | + 用户拉黑功能
7 | + gif图片保存
8 | + 删除已看历史记录
9 |
10 | ### 修复
11 | + 弹幕数量较少
12 | + 弹幕屏蔽设置自动记忆
13 | + 动态页面渲染
14 | + 用户主页数据错乱
15 | + 大家都在搜空白
16 | + 默认自动全屏,顶部操作栏丢失
17 |
18 |
19 | ### 优化
20 | + 全屏状态栏区域显示优化
21 | + 图片保存至PiliPala文件夹
22 |
23 | 更多更新日志可在Github上查看
24 | 问题反馈、功能建议请查看「关于」页面。
25 |
--------------------------------------------------------------------------------
/change_log/1.0.9.1015.md:
--------------------------------------------------------------------------------
1 | ## 1.0.9
2 |
3 |
4 | ### 新功能
5 | + 自定义倍速、默认倍速
6 | + 历史记录搜索
7 | + 收藏夹搜索
8 | + 历史记录多选删除
9 | + 视频循环播放
10 | + 免登录看1080P
11 | + 评论区视频链接跳转
12 | + up主分组
13 | + up主投稿搜索
14 |
15 | ### 修复
16 | + 搜索视频标题乱码
17 | + 屏幕帧率
18 | + 动态页面渲染
19 |
20 |
21 |
22 | ### 优化
23 | + 快进手势
24 | + 视频简介链接匹配
25 | + 视频全屏时安全区域
26 |
27 | 更多更新日志可在Github上查看
28 | 问题反馈、功能建议请查看「关于」页面。
29 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/full_description.txt:
--------------------------------------------------------------------------------
1 | PiliPala is a third-party Bilibili client developed in Flutter.
2 |
3 | Top Features:
4 |
5 | * List of recommended videos
6 | * List of hottest videos
7 | * Popular live streams
8 | * List of bangumis
9 | * Block videos from blacklisted users
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/en-US/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/en-US/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/en-US/images/phoneScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/en-US/images/phoneScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | A third-party Bilibili client developed in Flutter
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/title.txt:
--------------------------------------------------------------------------------
1 | PiliPala
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/changelogs/2001.txt:
--------------------------------------------------------------------------------
1 | 修复
2 |
3 | * 全屏弹幕消失
4 | * iOS 全屏/退出全屏视频暂停
5 | * 个人主页关注状态
6 | * 视频合集向下滑动UI问题
7 | * 媒体库滑动底栏不隐藏
8 | * 个人主页动态加载问题 * 2
9 | * 未登录状态访问个人主页异常
10 | * 视频搜索标题特殊字符转义
11 | * iOS 闪退
12 | * 消息页面夜间模式异常
13 | * 消息页面含有撤回消息时异常
14 | * 弹幕速度
15 |
16 | 优化
17 |
18 | * 全屏播放方案优化
19 | * 弹幕加载逻辑优化
20 | * 点赞、投币逻辑优化
21 | * 进度条及播放时间渲染优化
22 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/full_description.txt:
--------------------------------------------------------------------------------
1 | PiliPala 是使用 Flutter 开发的 BiliBili 第三方客户端。
2 |
3 | 主要功能:
4 |
5 | * 推荐视频列表 (app 端)
6 | * 最热视频列表
7 | * 热门直播
8 | * 番剧列表
9 | * 屏蔽黑名单内用户视频
10 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/images/featureGraphic.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/zh-CN/images/featureGraphic.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/zh-CN/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/zh-CN/images/phoneScreenshots/1.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/zh-CN/images/phoneScreenshots/2.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/fastlane/metadata/android/zh-CN/images/phoneScreenshots/3.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/short_description.txt:
--------------------------------------------------------------------------------
1 | 使用 Flutter 开发的 BiliBili 第三方客户端
2 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/zh-CN/title.txt:
--------------------------------------------------------------------------------
1 | PiliPala
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 | 11.0
25 |
26 |
27 |
--------------------------------------------------------------------------------
/ios/Flutter/Debug.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Flutter/Release.xcconfig:
--------------------------------------------------------------------------------
1 | #include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
2 | #include "Generated.xcconfig"
3 |
--------------------------------------------------------------------------------
/ios/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment this line to define a global platform for your project
2 | platform :ios, '13.0'
3 |
4 | # CocoaPods analytics sends network stats synchronously affecting flutter build latency.
5 | ENV['COCOAPODS_DISABLE_STATS'] = 'true'
6 |
7 | project 'Runner', {
8 | 'Debug' => :debug,
9 | 'Profile' => :release,
10 | 'Release' => :release,
11 | }
12 |
13 | def flutter_root
14 | generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
15 | unless File.exist?(generated_xcode_build_settings_path)
16 | raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
17 | end
18 |
19 | File.foreach(generated_xcode_build_settings_path) do |line|
20 | matches = line.match(/FLUTTER_ROOT\=(.*)/)
21 | return matches[1].strip if matches
22 | end
23 | raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
24 | end
25 |
26 | require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
27 |
28 | flutter_ios_podfile_setup
29 |
30 | target 'Runner' do
31 | use_frameworks!
32 | use_modular_headers!
33 |
34 | flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
35 | end
36 |
37 | post_install do |installer|
38 | installer.pods_project.targets.each do |target|
39 | flutter_additional_ios_build_settings(target)
40 | target.build_configurations.each do |config|
41 | deployment_target = config.build_settings['IPHONEOS_DEPLOYMENT_TARGET']
42 | if !deployment_target.nil? && !deployment_target.empty? && deployment_target.to_f < 12.0
43 | config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '12.0'
44 | end
45 | end
46 | end
47 | end
48 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/ios/Runner/AppDelegate.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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/100.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/1024.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/114.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/120.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/144.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/152.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/167.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/180.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/20.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/29.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/40.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/50.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/57.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/58.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/60.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/72.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/76.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/80.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/AppIcon.appiconset/87.png
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/huajiworld/pilipalaX/cded396cd52a0c2daf60c48916b28ac0274a1f88/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
--------------------------------------------------------------------------------
/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md:
--------------------------------------------------------------------------------
1 | # Launch Screen Assets
2 |
3 | You can customize the launch screen with your own desired assets by replacing the image files in this directory.
4 |
5 | You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
--------------------------------------------------------------------------------
/ios/Runner/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/ios/Runner/Runner-Bridging-Header.h:
--------------------------------------------------------------------------------
1 | #import "GeneratedPluginRegistrant.h"
2 |
--------------------------------------------------------------------------------
/lib/common/constants.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class StyleString {
4 | static const double cardSpace = 8;
5 | static const double safeSpace = 12;
6 | static BorderRadius mdRadius = BorderRadius.circular(10);
7 | static const Radius imgRadius = Radius.circular(10);
8 | static const double aspectRatio = 16 / 10;
9 | }
10 |
11 | class Constants {
12 | // 27eb53fc9058f8c3 移动端 Android
13 | // 4409e2ce8ffd12b8 TV端
14 | static const String appKey = '4409e2ce8ffd12b8';
15 | // 59b43e04ad6965f34319062b478f83dd TV端
16 | static const String appSec = '59b43e04ad6965f34319062b478f83dd';
17 | static const String thirdSign = '04224646d1fea004e79606d3b038c84a';
18 | static const String thirdApi =
19 | 'https://www.mcbbs.net/template/mcbbs/image/special_photo_bg.png';
20 | }
21 |
--------------------------------------------------------------------------------
/lib/common/widgets/animated_dialog.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AnimatedDialog extends StatefulWidget {
4 | const AnimatedDialog({Key? key, required this.child, this.closeFn})
5 | : super(key: key);
6 |
7 | final Widget child;
8 | final Function? closeFn;
9 |
10 | @override
11 | State createState() => AnimatedDialogState();
12 | }
13 |
14 | class AnimatedDialogState extends State
15 | with SingleTickerProviderStateMixin {
16 | late AnimationController? controller;
17 | late Animation? opacityAnimation;
18 | late Animation? scaleAnimation;
19 |
20 | @override
21 | void initState() {
22 | super.initState();
23 |
24 | controller = AnimationController(
25 | vsync: this, duration: const Duration(milliseconds: 800));
26 | opacityAnimation = Tween(begin: 0.0, end: 0.6).animate(
27 | CurvedAnimation(parent: controller!, curve: Curves.easeOutExpo));
28 | scaleAnimation =
29 | CurvedAnimation(parent: controller!, curve: Curves.easeOutExpo);
30 | controller!.addListener(() => setState(() {}));
31 | controller!.forward();
32 | }
33 |
34 | @override
35 | void dispose() {
36 | controller!.dispose();
37 | super.dispose();
38 | }
39 |
40 | @override
41 | Widget build(BuildContext context) {
42 | return Material(
43 | color: Colors.black.withOpacity(opacityAnimation!.value),
44 | child: InkWell(
45 | splashColor: Colors.transparent,
46 | onTap: () => widget.closeFn!(),
47 | child: Center(
48 | child: FadeTransition(
49 | opacity: scaleAnimation!,
50 | child: ScaleTransition(
51 | scale: scaleAnimation!,
52 | child: widget.child,
53 | ),
54 | ),
55 | ),
56 | ),
57 | );
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/lib/common/widgets/appbar.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class AppBarWidget extends StatelessWidget implements PreferredSizeWidget {
4 | const AppBarWidget({
5 | required this.child,
6 | required this.controller,
7 | required this.visible,
8 | Key? key,
9 | }) : super(key: key);
10 |
11 | final PreferredSizeWidget child;
12 | final AnimationController controller;
13 | final bool visible;
14 |
15 | @override
16 | Size get preferredSize => child.preferredSize;
17 |
18 | @override
19 | Widget build(BuildContext context) {
20 | visible ? controller.reverse() : controller.forward();
21 | return SlideTransition(
22 | position: Tween(
23 | begin: Offset.zero,
24 | end: const Offset(0, -1),
25 | ).animate(CurvedAnimation(
26 | parent: controller,
27 | curve: Curves.easeInOutBack,
28 | )),
29 | child: child,
30 | );
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/lib/common/widgets/content_container.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class ContentContainer extends StatelessWidget {
4 | final Widget? contentWidget;
5 | final Widget? bottomWidget;
6 | final bool isScrollable;
7 | final Clip? childClipBehavior;
8 |
9 | const ContentContainer(
10 | {Key? key,
11 | this.contentWidget,
12 | this.bottomWidget,
13 | this.isScrollable = true,
14 | this.childClipBehavior})
15 | : super(key: key);
16 |
17 | @override
18 | Widget build(BuildContext context) {
19 | return LayoutBuilder(
20 | builder: (BuildContext context, BoxConstraints constraints) {
21 | return SingleChildScrollView(
22 | clipBehavior: childClipBehavior ?? Clip.hardEdge,
23 | physics: isScrollable ? null : const NeverScrollableScrollPhysics(),
24 | child: ConstrainedBox(
25 | constraints: constraints.copyWith(
26 | minHeight: constraints.maxHeight,
27 | maxHeight: double.infinity,
28 | ),
29 | child: IntrinsicHeight(
30 | child: Column(
31 | children: [
32 | if (contentWidget != null)
33 | Expanded(
34 | child: contentWidget!,
35 | )
36 | else
37 | const Spacer(),
38 | if (bottomWidget != null) bottomWidget!,
39 | ],
40 | ),
41 | ),
42 | ),
43 | );
44 | },
45 | );
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/lib/common/widgets/custom_toast.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:hive/hive.dart';
3 | import 'package:PiliPalaX/utils/storage.dart';
4 |
5 | Box setting = GStrorage.setting;
6 |
7 | class CustomToast extends StatelessWidget {
8 | const CustomToast({super.key, required this.msg});
9 |
10 | final String msg;
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | final double toastOpacity =
15 | setting.get(SettingBoxKey.defaultToastOp, defaultValue: 1.0) as double;
16 | return Container(
17 | margin:
18 | EdgeInsets.only(bottom: MediaQuery.of(context).padding.bottom + 30),
19 | padding: const EdgeInsets.symmetric(horizontal: 17, vertical: 10),
20 | decoration: BoxDecoration(
21 | color: Theme.of(context)
22 | .colorScheme
23 | .primaryContainer
24 | .withOpacity(toastOpacity),
25 | borderRadius: BorderRadius.circular(20),
26 | ),
27 | child: Text(
28 | msg,
29 | style: TextStyle(
30 | fontSize: 13,
31 | color: Theme.of(context).colorScheme.primary,
32 | ),
33 | ),
34 | );
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lib/common/widgets/http_error.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_svg/flutter_svg.dart';
3 |
4 | class HttpError extends StatelessWidget {
5 | const HttpError(
6 | {required this.errMsg, required this.fn, this.btnText, super.key});
7 |
8 | final String? errMsg;
9 | final Function()? fn;
10 | final String? btnText;
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | return SliverToBoxAdapter(
15 | child: SizedBox(
16 | height: 400,
17 | child: Column(
18 | crossAxisAlignment: CrossAxisAlignment.center,
19 | mainAxisAlignment: MainAxisAlignment.center,
20 | children: [
21 | SvgPicture.asset(
22 | "assets/images/error.svg",
23 | height: 200,
24 | ),
25 | const SizedBox(height: 30),
26 | Text(
27 | errMsg ?? '请求异常',
28 | textAlign: TextAlign.center,
29 | style: Theme.of(context).textTheme.titleSmall,
30 | ),
31 | const SizedBox(height: 20),
32 | FilledButton.tonal(
33 | onPressed: () {
34 | fn!();
35 | },
36 | style: ButtonStyle(
37 | backgroundColor: MaterialStateProperty.resolveWith((states) {
38 | return Theme.of(context).colorScheme.primary.withAlpha(20);
39 | }),
40 | ),
41 | child: Text(
42 | btnText ?? '点击重试',
43 | style: TextStyle(color: Theme.of(context).colorScheme.primary),
44 | ),
45 | ),
46 | ],
47 | ),
48 | ),
49 | );
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/lib/common/widgets/no_data.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:flutter_svg/flutter_svg.dart';
3 |
4 | class NoData extends StatelessWidget {
5 | const NoData({super.key});
6 |
7 | @override
8 | Widget build(BuildContext context) {
9 | return SliverToBoxAdapter(
10 | child: SizedBox(
11 | height: 400,
12 | child: Column(
13 | crossAxisAlignment: CrossAxisAlignment.center,
14 | mainAxisAlignment: MainAxisAlignment.center,
15 | children: [
16 | SvgPicture.asset(
17 | "assets/images/error.svg",
18 | height: 200,
19 | ),
20 | const SizedBox(height: 20),
21 | Text(
22 | '没有数据',
23 | textAlign: TextAlign.center,
24 | style: Theme.of(context).textTheme.titleSmall,
25 | ),
26 | ],
27 | ),
28 | ),
29 | );
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/lib/common/widgets/sliver_header.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | class SliverHeaderDelegate extends SliverPersistentHeaderDelegate {
4 | SliverHeaderDelegate({required this.height, required this.child});
5 |
6 | final double height;
7 | final Widget child;
8 |
9 | @override
10 | Widget build(
11 | BuildContext context, double shrinkOffset, bool overlapsContent) {
12 | return child;
13 | }
14 |
15 | @override
16 | double get maxExtent => height;
17 |
18 | @override
19 | double get minExtent => height;
20 |
21 | @override
22 | bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate) =>
23 | true;
24 | }
25 |
--------------------------------------------------------------------------------
/lib/common/widgets/stat/danmu.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:PiliPalaX/utils/utils.dart';
3 |
4 | class StatDanMu extends StatelessWidget {
5 | final String? theme;
6 | final dynamic danmu;
7 | final String? size;
8 |
9 | const StatDanMu({Key? key, this.theme, this.danmu, this.size})
10 | : super(key: key);
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | Map colorObject = {
15 | 'white': Colors.white,
16 | 'gray': Theme.of(context).colorScheme.outline,
17 | 'black': Theme.of(context).colorScheme.onBackground.withOpacity(0.8),
18 | };
19 | Color color = colorObject[theme]!;
20 | return Row(
21 | children: [
22 | Icon(
23 | Icons.subtitles_outlined,
24 | size: 14,
25 | color: color,
26 | ),
27 | const SizedBox(width: 2),
28 | Text(
29 | Utils.numFormat(danmu!),
30 | style: TextStyle(
31 | fontSize: size == 'medium' ? 12 : 11,
32 | color: color,
33 | ),
34 | )
35 | ],
36 | );
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/lib/common/widgets/stat/view.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 | import 'package:PiliPalaX/utils/utils.dart';
3 |
4 | class StatView extends StatelessWidget {
5 | final String? theme;
6 | final dynamic view;
7 | final String? size;
8 |
9 | const StatView({Key? key, this.theme, this.view, this.size})
10 | : super(key: key);
11 |
12 | @override
13 | Widget build(BuildContext context) {
14 | Map colorObject = {
15 | 'white': Colors.white,
16 | 'gray': Theme.of(context).colorScheme.outline,
17 | 'black': Theme.of(context).colorScheme.onBackground.withOpacity(0.8),
18 | };
19 | Color color = colorObject[theme]!;
20 | return Row(
21 | children: [
22 | Icon(
23 | Icons.play_circle_outlined,
24 | size: 13,
25 | color: color,
26 | ),
27 | const SizedBox(width: 2),
28 | Text(
29 | Utils.numFormat(view!),
30 | style: TextStyle(
31 | fontSize: size == 'medium' ? 12 : 11,
32 | color: color,
33 | ),
34 | ),
35 | ],
36 | );
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/lib/http/bangumi.dart:
--------------------------------------------------------------------------------
1 | import '../models/bangumi/list.dart';
2 | import 'index.dart';
3 |
4 | class BangumiHttp {
5 | static Future bangumiList({int? page}) async {
6 | var res = await Request().get(Api.bangumiList, data: {'page': page});
7 | if (res.data['code'] == 0) {
8 | return {
9 | 'status': true,
10 | 'data': BangumiListDataModel.fromJson(res.data['data'])
11 | };
12 | } else {
13 | return {
14 | 'status': false,
15 | 'data': [],
16 | 'msg': res.data['message'],
17 | };
18 | }
19 | }
20 |
21 | static Future bangumiFollow({int? mid}) async {
22 | var res = await Request().get(Api.bangumiFollow, data: {'vmid': mid});
23 | if (res.data['code'] == 0) {
24 | return {
25 | 'status': true,
26 | 'data': BangumiListDataModel.fromJson(res.data['data'])
27 | };
28 | } else {
29 | return {
30 | 'status': false,
31 | 'data': [],
32 | 'msg': res.data['message'],
33 | };
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/lib/http/black.dart:
--------------------------------------------------------------------------------
1 | import '../models/user/black.dart';
2 | import 'index.dart';
3 |
4 | class BlackHttp {
5 | static Future blackList({required int pn, int? ps}) async {
6 | var res = await Request().get(Api.blackLst, data: {
7 | 'pn': pn,
8 | 'ps': ps ?? 50,
9 | 're_version': 0,
10 | 'jsonp': 'jsonp',
11 | 'csrf': await Request.getCsrf(),
12 | });
13 | if (res.data['code'] == 0) {
14 | return {
15 | 'status': true,
16 | 'data': BlackListDataModel.fromJson(res.data['data'])
17 | };
18 | } else {
19 | return {
20 | 'status': false,
21 | 'data': [],
22 | 'msg': res.data['message'],
23 | };
24 | }
25 | }
26 |
27 | // 移除黑名单
28 | static Future removeBlack({required int fid}) async {
29 | var res = await Request().post(
30 | Api.removeBlack,
31 | queryParameters: {
32 | 'act': 6,
33 | 'csrf': await Request.getCsrf(),
34 | 'fid': fid,
35 | 'jsonp': 'jsonp',
36 | 're_src': 116,
37 | },
38 | );
39 | if (res.data['code'] == 0) {
40 | return {
41 | 'status': true,
42 | 'data': [],
43 | 'msg': '操作成功',
44 | };
45 | } else {
46 | return {
47 | 'status': false,
48 | 'data': [],
49 | 'msg': res.data['message'],
50 | };
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/lib/http/common.dart:
--------------------------------------------------------------------------------
1 | import 'index.dart';
2 |
3 | class CommonHttp {
4 | static Future unReadDynamic() async {
5 | var res = await Request().get(Api.getUnreadDynamic,
6 | data: {'alltype_offset': 0, 'video_offset': '', 'article_offset': 0});
7 | if (res.data['code'] == 0) {
8 | return {'status': true, 'data': res.data['data']['dyn_basic_infos']};
9 | } else {
10 | return {
11 | 'status': false,
12 | 'data': [],
13 | 'msg': res.data['message'],
14 | };
15 | }
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/lib/http/constants.dart:
--------------------------------------------------------------------------------
1 | class HttpString {
2 | static const String baseUrl = 'https://www.bilibili.com';
3 | static const String apiBaseUrl = 'https://api.bilibili.com';
4 | static const String tUrl = 'https://api.vc.bilibili.com';
5 | static const String appBaseUrl = 'https://app.bilibili.com';
6 | static const String liveBaseUrl = 'https://api.live.bilibili.com';
7 | static const String passBaseUrl = 'https://passport.bilibili.com';
8 | static const String messageBaseUrl = 'https://message.bilibili.com';
9 | static const List validateStatusCodes = [
10 | 302,
11 | 304,
12 | 307,
13 | 400,
14 | 401,
15 | 403,
16 | 404,
17 | 405,
18 | 409,
19 | 412,
20 | 500,
21 | 503,
22 | 504,
23 | 509,
24 | 616,
25 | 617,
26 | 625,
27 | 626,
28 | 628,
29 | 629,
30 | 632,
31 | 643,
32 | 650,
33 | 652,
34 | 658,
35 | 662,
36 | 688,
37 | 689,
38 | 701,
39 | 799,
40 | 8888
41 | ];
42 | }
43 |
--------------------------------------------------------------------------------
/lib/http/fan.dart:
--------------------------------------------------------------------------------
1 | import '../models/fans/result.dart';
2 | import 'index.dart';
3 |
4 | class FanHttp {
5 | static Future fans({int? vmid, int? pn, int? ps, String? orderType}) async {
6 | var res = await Request().get(Api.fans, data: {
7 | 'vmid': vmid,
8 | 'pn': pn,
9 | 'ps': ps,
10 | 'order': 'desc',
11 | 'order_type': orderType,
12 | });
13 | if (res.data['code'] == 0) {
14 | return {'status': true, 'data': FansDataModel.fromJson(res.data['data'])};
15 | } else {
16 | return {
17 | 'status': false,
18 | 'data': [],
19 | 'msg': res.data['message'],
20 | };
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/lib/http/follow.dart:
--------------------------------------------------------------------------------
1 | import '../models/follow/result.dart';
2 | import 'index.dart';
3 |
4 | class FollowHttp {
5 | static Future followings(
6 | {int? vmid, int? pn, int? ps, String? orderType}) async {
7 | var res = await Request().get(Api.followings, data: {
8 | 'vmid': vmid,
9 | 'pn': pn,
10 | 'ps': ps,
11 | 'order': 'desc',
12 | 'order_type': orderType,
13 | });
14 | if (res.data['code'] == 0) {
15 | return {
16 | 'status': true,
17 | 'data': FollowDataModel.fromJson(res.data['data'])
18 | };
19 | } else {
20 | return {
21 | 'status': false,
22 | 'data': [],
23 | 'msg': res.data['message'],
24 | };
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/lib/http/index.dart:
--------------------------------------------------------------------------------
1 | export 'api.dart';
2 | export 'init.dart';
3 |
--------------------------------------------------------------------------------
/lib/http/interceptor_anonymity.dart:
--------------------------------------------------------------------------------
1 | // ignore_for_file: avoid_print
2 |
3 | import 'dart:io';
4 | import 'package:dio/dio.dart';
5 | // import 'package:flutter_smart_dialog/flutter_smart_dialog.dart';
6 | import '../pages/mine/controller.dart';
7 | import 'api.dart';
8 |
9 | class AnonymityInterceptor extends Interceptor {
10 | static const List anonymityList = [
11 | Api.videoUrl,
12 | Api.videoIntro,
13 | Api.relatedList,
14 | Api.replyList,
15 | Api.replyReplyList,
16 | Api.searchSuggest,
17 | Api.searchByType,
18 | Api.heartBeat,
19 | Api.ab2c,
20 | Api.bangumiInfo,
21 | Api.liveRoomInfo,
22 | Api.onlineTotal,
23 | Api.webDanmaku,
24 | Api.dynamicDetail,
25 | Api.aiConclusion,
26 | Api.getMemberViewApi,
27 | Api.getSeasonDetailApi,
28 | ];
29 |
30 |
31 | @override
32 | void onRequest(RequestOptions options, RequestInterceptorHandler handler) {
33 | if (MineController.anonymity) {
34 | String uri = options.uri.toString();
35 | for (var i in anonymityList) {
36 | // 如果请求的url包含无痕列表中的url,则清空cookie
37 | // 但需要保证匹配到url的后半部分不再出现/符号,否则会误伤
38 | int index = uri.indexOf(i);
39 | if (index == -1) continue;
40 | if (uri.lastIndexOf('/') >= index + i.length) continue;
41 | //SmartDialog.showToast('触发无痕模式\n\n$i\n\n${options.uri}');
42 | options.headers[HttpHeaders.cookieHeader] = "";
43 | if(options.data != null && options.data.csrf != null) {
44 | options.data.csrf = "";
45 | }
46 | break;
47 | }
48 | }
49 | handler.next(options);
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/lib/http/live.dart:
--------------------------------------------------------------------------------
1 | import '../models/live/item.dart';
2 | import '../models/live/room_info.dart';
3 | import '../models/live/room_info_h5.dart';
4 | import 'api.dart';
5 | import 'init.dart';
6 |
7 | class LiveHttp {
8 | static Future liveList(
9 | {int? vmid, int? pn, int? ps, String? orderType}) async {
10 | var res = await Request().get(Api.liveList,
11 | data: {'page': pn, 'page_size': 30, 'platform': 'web'});
12 | if (res.data['code'] == 0) {
13 | return {
14 | 'status': true,
15 | 'data': res.data['data']['list']
16 | .map((e) => LiveItemModel.fromJson(e))
17 | .toList()
18 | };
19 | } else {
20 | return {
21 | 'status': false,
22 | 'data': [],
23 | 'msg': res.data['message'],
24 | };
25 | }
26 | }
27 |
28 | static Future liveRoomInfo({roomId, qn}) async {
29 | var res = await Request().get(Api.liveRoomInfo, data: {
30 | 'room_id': roomId,
31 | 'protocol': '0, 1',
32 | 'format': '0, 1, 2',
33 | 'codec': '0, 1',
34 | 'qn': qn,
35 | 'platform': 'web',
36 | 'ptype': 8,
37 | 'dolby': 5,
38 | 'panorama': 1,
39 | });
40 | if (res.data['code'] == 0) {
41 | return {'status': true, 'data': RoomInfoModel.fromJson(res.data['data'])};
42 | } else {
43 | return {
44 | 'status': false,
45 | 'data': [],
46 | 'msg': res.data['message'],
47 | };
48 | }
49 | }
50 |
51 | static Future liveRoomInfoH5({roomId, qn}) async {
52 | var res = await Request().get(Api.liveRoomInfoH5, data: {
53 | 'room_id': roomId,
54 | });
55 | if (res.data['code'] == 0) {
56 | return {
57 | 'status': true,
58 | 'data': RoomInfoH5Model.fromJson(res.data['data'])
59 | };
60 | } else {
61 | return {
62 | 'status': false,
63 | 'data': [],
64 | 'msg': res.data['message'],
65 | };
66 | }
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/lib/models/common/business_type.dart:
--------------------------------------------------------------------------------
1 | enum BusinessType {
2 | // 普通视频
3 | archive,
4 | // 剧集(番剧 / 影视)
5 | pgc,
6 | // 直播
7 | live,
8 | // 文章
9 | articleList,
10 | // 文章
11 | article,
12 | hiddenDurationType,
13 | showBadge
14 | }
15 |
16 | extension BusinessTypeExtension on BusinessType {
17 | String get type =>
18 | ['archive', 'pgc', 'live', 'article-list', 'article'][index];
19 | // 隐藏时长
20 | List get hiddenDurationType => ['live', 'article-list', 'article'];
21 | // 右上
22 | List get showBadge => ['pgc', 'article-list', 'article'];
23 | }
24 |
--------------------------------------------------------------------------------
/lib/models/common/color_type.dart:
--------------------------------------------------------------------------------
1 | import 'package:flutter/material.dart';
2 |
3 | final List