Copy disabled (too large)
Download .txt
Showing preview only (15,689K chars total). Download the full file to get everything.
Repository: bggRGjQaUbCoE/PiliPlus
Branch: main
Commit: 662ccfcf0aa3
Files: 1463
Total size: 14.7 MB
Directory structure:
gitextract_69oby6yj/
├── .fvmrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-反馈.yml
│ │ └── 功能请求.yml
│ └── workflows/
│ ├── build.yml
│ ├── ios.yml
│ ├── linux_x64.yml
│ ├── mac.yml
│ └── win_x64.yml
├── .gitignore
├── .metadata
├── .vscode/
│ ├── launch.json
│ └── settings.json
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── res/
│ │ │ └── values/
│ │ │ └── string.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── piliplus/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── 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
│ │ │ ├── drawable-night/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-night-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ └── ic_launcher.xml
│ │ │ ├── raw/
│ │ │ │ └── keep.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── string.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ └── values-v31/
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle.kts
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle.kts
├── assets/
│ ├── linux/
│ │ ├── DEBIAN/
│ │ │ ├── control
│ │ │ ├── postinst
│ │ │ ├── postrm
│ │ │ └── prerm
│ │ └── com.example.piliplus.desktop
│ └── shaders/
│ ├── Anime4K_AutoDownscalePre_x2.glsl
│ ├── Anime4K_AutoDownscalePre_x4.glsl
│ ├── Anime4K_Clamp_Highlights.glsl
│ ├── Anime4K_Restore_CNN_M.glsl
│ ├── Anime4K_Restore_CNN_S.glsl
│ ├── Anime4K_Restore_CNN_VL.glsl
│ ├── Anime4K_Upscale_CNN_x2_M.glsl
│ ├── Anime4K_Upscale_CNN_x2_S.glsl
│ ├── Anime4K_Upscale_CNN_x2_VL.glsl
│ └── LICENSE
├── distribute_options.yaml
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
│ ├── 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
├── lib/
│ ├── build_config.dart
│ ├── common/
│ │ ├── constants.dart
│ │ ├── skeleton/
│ │ │ ├── dynamic_card.dart
│ │ │ ├── fav_pgc_item.dart
│ │ │ ├── media_bangumi.dart
│ │ │ ├── msg_feed_sys_msg_.dart
│ │ │ ├── msg_feed_top.dart
│ │ │ ├── skeleton.dart
│ │ │ ├── space_opus.dart
│ │ │ ├── video_card_h.dart
│ │ │ ├── video_card_v.dart
│ │ │ ├── video_reply.dart
│ │ │ └── whisper_item.dart
│ │ └── widgets/
│ │ ├── appbar/
│ │ │ └── appbar.dart
│ │ ├── avatars.dart
│ │ ├── back_detector.dart
│ │ ├── badge.dart
│ │ ├── button/
│ │ │ ├── icon_button.dart
│ │ │ ├── more_btn.dart
│ │ │ └── toolbar_icon_button.dart
│ │ ├── color_palette.dart
│ │ ├── colored_box_transition.dart
│ │ ├── cropped_image.dart
│ │ ├── custom_arc.dart
│ │ ├── custom_height_widget.dart
│ │ ├── custom_icon.dart
│ │ ├── custom_toast.dart
│ │ ├── custom_tooltip.dart
│ │ ├── dialog/
│ │ │ ├── dialog.dart
│ │ │ ├── export_import.dart
│ │ │ ├── report.dart
│ │ │ └── report_member.dart
│ │ ├── disabled_icon.dart
│ │ ├── dynamic_sliver_app_bar/
│ │ │ ├── dynamic_sliver_app_bar.dart
│ │ │ ├── rendering/
│ │ │ │ └── sliver_persistent_header.dart
│ │ │ └── sliver_persistent_header.dart
│ │ ├── flutter/
│ │ │ ├── chat_list_view.dart
│ │ │ ├── draggable_sheet/
│ │ │ │ ├── draggable_scrollable_sheet_dyn.dart
│ │ │ │ └── draggable_scrollable_sheet_topic.dart
│ │ │ ├── layout_builder.dart
│ │ │ ├── list_tile.dart
│ │ │ ├── page/
│ │ │ │ ├── page_view.dart
│ │ │ │ ├── scrollable.dart
│ │ │ │ ├── scrollable_helpers.dart
│ │ │ │ └── tabs.dart
│ │ │ ├── pop_scope.dart
│ │ │ ├── popup_menu.dart
│ │ │ ├── refresh_indicator.dart
│ │ │ ├── selectable_text/
│ │ │ │ ├── selectable_region.dart
│ │ │ │ ├── selectable_text.dart
│ │ │ │ ├── selection_area.dart
│ │ │ │ ├── tap_and_drag.dart
│ │ │ │ ├── text.dart
│ │ │ │ └── text_selection.dart
│ │ │ ├── sliver_layout_builder.dart
│ │ │ ├── tabs.dart
│ │ │ ├── text/
│ │ │ │ ├── paragraph.dart
│ │ │ │ ├── rich_text.dart
│ │ │ │ └── text.dart
│ │ │ ├── text_field/
│ │ │ │ ├── adaptive_text_selection_toolbar.dart
│ │ │ │ ├── controller.dart
│ │ │ │ ├── cupertino/
│ │ │ │ │ ├── adaptive_text_selection_toolbar.dart
│ │ │ │ │ ├── spell_check_suggestions_toolbar.dart
│ │ │ │ │ └── text_field.dart
│ │ │ │ ├── editable.dart
│ │ │ │ ├── editable_text.dart
│ │ │ │ ├── spell_check.dart
│ │ │ │ ├── spell_check_suggestions_toolbar.dart
│ │ │ │ ├── system_context_menu.dart
│ │ │ │ ├── text_field.dart
│ │ │ │ └── text_selection.dart
│ │ │ └── vertical_tabs.dart
│ │ ├── gesture/
│ │ │ ├── horizontal_drag_gesture_recognizer.dart
│ │ │ ├── image_horizontal_drag_gesture_recognizer.dart
│ │ │ ├── immediate_tap_gesture_recognizer.dart
│ │ │ ├── mouse_interactive_viewer.dart
│ │ │ └── tap_gesture_recognizer.dart
│ │ ├── image/
│ │ │ ├── cached_network_svg_image.dart
│ │ │ ├── image_save.dart
│ │ │ └── network_img_layer.dart
│ │ ├── image_grid/
│ │ │ ├── image_grid_builder.dart
│ │ │ └── image_grid_view.dart
│ │ ├── image_viewer/
│ │ │ ├── gallery_viewer.dart
│ │ │ ├── hero.dart
│ │ │ ├── hero_dialog_route.dart
│ │ │ ├── image.dart
│ │ │ ├── loading_indicator.dart
│ │ │ └── viewer.dart
│ │ ├── keep_alive_wrapper.dart
│ │ ├── loading_widget/
│ │ │ ├── http_error.dart
│ │ │ ├── loading_widget.dart
│ │ │ └── m3e_loading_indicator.dart
│ │ ├── loading_widget.dart
│ │ ├── marquee.dart
│ │ ├── only_layout_widget.dart
│ │ ├── pair.dart
│ │ ├── pendant_avatar.dart
│ │ ├── player_bar.dart
│ │ ├── progress_bar/
│ │ │ ├── audio_video_progress_bar.dart
│ │ │ ├── segment_progress_bar.dart
│ │ │ └── video_progress_indicator.dart
│ │ ├── radio_widget.dart
│ │ ├── route_aware_mixin.dart
│ │ ├── scale_app.dart
│ │ ├── scroll_behavior.dart
│ │ ├── scroll_physics.dart
│ │ ├── select_mask.dart
│ │ ├── self_sized_horizontal_list.dart
│ │ ├── sliver/
│ │ │ ├── sliver_floating_header.dart
│ │ │ ├── sliver_pinned_dynamic_header.dart
│ │ │ └── sliver_pinned_header.dart
│ │ ├── sliver_wrap.dart
│ │ ├── stat/
│ │ │ └── stat.dart
│ │ ├── stateful_builder.dart
│ │ ├── time_picker.dart
│ │ ├── video_card/
│ │ │ ├── video_card_h.dart
│ │ │ └── video_card_v.dart
│ │ ├── video_popup_menu.dart
│ │ ├── view_safe_area.dart
│ │ └── view_sliver_safe_area.dart
│ ├── grpc/
│ │ ├── audio.dart
│ │ ├── bilibili/
│ │ │ ├── account/
│ │ │ │ └── service/
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── app/
│ │ │ │ ├── archive/
│ │ │ │ │ ├── middleware/
│ │ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── card/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── dynamic/
│ │ │ │ │ ├── common.pb.dart
│ │ │ │ │ ├── common.pbenum.dart
│ │ │ │ │ ├── common.pbjson.dart
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ ├── v1.pbjson.dart
│ │ │ │ │ ├── v2.pb.dart
│ │ │ │ │ ├── v2.pbenum.dart
│ │ │ │ │ └── v2.pbjson.dart
│ │ │ │ ├── im/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── listener/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── playurl/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ └── viewunite/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ ├── common.pbjson.dart
│ │ │ │ ├── pgcanymodel.pb.dart
│ │ │ │ ├── pgcanymodel.pbenum.dart
│ │ │ │ ├── pgcanymodel.pbjson.dart
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── community/
│ │ │ │ └── service/
│ │ │ │ └── dm/
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── dagw/
│ │ │ │ └── component/
│ │ │ │ └── avatar/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ ├── common.pbjson.dart
│ │ │ │ ├── v1/
│ │ │ │ │ ├── plugin.pb.dart
│ │ │ │ │ ├── plugin.pbenum.dart
│ │ │ │ │ └── plugin.pbjson.dart
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── im/
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── type.pb.dart
│ │ │ │ ├── type.pbenum.dart
│ │ │ │ └── type.pbjson.dart
│ │ │ ├── main/
│ │ │ │ └── community/
│ │ │ │ └── reply/
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── metadata/
│ │ │ │ ├── device.pb.dart
│ │ │ │ ├── device.pbenum.dart
│ │ │ │ ├── device.pbjson.dart
│ │ │ │ ├── fawkes.pb.dart
│ │ │ │ ├── fawkes.pbenum.dart
│ │ │ │ ├── fawkes.pbjson.dart
│ │ │ │ ├── locale.pb.dart
│ │ │ │ ├── locale.pbenum.dart
│ │ │ │ ├── locale.pbjson.dart
│ │ │ │ ├── network.pb.dart
│ │ │ │ ├── network.pbenum.dart
│ │ │ │ ├── network.pbjson.dart
│ │ │ │ ├── parabox.pb.dart
│ │ │ │ ├── parabox.pbenum.dart
│ │ │ │ ├── parabox.pbjson.dart
│ │ │ │ ├── restriction.pb.dart
│ │ │ │ ├── restriction.pbenum.dart
│ │ │ │ └── restriction.pbjson.dart
│ │ │ ├── metadata.pb.dart
│ │ │ ├── metadata.pbenum.dart
│ │ │ ├── metadata.pbjson.dart
│ │ │ ├── pagination.pb.dart
│ │ │ ├── pagination.pbenum.dart
│ │ │ ├── pagination.pbjson.dart
│ │ │ ├── playershared.pb.dart
│ │ │ ├── playershared.pbenum.dart
│ │ │ ├── playershared.pbjson.dart
│ │ │ ├── rpc.pb.dart
│ │ │ ├── rpc.pbenum.dart
│ │ │ ├── rpc.pbjson.dart
│ │ │ └── vas/
│ │ │ └── garb/
│ │ │ ├── model.pb.dart
│ │ │ ├── model.pbenum.dart
│ │ │ ├── model.pbjson.dart
│ │ │ ├── service.pb.dart
│ │ │ ├── service.pbenum.dart
│ │ │ └── service.pbjson.dart
│ │ ├── dm.dart
│ │ ├── dyn.dart
│ │ ├── grpc_req.dart
│ │ ├── im.dart
│ │ ├── reply.dart
│ │ ├── space.dart
│ │ ├── url.dart
│ │ └── view.dart
│ ├── http/
│ │ ├── api.dart
│ │ ├── black.dart
│ │ ├── browser_ua.dart
│ │ ├── constants.dart
│ │ ├── danmaku.dart
│ │ ├── danmaku_block.dart
│ │ ├── download.dart
│ │ ├── dynamics.dart
│ │ ├── fan.dart
│ │ ├── fav.dart
│ │ ├── follow.dart
│ │ ├── init.dart
│ │ ├── live.dart
│ │ ├── loading_state.dart
│ │ ├── login.dart
│ │ ├── match.dart
│ │ ├── member.dart
│ │ ├── msg.dart
│ │ ├── music.dart
│ │ ├── pgc.dart
│ │ ├── reply.dart
│ │ ├── retry_interceptor.dart
│ │ ├── search.dart
│ │ ├── sponsor_block.dart
│ │ ├── sponsor_block_api.dart
│ │ ├── user.dart
│ │ ├── validate.dart
│ │ └── video.dart
│ ├── main.dart
│ ├── models/
│ │ ├── common/
│ │ │ ├── account_type.dart
│ │ │ ├── audio_normalization.dart
│ │ │ ├── avatar_badge_type.dart
│ │ │ ├── badge_type.dart
│ │ │ ├── bar_hide_type.dart
│ │ │ ├── dm_block_type.dart
│ │ │ ├── dynamic/
│ │ │ │ ├── dynamic_badge_mode.dart
│ │ │ │ ├── dynamics_type.dart
│ │ │ │ └── up_panel_position.dart
│ │ │ ├── enum_with_label.dart
│ │ │ ├── episode_panel_type.dart
│ │ │ ├── fav_order_type.dart
│ │ │ ├── fav_type.dart
│ │ │ ├── follow_order_type.dart
│ │ │ ├── home_tab_type.dart
│ │ │ ├── image_preview_type.dart
│ │ │ ├── image_type.dart
│ │ │ ├── later_view_type.dart
│ │ │ ├── live/
│ │ │ │ ├── live_contribution_rank_type.dart
│ │ │ │ ├── live_dm_silent_type.dart
│ │ │ │ └── live_search_type.dart
│ │ │ ├── member/
│ │ │ │ ├── contribute_type.dart
│ │ │ │ ├── profile_type.dart
│ │ │ │ ├── search_type.dart
│ │ │ │ ├── tab_type.dart
│ │ │ │ └── user_info_type.dart
│ │ │ ├── msg/
│ │ │ │ ├── msg_type.dart
│ │ │ │ └── msg_unread_type.dart
│ │ │ ├── nav_bar_config.dart
│ │ │ ├── pgc_review_type.dart
│ │ │ ├── publish_panel_type.dart
│ │ │ ├── rank_type.dart
│ │ │ ├── reply/
│ │ │ │ ├── reply_option_type.dart
│ │ │ │ ├── reply_search_type.dart
│ │ │ │ ├── reply_sort_type.dart
│ │ │ │ └── reply_type.dart
│ │ │ ├── search/
│ │ │ │ ├── article_search_type.dart
│ │ │ │ ├── search_type.dart
│ │ │ │ ├── user_search_type.dart
│ │ │ │ └── video_search_type.dart
│ │ │ ├── setting_type.dart
│ │ │ ├── sponsor_block/
│ │ │ │ ├── action_type.dart
│ │ │ │ ├── post_segment_model.dart
│ │ │ │ ├── segment_model.dart
│ │ │ │ ├── segment_type.dart
│ │ │ │ └── skip_type.dart
│ │ │ ├── stat_type.dart
│ │ │ ├── super_chat_type.dart
│ │ │ ├── super_resolution_type.dart
│ │ │ ├── theme/
│ │ │ │ ├── theme_color_type.dart
│ │ │ │ └── theme_type.dart
│ │ │ ├── video/
│ │ │ │ ├── audio_quality.dart
│ │ │ │ ├── cdn_type.dart
│ │ │ │ ├── live_quality.dart
│ │ │ │ ├── source_type.dart
│ │ │ │ ├── subtitle_pref_type.dart
│ │ │ │ ├── video_decode_type.dart
│ │ │ │ ├── video_quality.dart
│ │ │ │ └── video_type.dart
│ │ │ └── webview_menu_type.dart
│ │ ├── dynamics/
│ │ │ ├── article_content_model.dart
│ │ │ ├── result.dart
│ │ │ ├── up.dart
│ │ │ └── vote_model.dart
│ │ ├── home/
│ │ │ └── rcmd/
│ │ │ └── result.dart
│ │ ├── login/
│ │ │ └── model.dart
│ │ ├── member/
│ │ │ ├── info.dart
│ │ │ └── tags.dart
│ │ ├── model_avatar.dart
│ │ ├── model_hot_video_item.dart
│ │ ├── model_owner.dart
│ │ ├── model_owner.g.dart
│ │ ├── model_rec_video_item.dart
│ │ ├── model_video.dart
│ │ ├── pgc_lcf.dart
│ │ ├── search/
│ │ │ ├── result.dart
│ │ │ └── suggest.dart
│ │ ├── user/
│ │ │ ├── danmaku_block.dart
│ │ │ ├── danmaku_rule.dart
│ │ │ ├── danmaku_rule_adapter.dart
│ │ │ ├── info.dart
│ │ │ ├── info.g.dart
│ │ │ ├── stat.dart
│ │ │ └── stat.g.dart
│ │ └── video/
│ │ └── play/
│ │ └── url.dart
│ ├── models_new/
│ │ ├── account_myinfo/
│ │ │ └── data.dart
│ │ ├── article/
│ │ │ ├── article_info/
│ │ │ │ ├── data.dart
│ │ │ │ ├── share_channel.dart
│ │ │ │ └── stats.dart
│ │ │ ├── article_list/
│ │ │ │ ├── article.dart
│ │ │ │ ├── category.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── label.dart
│ │ │ │ ├── last.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── stats.dart
│ │ │ └── article_view/
│ │ │ ├── category.dart
│ │ │ ├── data.dart
│ │ │ ├── label.dart
│ │ │ ├── media.dart
│ │ │ ├── ops.dart
│ │ │ ├── opus.dart
│ │ │ ├── stats.dart
│ │ │ └── tag.dart
│ │ ├── blacklist/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── coin_log/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── danmaku/
│ │ │ └── post.dart
│ │ ├── download/
│ │ │ ├── bili_download_entry_info.dart
│ │ │ ├── bili_download_media_file_info.dart
│ │ │ └── download_info.dart
│ │ ├── dynamic/
│ │ │ ├── dyn_mention/
│ │ │ │ ├── data.dart
│ │ │ │ ├── group.dart
│ │ │ │ └── item.dart
│ │ │ ├── dyn_reserve/
│ │ │ │ └── data.dart
│ │ │ ├── dyn_reserve_info/
│ │ │ │ └── data.dart
│ │ │ ├── dyn_topic_feed/
│ │ │ │ ├── all_sort_by.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── topic_card_list.dart
│ │ │ │ └── topic_sort_by_conf.dart
│ │ │ ├── dyn_topic_pub_search/
│ │ │ │ ├── data.dart
│ │ │ │ ├── new_topic.dart
│ │ │ │ └── page_info.dart
│ │ │ └── dyn_topic_top/
│ │ │ ├── top_details.dart
│ │ │ ├── topic_creator.dart
│ │ │ └── topic_item.dart
│ │ ├── emote/
│ │ │ ├── data.dart
│ │ │ ├── emote.dart
│ │ │ ├── meta.dart
│ │ │ └── package.dart
│ │ ├── fav/
│ │ │ ├── fav_article/
│ │ │ │ ├── author.dart
│ │ │ │ ├── cover.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── stat.dart
│ │ │ ├── fav_detail/
│ │ │ │ ├── cnt_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── info.dart
│ │ │ │ ├── media.dart
│ │ │ │ ├── ogv.dart
│ │ │ │ └── ugc.dart
│ │ │ ├── fav_folder/
│ │ │ │ ├── data.dart
│ │ │ │ └── list.dart
│ │ │ ├── fav_note/
│ │ │ │ ├── arc.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── page.dart
│ │ │ ├── fav_pgc/
│ │ │ │ ├── area.dart
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── badge_infos.dart
│ │ │ │ ├── cc_on_lock.dart
│ │ │ │ ├── config_attrs.dart
│ │ │ │ ├── content_attr.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── first_ep_info.dart
│ │ │ │ ├── highlight_ineffective_hd.dart
│ │ │ │ ├── highlight_ineffective_ott.dart
│ │ │ │ ├── highlight_ineffective_pink.dart
│ │ │ │ ├── list.dart
│ │ │ │ ├── multi_img.dart
│ │ │ │ ├── new_ep.dart
│ │ │ │ ├── producer.dart
│ │ │ │ ├── publish.dart
│ │ │ │ ├── rating.dart
│ │ │ │ ├── rights.dart
│ │ │ │ ├── section.dart
│ │ │ │ ├── series.dart
│ │ │ │ ├── stat.dart
│ │ │ │ └── vip_or_pay.dart
│ │ │ └── fav_topic/
│ │ │ ├── data.dart
│ │ │ ├── page_info.dart
│ │ │ ├── topic_item.dart
│ │ │ └── topic_list.dart
│ │ ├── follow/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── followee_votes/
│ │ │ └── vote.dart
│ │ ├── history/
│ │ │ ├── cursor.dart
│ │ │ ├── data.dart
│ │ │ ├── history.dart
│ │ │ ├── list.dart
│ │ │ └── tab.dart
│ │ ├── later/
│ │ │ ├── bangumi.dart
│ │ │ ├── data.dart
│ │ │ ├── list.dart
│ │ │ ├── page.dart
│ │ │ ├── rights.dart
│ │ │ ├── season.dart
│ │ │ └── stat.dart
│ │ ├── live/
│ │ │ ├── live_area_list/
│ │ │ │ ├── area_item.dart
│ │ │ │ └── area_list.dart
│ │ │ ├── live_contribution_rank/
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── medal_info.dart
│ │ │ ├── live_danmaku/
│ │ │ │ ├── danmaku_msg.dart
│ │ │ │ └── live_emote.dart
│ │ │ ├── live_dm_block/
│ │ │ │ ├── data.dart
│ │ │ │ ├── shield_info.dart
│ │ │ │ ├── shield_rules.dart
│ │ │ │ └── shield_user_list.dart
│ │ │ ├── live_dm_info/
│ │ │ │ ├── data.dart
│ │ │ │ └── host_list.dart
│ │ │ ├── live_emote/
│ │ │ │ ├── data.dart
│ │ │ │ ├── datum.dart
│ │ │ │ └── emoticon.dart
│ │ │ ├── live_feed_index/
│ │ │ │ ├── card_data.dart
│ │ │ │ ├── card_data_item.dart
│ │ │ │ ├── card_data_list_item.dart
│ │ │ │ ├── card_list.dart
│ │ │ │ ├── data.dart
│ │ │ │ └── watched_show.dart
│ │ │ ├── live_follow/
│ │ │ │ ├── data.dart
│ │ │ │ └── item.dart
│ │ │ ├── live_room_info_h5/
│ │ │ │ ├── anchor_info.dart
│ │ │ │ ├── base_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ └── room_info.dart
│ │ │ ├── live_room_play_info/
│ │ │ │ ├── codec.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── format.dart
│ │ │ │ ├── playurl.dart
│ │ │ │ ├── playurl_info.dart
│ │ │ │ ├── stream.dart
│ │ │ │ └── url_info.dart
│ │ │ ├── live_search/
│ │ │ │ ├── data.dart
│ │ │ │ ├── live_search.dart
│ │ │ │ ├── room.dart
│ │ │ │ ├── room_item.dart
│ │ │ │ ├── user.dart
│ │ │ │ └── user_item.dart
│ │ │ ├── live_second_list/
│ │ │ │ ├── data.dart
│ │ │ │ └── tag.dart
│ │ │ └── live_superchat/
│ │ │ ├── data.dart
│ │ │ ├── item.dart
│ │ │ └── user_info.dart
│ │ ├── login_devices/
│ │ │ ├── data.dart
│ │ │ └── device.dart
│ │ ├── login_log/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── match/
│ │ │ └── match_info/
│ │ │ ├── contest.dart
│ │ │ ├── data.dart
│ │ │ ├── home_away.dart
│ │ │ ├── season.dart
│ │ │ ├── success_teaminfo.dart
│ │ │ └── team.dart
│ │ ├── media_list/
│ │ │ ├── badge.dart
│ │ │ ├── coin.dart
│ │ │ ├── data.dart
│ │ │ ├── media_list.dart
│ │ │ ├── ogv_info.dart
│ │ │ ├── page.dart
│ │ │ └── rights.dart
│ │ ├── member/
│ │ │ ├── coin_like_arc/
│ │ │ │ ├── data.dart
│ │ │ │ └── item.dart
│ │ │ └── search_archive/
│ │ │ ├── data.dart
│ │ │ ├── episodic_button.dart
│ │ │ ├── list.dart
│ │ │ ├── page.dart
│ │ │ └── vlist.dart
│ │ ├── member_card_info/
│ │ │ ├── card.dart
│ │ │ └── data.dart
│ │ ├── msg/
│ │ │ ├── im_user_infos/
│ │ │ │ └── datum.dart
│ │ │ ├── msg_at/
│ │ │ │ ├── content.dart
│ │ │ │ ├── cursor.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_dnd/
│ │ │ │ └── uid_setting.dart
│ │ │ ├── msg_like/
│ │ │ │ ├── content.dart
│ │ │ │ ├── cursor.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── latest.dart
│ │ │ │ ├── total.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_like_detail/
│ │ │ │ ├── card.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── page.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_reply/
│ │ │ │ ├── content.dart
│ │ │ │ ├── cursor.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_sys/
│ │ │ │ ├── data.dart
│ │ │ │ ├── publisher.dart
│ │ │ │ └── source.dart
│ │ │ ├── msgfeed_unread.dart
│ │ │ └── session_ss/
│ │ │ └── data.dart
│ │ ├── msgfeed_unread/
│ │ │ └── data.dart
│ │ ├── music/
│ │ │ ├── bgm_detail.dart
│ │ │ └── bgm_recommend_list.dart
│ │ ├── pgc/
│ │ │ ├── pgc_index_condition/
│ │ │ │ ├── data.dart
│ │ │ │ ├── sort.dart
│ │ │ │ └── value.dart
│ │ │ ├── pgc_index_result/
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── first_ep.dart
│ │ │ │ └── list.dart
│ │ │ ├── pgc_info_model/
│ │ │ │ ├── activity.dart
│ │ │ │ ├── area.dart
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── brief.dart
│ │ │ │ ├── cooperator.dart
│ │ │ │ ├── danmaku.dart
│ │ │ │ ├── ed.dart
│ │ │ │ ├── episode.dart
│ │ │ │ ├── icon_font.dart
│ │ │ │ ├── new_ep.dart
│ │ │ │ ├── op.dart
│ │ │ │ ├── publish.dart
│ │ │ │ ├── rating.dart
│ │ │ │ ├── result.dart
│ │ │ │ ├── rights.dart
│ │ │ │ ├── season.dart
│ │ │ │ ├── section.dart
│ │ │ │ ├── series.dart
│ │ │ │ ├── skip.dart
│ │ │ │ ├── stat.dart
│ │ │ │ ├── stat_for_unity.dart
│ │ │ │ ├── up_info.dart
│ │ │ │ ├── user_progress.dart
│ │ │ │ ├── user_status.dart
│ │ │ │ └── vt.dart
│ │ │ ├── pgc_rank/
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── icon_font.dart
│ │ │ │ ├── new_ep.dart
│ │ │ │ ├── pgc_rank_item_model.dart
│ │ │ │ └── stat.dart
│ │ │ ├── pgc_review/
│ │ │ │ ├── author.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── stat.dart
│ │ │ └── pgc_timeline/
│ │ │ ├── episode.dart
│ │ │ ├── icon_font.dart
│ │ │ ├── pgc_timeline.dart
│ │ │ └── result.dart
│ │ ├── popular/
│ │ │ ├── popular_precious/
│ │ │ │ └── data.dart
│ │ │ ├── popular_series_list/
│ │ │ │ └── list.dart
│ │ │ └── popular_series_one/
│ │ │ ├── config.dart
│ │ │ └── data.dart
│ │ ├── reply/
│ │ │ ├── content.dart
│ │ │ ├── control.dart
│ │ │ ├── cursor.dart
│ │ │ ├── data.dart
│ │ │ ├── folder.dart
│ │ │ ├── level_info.dart
│ │ │ ├── member.dart
│ │ │ ├── nameplate.dart
│ │ │ ├── pagination_reply.dart
│ │ │ ├── picture.dart
│ │ │ ├── reply.dart
│ │ │ ├── reply_control.dart
│ │ │ ├── senior.dart
│ │ │ ├── top.dart
│ │ │ ├── top_reply.dart
│ │ │ ├── up_action.dart
│ │ │ ├── up_selection.dart
│ │ │ └── upper.dart
│ │ ├── reply2reply/
│ │ │ ├── data.dart
│ │ │ ├── page.dart
│ │ │ └── root.dart
│ │ ├── reply_interaction/
│ │ │ ├── data.dart
│ │ │ └── interact_status.dart
│ │ ├── search/
│ │ │ ├── search_rcmd/
│ │ │ │ └── data.dart
│ │ │ └── search_trending/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── single_unread/
│ │ │ └── data.dart
│ │ ├── space/
│ │ │ ├── space/
│ │ │ │ ├── achieve.dart
│ │ │ │ ├── archive.dart
│ │ │ │ ├── article.dart
│ │ │ │ ├── attention_tip.dart
│ │ │ │ ├── audios.dart
│ │ │ │ ├── author.dart
│ │ │ │ ├── badge.dart
│ │ │ │ ├── button.dart
│ │ │ │ ├── card.dart
│ │ │ │ ├── category.dart
│ │ │ │ ├── cheese.dart
│ │ │ │ ├── coin_archive.dart
│ │ │ │ ├── collection_top_simple.dart
│ │ │ │ ├── color_config.dart
│ │ │ │ ├── colour.dart
│ │ │ │ ├── comic.dart
│ │ │ │ ├── container_size.dart
│ │ │ │ ├── cover.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── day.dart
│ │ │ │ ├── digital_info.dart
│ │ │ │ ├── display.dart
│ │ │ │ ├── draw.dart
│ │ │ │ ├── draw_src.dart
│ │ │ │ ├── elec.dart
│ │ │ │ ├── elec_list.dart
│ │ │ │ ├── elec_set.dart
│ │ │ │ ├── entrance.dart
│ │ │ │ ├── entrance_button.dart
│ │ │ │ ├── entry.dart
│ │ │ │ ├── episodic_button.dart
│ │ │ │ ├── extra.dart
│ │ │ │ ├── favourite2.dart
│ │ │ │ ├── followings_followed_upper.dart
│ │ │ │ ├── general_spec.dart
│ │ │ │ ├── guard.dart
│ │ │ │ ├── honours.dart
│ │ │ │ ├── images.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── label.dart
│ │ │ │ ├── level_info.dart
│ │ │ │ ├── like_archive.dart
│ │ │ │ ├── likes.dart
│ │ │ │ ├── list.dart
│ │ │ │ ├── live.dart
│ │ │ │ ├── live_fans_wearing.dart
│ │ │ │ ├── media.dart
│ │ │ │ ├── nameplate.dart
│ │ │ │ ├── nft.dart
│ │ │ │ ├── nft_certificate.dart
│ │ │ │ ├── nft_show_module.dart
│ │ │ │ ├── night.dart
│ │ │ │ ├── official_verify.dart
│ │ │ │ ├── order.dart
│ │ │ │ ├── play_game.dart
│ │ │ │ ├── pos_spec.dart
│ │ │ │ ├── pr_info.dart
│ │ │ │ ├── preference.dart
│ │ │ │ ├── profession_verify.dart
│ │ │ │ ├── purchase_button.dart
│ │ │ │ ├── relation.dart
│ │ │ │ ├── render_spec.dart
│ │ │ │ ├── res_native_draw.dart
│ │ │ │ ├── resource.dart
│ │ │ │ ├── season.dart
│ │ │ │ ├── senior_inquiry.dart
│ │ │ │ ├── series.dart
│ │ │ │ ├── setting.dart
│ │ │ │ ├── size_spec.dart
│ │ │ │ ├── space_button_list.dart
│ │ │ │ ├── space_tag.dart
│ │ │ │ ├── stats.dart
│ │ │ │ ├── tab.dart
│ │ │ │ ├── tab2.dart
│ │ │ │ ├── top.dart
│ │ │ │ └── ugc_season.dart
│ │ │ ├── space_archive/
│ │ │ │ ├── badge.dart
│ │ │ │ ├── cursor_attr.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── episodic_button.dart
│ │ │ │ ├── history.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── last_watched_locator.dart
│ │ │ │ ├── order.dart
│ │ │ │ ├── season.dart
│ │ │ │ └── stats.dart
│ │ │ ├── space_article/
│ │ │ │ ├── author.dart
│ │ │ │ ├── category.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── list.dart
│ │ │ │ ├── media.dart
│ │ │ │ └── stats.dart
│ │ │ ├── space_audio/
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── statistic.dart
│ │ │ ├── space_cheese/
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── page.dart
│ │ │ ├── space_fav/
│ │ │ │ ├── data.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── media_list_response.dart
│ │ │ ├── space_opus/
│ │ │ │ ├── cover.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── stat.dart
│ │ │ ├── space_season_series/
│ │ │ │ ├── archive.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── page.dart
│ │ │ │ ├── season.dart
│ │ │ │ └── stat.dart
│ │ │ └── space_shop/
│ │ │ ├── below_label.dart
│ │ │ ├── benefit_info.dart
│ │ │ ├── cover.dart
│ │ │ ├── data.dart
│ │ │ ├── item.dart
│ │ │ ├── net_price.dart
│ │ │ ├── report_params.dart
│ │ │ ├── source_desc.dart
│ │ │ └── source_front_tag.dart
│ │ ├── space_setting/
│ │ │ ├── data.dart
│ │ │ └── privacy.dart
│ │ ├── sponsor_block/
│ │ │ ├── segment_item.dart
│ │ │ └── user_info.dart
│ │ ├── sub/
│ │ │ ├── sub/
│ │ │ │ ├── data.dart
│ │ │ │ └── list.dart
│ │ │ └── sub_detail/
│ │ │ ├── data.dart
│ │ │ └── media.dart
│ │ ├── triple/
│ │ │ ├── pgc_triple.dart
│ │ │ └── ugc_triple.dart
│ │ ├── upload_bfs/
│ │ │ └── data.dart
│ │ ├── upower_rank/
│ │ │ ├── data.dart
│ │ │ ├── level_info.dart
│ │ │ ├── rank_info.dart
│ │ │ ├── up_info.dart
│ │ │ └── user_info.dart
│ │ ├── user_real_name/
│ │ │ ├── data.dart
│ │ │ └── reject_page.dart
│ │ └── video/
│ │ ├── video_ai_conclusion/
│ │ │ ├── data.dart
│ │ │ ├── model_result.dart
│ │ │ ├── outline.dart
│ │ │ ├── part_outline.dart
│ │ │ ├── part_subtitle.dart
│ │ │ └── subtitle.dart
│ │ ├── video_detail/
│ │ │ ├── arc.dart
│ │ │ ├── argue_info.dart
│ │ │ ├── data.dart
│ │ │ ├── desc_v2.dart
│ │ │ ├── dimension.dart
│ │ │ ├── episode.dart
│ │ │ ├── page.dart
│ │ │ ├── rights.dart
│ │ │ ├── section.dart
│ │ │ ├── staff.dart
│ │ │ ├── stat.dart
│ │ │ ├── stat_detail.dart
│ │ │ ├── subtitle.dart
│ │ │ ├── ugc_season.dart
│ │ │ ├── user_garb.dart
│ │ │ └── video_detail_response.dart
│ │ ├── video_note_list/
│ │ │ ├── author.dart
│ │ │ ├── data.dart
│ │ │ ├── list.dart
│ │ │ └── page.dart
│ │ ├── video_pbp/
│ │ │ └── data.dart
│ │ ├── video_play_info/
│ │ │ ├── data.dart
│ │ │ ├── interaction.dart
│ │ │ ├── subtitle.dart
│ │ │ ├── subtitle_info.dart
│ │ │ └── view_point.dart
│ │ ├── video_relation/
│ │ │ └── data.dart
│ │ ├── video_shot/
│ │ │ └── data.dart
│ │ ├── video_stein_edgeinfo/
│ │ │ ├── choice.dart
│ │ │ ├── data.dart
│ │ │ ├── edges.dart
│ │ │ ├── preload.dart
│ │ │ ├── question.dart
│ │ │ ├── skin.dart
│ │ │ ├── story_list.dart
│ │ │ └── video.dart
│ │ └── video_tag/
│ │ └── data.dart
│ ├── pages/
│ │ ├── about/
│ │ │ └── view.dart
│ │ ├── article/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── article_ops.dart
│ │ │ ├── html_render.dart
│ │ │ └── opus_content.dart
│ │ ├── article_list/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── audio/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── blacklist/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── coin_log/
│ │ │ └── controller.dart
│ │ ├── common/
│ │ │ ├── common_controller.dart
│ │ │ ├── common_data_controller.dart
│ │ │ ├── common_intro_controller.dart
│ │ │ ├── common_list_controller.dart
│ │ │ ├── common_page.dart
│ │ │ ├── common_whisper_controller.dart
│ │ │ ├── dyn/
│ │ │ │ ├── common_dyn_controller.dart
│ │ │ │ └── common_dyn_page.dart
│ │ │ ├── fab_mixin.dart
│ │ │ ├── multi_select/
│ │ │ │ ├── base.dart
│ │ │ │ └── multi_select_controller.dart
│ │ │ ├── publish/
│ │ │ │ ├── common_publish_page.dart
│ │ │ │ ├── common_rich_text_pub_page.dart
│ │ │ │ ├── common_text_pub_page.dart
│ │ │ │ └── publish_route.dart
│ │ │ ├── reply_controller.dart
│ │ │ ├── search/
│ │ │ │ ├── common_search_controller.dart
│ │ │ │ └── common_search_page.dart
│ │ │ └── slide/
│ │ │ └── common_slide_page.dart
│ │ ├── contact/
│ │ │ └── view.dart
│ │ ├── danmaku/
│ │ │ ├── controller.dart
│ │ │ ├── danmaku_model.dart
│ │ │ └── view.dart
│ │ ├── danmaku_block/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dlna/
│ │ │ └── view.dart
│ │ ├── download/
│ │ │ ├── controller.dart
│ │ │ ├── detail/
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── downloading/
│ │ │ │ └── view.dart
│ │ │ ├── search/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ └── view.dart
│ │ ├── dynamics/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── action_panel.dart
│ │ │ ├── additional_panel.dart
│ │ │ ├── author_panel.dart
│ │ │ ├── blocked_item.dart
│ │ │ ├── content_panel.dart
│ │ │ ├── dyn_content.dart
│ │ │ ├── dynamic_panel.dart
│ │ │ ├── forward_panel.dart
│ │ │ ├── interaction.dart
│ │ │ ├── live_panel.dart
│ │ │ ├── live_panel_sub.dart
│ │ │ ├── live_rcmd_panel.dart
│ │ │ ├── module_panel.dart
│ │ │ ├── rich_node_panel.dart
│ │ │ ├── up_panel.dart
│ │ │ ├── video_panel.dart
│ │ │ └── vote.dart
│ │ ├── dynamics_create/
│ │ │ └── view.dart
│ │ ├── dynamics_create_reserve/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_create_vote/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_detail/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_mention/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── dynamics_repost/
│ │ │ └── view.dart
│ │ ├── dynamics_select_topic/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── dynamics_tab/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_topic/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_topic_rcmd/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── emote/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── episode_panel/
│ │ │ └── view.dart
│ │ ├── exp_log/
│ │ │ └── controller.dart
│ │ ├── fan/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── fav/
│ │ │ ├── article/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widget/
│ │ │ │ └── item.dart
│ │ │ ├── cheese/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── note/
│ │ │ │ ├── child_view.dart
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widget/
│ │ │ │ └── item.dart
│ │ │ ├── pgc/
│ │ │ │ ├── child_view.dart
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widget/
│ │ │ │ └── item.dart
│ │ │ ├── topic/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── video/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ └── view.dart
│ │ ├── fav_create/
│ │ │ └── view.dart
│ │ ├── fav_detail/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── fav_video_card.dart
│ │ ├── fav_folder_sort/
│ │ │ └── view.dart
│ │ ├── fav_panel/
│ │ │ └── view.dart
│ │ ├── fav_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── fav_sort/
│ │ │ └── view.dart
│ │ ├── follow/
│ │ │ ├── child/
│ │ │ │ ├── child_controller.dart
│ │ │ │ └── child_view.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── follow_item.dart
│ │ ├── follow_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── follow_type/
│ │ │ ├── controller.dart
│ │ │ ├── follow_same/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── followed/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── group_panel/
│ │ │ └── view.dart
│ │ ├── history/
│ │ │ ├── base_controller.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── history_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── home/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── hot/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── later/
│ │ │ ├── base_controller.dart
│ │ │ ├── child_view.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── video_card_h_later.dart
│ │ ├── later_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── live_item_app.dart
│ │ ├── live_area/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_area_detail/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_dm_block/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_emote/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_follow/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── live_item_follow.dart
│ │ ├── live_room/
│ │ │ ├── contribution_rank/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ ├── send_danmaku/
│ │ │ │ └── view.dart
│ │ │ ├── superchat/
│ │ │ │ ├── superchat_card.dart
│ │ │ │ └── superchat_panel.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── bottom_control.dart
│ │ │ ├── chat_panel.dart
│ │ │ └── header_control.dart
│ │ ├── live_search/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── live_search_room.dart
│ │ │ └── live_search_user.dart
│ │ ├── log_table/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── login/
│ │ │ ├── controller.dart
│ │ │ ├── geetest/
│ │ │ │ └── geetest_webview_dialog.dart
│ │ │ └── view.dart
│ │ ├── login_devices/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── login_log/
│ │ │ └── controller.dart
│ │ ├── main/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── main_reply/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── match_info/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ ├── header_layout_widget.dart
│ │ │ └── user_info_card.dart
│ │ ├── member_article/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── item.dart
│ │ ├── member_audio/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_cheese/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_coin_arc/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_comic/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_contribute/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_dynamics/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_favorite/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── item.dart
│ │ ├── member_home/
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── fav_item.dart
│ │ │ └── video_card_v_member_home.dart
│ │ ├── member_like_arc/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_opus/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── space_opus_item.dart
│ │ ├── member_pgc/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── pgc_card_v_member_pgc.dart
│ │ ├── member_profile/
│ │ │ └── view.dart
│ │ ├── member_search/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_season_series/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── season_series_card.dart
│ │ ├── member_shop/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_upower_rank/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_video/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── video_card_h_member_video.dart
│ │ ├── mine/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── msg_feed_top/
│ │ │ ├── at_me/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── like_detail/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── like_me/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── reply_me/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ └── sys_msg/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── music/
│ │ │ ├── controller.dart
│ │ │ ├── video/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── music_video_card_h.dart
│ │ ├── my_reply/
│ │ │ └── view.dart
│ │ ├── pgc/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── pgc_card_v.dart
│ │ │ └── pgc_card_v_timeline.dart
│ │ ├── pgc_index/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── pgc_card_v_pgc_index.dart
│ │ ├── pgc_review/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── post/
│ │ │ │ └── view.dart
│ │ │ └── view.dart
│ │ ├── popular_precious/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── popular_series/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── rank/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── zone/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── pgc_rank_item.dart
│ │ ├── rcmd/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── save_panel/
│ │ │ └── view.dart
│ │ ├── search/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── hot_keyword.dart
│ │ │ └── search_text.dart
│ │ ├── search_panel/
│ │ │ ├── all/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── pgc_card_v_search.dart
│ │ │ ├── article/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── controller.dart
│ │ │ ├── live/
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── pgc/
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── user/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── video/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ └── view.dart
│ │ ├── search_result/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── search_trending/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── setting/
│ │ │ ├── extra_setting.dart
│ │ │ ├── models/
│ │ │ │ ├── extra_settings.dart
│ │ │ │ ├── model.dart
│ │ │ │ ├── play_settings.dart
│ │ │ │ ├── privacy_settings.dart
│ │ │ │ ├── recommend_settings.dart
│ │ │ │ ├── style_settings.dart
│ │ │ │ └── video_settings.dart
│ │ │ ├── pages/
│ │ │ │ ├── bar_set.dart
│ │ │ │ ├── color_select.dart
│ │ │ │ ├── display_mode.dart
│ │ │ │ ├── font_size_select.dart
│ │ │ │ ├── logs.dart
│ │ │ │ └── play_speed_set.dart
│ │ │ ├── play_setting.dart
│ │ │ ├── privacy_setting.dart
│ │ │ ├── recommend_setting.dart
│ │ │ ├── slide_color_picker.dart
│ │ │ ├── style_setting.dart
│ │ │ ├── video_setting.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── checkbox_num.dart
│ │ │ ├── checkbox_num_list_tile.dart
│ │ │ ├── dual_slider_dialog.dart
│ │ │ ├── multi_select_dialog.dart
│ │ │ ├── normal_item.dart
│ │ │ ├── ordered_multi_select_dialog.dart
│ │ │ ├── popup_item.dart
│ │ │ ├── select_dialog.dart
│ │ │ ├── slider_dialog.dart
│ │ │ └── switch_item.dart
│ │ ├── settings_search/
│ │ │ └── view.dart
│ │ ├── share/
│ │ │ └── view.dart
│ │ ├── space_setting/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── sponsor_block/
│ │ │ ├── block_mixin.dart
│ │ │ └── view.dart
│ │ ├── subscription/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── subscription_detail/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── sub_video_card.dart
│ │ ├── video/
│ │ │ ├── ai_conclusion/
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ ├── download_panel/
│ │ │ │ └── view.dart
│ │ │ ├── introduction/
│ │ │ │ ├── local/
│ │ │ │ │ ├── controller.dart
│ │ │ │ │ └── view.dart
│ │ │ │ ├── pgc/
│ │ │ │ │ ├── controller.dart
│ │ │ │ │ ├── view.dart
│ │ │ │ │ └── widgets/
│ │ │ │ │ ├── intro_detail.dart
│ │ │ │ │ └── pgc_panel.dart
│ │ │ │ └── ugc/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── action_item.dart
│ │ │ │ ├── menu_row.dart
│ │ │ │ ├── page.dart
│ │ │ │ ├── season.dart
│ │ │ │ └── triple_mixin.dart
│ │ │ ├── medialist/
│ │ │ │ └── view.dart
│ │ │ ├── member/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── note/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── pay_coins/
│ │ │ │ └── view.dart
│ │ │ ├── post_panel/
│ │ │ │ ├── popup_menu_text.dart
│ │ │ │ └── view.dart
│ │ │ ├── related/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── reply/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── reply_item_grpc.dart
│ │ │ │ └── zan_grpc.dart
│ │ │ ├── reply_new/
│ │ │ │ └── view.dart
│ │ │ ├── reply_reply/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── reply_search_item/
│ │ │ │ ├── child/
│ │ │ │ │ ├── controller.dart
│ │ │ │ │ ├── view.dart
│ │ │ │ │ └── widgets/
│ │ │ │ │ └── item.dart
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── send_danmaku/
│ │ │ │ └── view.dart
│ │ │ ├── view.dart
│ │ │ ├── view_point/
│ │ │ │ └── view.dart
│ │ │ └── widgets/
│ │ │ ├── header_control.dart
│ │ │ ├── header_mixin.dart
│ │ │ └── player_focus.dart
│ │ ├── webdav/
│ │ │ ├── view.dart
│ │ │ └── webdav.dart
│ │ ├── webview/
│ │ │ └── view.dart
│ │ ├── whisper/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── whisper_block/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── whisper_detail/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── chat_item.dart
│ │ ├── whisper_link_setting/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── whisper_secondary/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ └── whisper_settings/
│ │ ├── controller.dart
│ │ ├── view.dart
│ │ └── widgets/
│ │ └── item.dart
│ ├── plugin/
│ │ └── pl_player/
│ │ ├── controller.dart
│ │ ├── models/
│ │ │ ├── audio_output_type.dart
│ │ │ ├── bottom_control_type.dart
│ │ │ ├── bottom_progress_behavior.dart
│ │ │ ├── data_source.dart
│ │ │ ├── data_status.dart
│ │ │ ├── double_tap_type.dart
│ │ │ ├── duration.dart
│ │ │ ├── fullscreen_mode.dart
│ │ │ ├── gesture_type.dart
│ │ │ ├── heart_beat_type.dart
│ │ │ ├── hwdec_type.dart
│ │ │ ├── play_repeat.dart
│ │ │ ├── play_speed.dart
│ │ │ ├── play_status.dart
│ │ │ └── video_fit_type.dart
│ │ ├── utils/
│ │ │ ├── danmaku_options.dart
│ │ │ └── fullscreen.dart
│ │ ├── view/
│ │ │ ├── view.dart
│ │ │ └── widgets.dart
│ │ └── widgets/
│ │ ├── app_bar_ani.dart
│ │ ├── backward_seek.dart
│ │ ├── bottom_control.dart
│ │ ├── common_btn.dart
│ │ ├── forward_seek.dart
│ │ ├── mpv_convert_webp.dart
│ │ └── play_pause_btn.dart
│ ├── router/
│ │ └── app_pages.dart
│ ├── scripts/
│ │ ├── bottom_sheet.patch
│ │ ├── build.ps1
│ │ ├── modal_barrier.patch
│ │ ├── mouse_cursor.patch
│ │ └── patch.ps1
│ ├── services/
│ │ ├── account_service.dart
│ │ ├── audio_handler.dart
│ │ ├── audio_session.dart
│ │ ├── download/
│ │ │ ├── download_manager.dart
│ │ │ └── download_service.dart
│ │ ├── logger.dart
│ │ ├── service_locator.dart
│ │ └── shutdown_timer_service.dart
│ ├── tcp/
│ │ └── live.dart
│ └── utils/
│ ├── accounts/
│ │ ├── account.dart
│ │ ├── account_adapter.dart
│ │ ├── account_manager/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── account_mgr.dart
│ │ ├── account_type_adapter.dart
│ │ ├── api_type.dart
│ │ ├── cookie_jar_adapter.dart
│ │ └── grpc_headers.dart
│ ├── accounts.dart
│ ├── app_scheme.dart
│ ├── app_sign.dart
│ ├── asset_utils.dart
│ ├── cache_manager.dart
│ ├── calc_window_position.dart
│ ├── danmaku_utils.dart
│ ├── date_utils.dart
│ ├── duration_utils.dart
│ ├── em.dart
│ ├── extension/
│ │ ├── box_ext.dart
│ │ ├── context_ext.dart
│ │ ├── extension.dart
│ │ ├── file_ext.dart
│ │ ├── get_ext.dart
│ │ ├── iterable_ext.dart
│ │ ├── map_ext.dart
│ │ ├── num_ext.dart
│ │ ├── scroll_controller_ext.dart
│ │ ├── size_ext.dart
│ │ ├── string_ext.dart
│ │ ├── theme_ext.dart
│ │ ├── three_dot_ext.dart
│ │ └── widget_ext.dart
│ ├── fav_utils.dart
│ ├── feed_back.dart
│ ├── global_data.dart
│ ├── grid.dart
│ ├── id_utils.dart
│ ├── image_utils.dart
│ ├── json_file_handler.dart
│ ├── login_utils.dart
│ ├── num_utils.dart
│ ├── page_utils.dart
│ ├── parse_string.dart
│ ├── path_utils.dart
│ ├── permission_handler.dart
│ ├── platform_utils.dart
│ ├── recommend_filter.dart
│ ├── reply_utils.dart
│ ├── request_utils.dart
│ ├── set_int_adapter.dart
│ ├── storage.dart
│ ├── storage_key.dart
│ ├── storage_pref.dart
│ ├── theme_utils.dart
│ ├── update.dart
│ ├── url_utils.dart
│ ├── utils.dart
│ ├── video_utils.dart
│ ├── waterfall.dart
│ └── wbi_sign.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ └── CMakeLists.txt
│ └── runner/
│ ├── CMakeLists.txt
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ └── Flutter-Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── pubspec.yaml
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ └── CMakeLists.txt
├── packaging/
│ └── exe/
│ ├── ChineseSimplified.isl
│ ├── inno_setup.iss
│ └── make_config.yaml
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
================================================
FILE CONTENTS
================================================
================================================
FILE: .fvmrc
================================================
{
"flutter": "3.41.5"
}
================================================
FILE: .github/ISSUE_TEMPLATE/bug-反馈.yml
================================================
name: Bug 反馈
description: 描述你所遇到的bug
labels: [ "bug" ]
title: "[Bug] "
body:
- type: checkboxes
id: checklist
attributes:
label: 检查清单
options:
- label: 搜索了 [历史 issue](https://github.com/bggRGjQaUbCoE/PiliPlus/issues?q=is%3Aissue) ,并未发现相同问题
required: true
- label: 正在使用最新版本。
required: true
- label: 已排除网络问题
required: true
- label: 已排除账号问题
required: true
- label: 已排除设置问题
required: true
- type: checkboxes
id: assign
attributes:
label: Assign
options:
- label: self-assign
required: false
- type: textarea
id: version
attributes:
label: 版本号
validations:
required: true
- type: textarea
id: steps
attributes:
label: 复现步骤
description: 请提供复现该问题所需的具体步骤。
validations:
required: true
- type: textarea
id: expected
attributes:
label: 预期行为
description: 请描述你期望的正确行为或结果。
validations:
required: true
- type: textarea
id: actual
attributes:
label: 实际行为
description: 请描述实际的行为或结果。
validations:
required: true
- type: textarea
id: log
attributes:
label: 错误日志
description: 请提供设置->关于->错误日志中的内容,粘贴在下方代码框中。如果没有,请提供您的app版本号、系统版本、设备型号等相关信息。
- type: textarea
id: info
attributes:
label: 相关信息
description: 请补充截图、录屏、BV号等其他有助于解决问题的信息。
================================================
FILE: .github/ISSUE_TEMPLATE/功能请求.yml
================================================
name: 功能请求
description: 对于功能的一些建议
labels: [ "enhancement" ]
title: "[FR] "
body:
- type: checkboxes
id: checklist
attributes:
label: 检查清单
options:
- label: 搜索了 [历史 issue](https://github.com/bggRGjQaUbCoE/PiliPlus/issues?q=is%3Aissue) ,并未发现相同功能请求
required: true
- label: 正在使用最新版本。
required: true
- label: 设置中未搜索到该功能
required: true
- type: checkboxes
id: assign
attributes:
label: Assign
options:
- label: self-assign
required: false
- type: textarea
id: desc
attributes:
label: 功能描述
description: 请提供对所请求功能的清晰描述。
validations:
required: true
- type: textarea
id: solution
attributes:
label: 解决方案
description: 如果你有任何关于如何实现这个功能的想法或建议,请在这里提供。
- type: textarea
id: addition
attributes:
label: 其他
description: 请提供已实现该功能或类似功能的应用
================================================
FILE: .github/workflows/build.yml
================================================
name: Build
on:
pull_request:
types:
- opened
- synchronize
- reopened
- ready_for_review
paths-ignore:
- "**.md"
workflow_dispatch:
inputs:
build_android:
description: "Build Android"
required: false
default: true
type: boolean
build_ios:
description: "Build iOS"
required: false
default: true
type: boolean
build_mac:
description: "Build Mac"
required: false
default: true
type: boolean
build_win_x64:
description: "Build Win-x64"
required: false
default: true
type: boolean
build_linux_x64:
description: "Build Linux-x64"
required: false
default: true
type: boolean
tag:
description: "tag"
required: false
default: ""
type: string
jobs:
android:
if: ${{ (github.event_name == 'pull_request' && github.repository == 'bggRGjQaUbCoE/PiliPlus') || github.event.inputs.build_android == 'true' }}
name: Release Android
runs-on: ubuntu-latest
permissions: write-all
steps:
- name: 代码迁出
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: 构建Java环境
uses: actions/setup-java@v5
with:
distribution: "zulu"
java-version: "17"
cache: "gradle"
cache-dependency-path: |
android/*.gradle*
android/**/gradle-wrapper.properties
- name: 安装Flutter
uses: subosito/flutter-action@v2
id: flutter-action
with:
channel: stable
flutter-version-file: pubspec.yaml
cache: true
- name: Apply Patch
shell: pwsh
run: lib/scripts/patch.ps1 android
continue-on-error: true
- name: Write key
if: github.event_name == 'workflow_dispatch'
run: |
if [ ! -z "${{ secrets.SIGN_KEYSTORE_BASE64 }}" ]; then
echo "${{ secrets.SIGN_KEYSTORE_BASE64 }}" | base64 --decode > android/app/key.jks
echo storeFile='key.jks' >> android/key.properties
echo storePassword='${{ secrets.KEYSTORE_PASSWORD }}' >> android/key.properties
echo keyAlias='${{ secrets.KEY_ALIAS }}' >> android/key.properties
echo keyPassword='${{ secrets.KEY_PASSWORD }}' >> android/key.properties
fi
- name: Set and Extract version
if: ${{ github.event_name == 'workflow_dispatch' }}
shell: pwsh
run: lib/scripts/build.ps1 android
- name: Flutter Build Release Apk
if: ${{ github.event_name == 'workflow_dispatch' }}
run: flutter build apk --release --split-per-abi --dart-define-from-file=pili_release.json --pub
- name: Flutter Build Dev Apk
if: ${{ github.event_name == 'pull_request' }}
run: |
flutter build apk --release --split-per-abi --android-project-arg dev=1 --pub
- name: Rename
run: |
for file in build/app/outputs/flutter-apk/app-*-release.apk; do
abi=$(echo "$file" | sed -E 's|.*app-(.*)-release\.apk|\1|')
mv "$file" "PiliPlus_android_${{ env.version }}_${abi}.apk"
done
shell: bash
- name: Release
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag != '' }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag }}
name: ${{ github.event.inputs.tag }}
files: PiliPlus_android_*.apk
- name: 上传
uses: actions/upload-artifact@v7
with:
archive: false
name: Android_arm64-v8a
path: PiliPlus_android_*_arm64-v8a.apk
- name: 上传
uses: actions/upload-artifact@v7
with:
archive: false
name: Android_armeabi-v7a
path: PiliPlus_android_*_armeabi-v7a.apk
- name: 上传
uses: actions/upload-artifact@v7
with:
archive: false
name: Android_x86_64
path: PiliPlus_android_*_x86_64.apk
ios:
if: ${{ (github.event_name == 'pull_request' && github.repository == 'bggRGjQaUbCoE/PiliPlus') || github.event.inputs.build_ios == 'true' }}
uses: ./.github/workflows/ios.yml
permissions: write-all
with:
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
mac:
if: ${{ github.event.inputs.build_mac == 'true' }}
uses: ./.github/workflows/mac.yml
permissions: write-all
with:
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
win_x64:
if: ${{ (github.event_name == 'pull_request' && github.repository == 'bggRGjQaUbCoE/PiliPlus') || github.event.inputs.build_win_x64 == 'true' }}
uses: ./.github/workflows/win_x64.yml
permissions: write-all
with:
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
linux_x64:
if: ${{ github.event.inputs.build_linux_x64 == 'true' }}
uses: ./.github/workflows/linux_x64.yml
permissions: write-all
with:
tag: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.tag || '' }}
================================================
FILE: .github/workflows/ios.yml
================================================
name: Build for iOS
on:
workflow_call:
inputs:
tag:
description: "tag"
required: false
default: ""
type: string
workflow_dispatch:
jobs:
build-macos-app:
name: Release IOS
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version-file: pubspec.yaml
- name: Set and Extract version
shell: pwsh
run: lib/scripts/build.ps1
- name: Apply Patch
shell: pwsh
run: lib/scripts/patch.ps1 iOS
continue-on-error: true
- name: Build iOS
run: |
flutter build ios --release --no-codesign --dart-define-from-file=pili_release.json
ln -sf ./build/ios/iphoneos Payload
# make AltSign happy...
find Payload/Runner.app/Frameworks -type d -name "*.framework" -exec codesign --force --sign - --preserve-metadata=identifier,entitlements {} \;
zip -r9 PiliPlus_ios_${{env.version}}.ipa Payload/Runner.app
- name: Release
if: ${{ github.event.inputs.tag != '' }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag }}
name: ${{ github.event.inputs.tag }}
files: |
PiliPlus_ios_*.ipa
- name: Upload ios release
uses: actions/upload-artifact@v7
with:
archive: false
name: iOS-release
path: PiliPlus_ios_*.ipa
================================================
FILE: .github/workflows/linux_x64.yml
================================================
name: Build for Linux x64
on:
workflow_call:
inputs:
tag:
description: "tag"
required: false
default: ""
type: string
workflow_dispatch:
jobs:
build-linux-app:
name: Release Linux x64
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y clang cmake libgtk-3-dev ninja-build libayatana-appindicator3-dev unzip webkit2gtk-4.1 libasound2-dev rpm patchelf
sudo apt-get install -y gcc g++ autoconf automake debhelper glslang-dev ladspa-sdk xutils-dev libasound2-dev \
libarchive-dev libbluray-dev libbs2b-dev libcaca-dev libcdio-paranoia-dev libdrm-dev \
libdav1d-dev libdvdnav-dev libegl1-mesa-dev libepoxy-dev libfontconfig-dev libfreetype6-dev \
libfribidi-dev libgl1-mesa-dev libgbm-dev libgme-dev libgsm1-dev libharfbuzz-dev libjpeg-dev \
libbrotli-dev liblcms2-dev libmodplug-dev libmp3lame-dev libopenal-dev \
libopus-dev libopencore-amrnb-dev libopencore-amrwb-dev libpulse-dev librtmp-dev \
libsdl2-dev libsixel-dev libssh-dev libsoxr-dev libspeex-dev libtool \
libv4l-dev libva-dev libvdpau-dev libvorbis-dev libvo-amrwbenc-dev \
libunwind-dev libvpx-dev libwayland-dev libx11-dev libxext-dev \
libxkbcommon-dev libxrandr-dev libxss-dev libxv-dev libxvidcore-dev \
linux-libc-dev nasm ninja-build pkg-config python3 python3-docutils wayland-protocols \
x11proto-core-dev zlib1g-dev libfdk-aac-dev libtheora-dev libwebp-dev \
unixodbc-dev libpq-dev libxxhash-dev libaom-dev \
libgtk-3-0 libblkid1 liblzma5 libmpv-dev
shell: bash
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version-file: pubspec.yaml
cache: true
- name: Set and Extract version
shell: pwsh
run: lib/scripts/build.ps1
- name: Apply Patch
shell: pwsh
run: lib/scripts/patch.ps1 Linux
continue-on-error: true
#TODO: deb and rpm packages need to be build
- name: Build Linux
run: flutter build linux --release -v --pub --dart-define-from-file=pili_release.json
- name: Package .tar.gz
run: tar -zcvf PiliPlus_linux_${{ env.version }}_amd64.tar.gz -C build/linux/x64/release/bundle .
- name: Packege deb
run: |
printf "建立构建目录...\n"
mkdir "PiliPlus_linux_${{ env.version }}_amd64"
pushd "PiliPlus_linux_${{ env.version }}_amd64"
mkdir -p opt/PiliPlus
mkdir -p usr/share/applications
mkdir -p usr/share/icons/hicolor/512x512/apps
printf "复制文件...\n"
cp -r ../build/linux/x64/release/bundle/* opt/PiliPlus
cp -r ../assets/linux/DEBIAN .
cp ../assets/linux/com.example.piliplus.desktop usr/share/applications
cp ../assets/images/logo/logo.png usr/share/icons/hicolor/512x512/apps/piliplus.png
printf "修改控制文件...\n"
# 替换版本号
sed -i "2s/version_need_change/${{ env.version }}/g" DEBIAN/control
# 计算安装大小并替换
SIZE_KB=$(du -s -b --apparent-size . | awk '{print int($1)}')
SIZE_KB=$(($SIZE_KB - $(du -s -b --apparent-size DEBIAN | awk '{print int($1)}')))
SIZE_KB=$(echo $SIZE_KB | awk '{print int($1/1024 + 0.999)}')
printf "\t安装大小: %s KB\n" "$SIZE_KB"
sed -i "9s/size_need_change/${SIZE_KB}/g" DEBIAN/control
printf "生成并写入 md5sums ...\n"
md5sum opt/PiliPlus/piliplus >> DEBIAN/md5sums
md5sum opt/PiliPlus/lib/* >> DEBIAN/md5sums
md5sum opt/PiliPlus/data/icudtl.dat >> DEBIAN/md5sums
printf "设置权限...\n"
chmod 0644 DEBIAN/control
chmod 0644 DEBIAN/md5sums
chmod 0755 DEBIAN/postinst
chmod 0755 DEBIAN/postrm
chmod 0755 DEBIAN/prerm
printf "打包 deb 文件...\n"
popd
dpkg-deb --build --verbose --root-owner-group "PiliPlus_linux_${{ env.version }}_amd64"
printf "完成: PiliPlus_linux_%s_amd64.deb\n" "${{ env.version }}"
shell: bash
- name: Packege rpm
run: |
printf "建立 RPM 构建目录...\n"
RPM_BUILD_ROOT="$PWD/rpm_build"
mkdir -p "$RPM_BUILD_ROOT/BUILD" "$RPM_BUILD_ROOT/RPMS" "$RPM_BUILD_ROOT/SOURCES" "$RPM_BUILD_ROOT/SPECS" "$RPM_BUILD_ROOT/SRPMS"
printf "准备源码归档(仅包含运行时与元数据)...\n"
DATE="$(date '+%a %b %d %Y')"
SRC_DIR="$PWD/piliplus-${{ env.version }}"
mkdir -p "$SRC_DIR/bundle" "$SRC_DIR/assets"
cp -r build/linux/x64/release/bundle/* "$SRC_DIR/bundle/"
cp assets/linux/com.example.piliplus.desktop "$SRC_DIR/assets/com.example.piliplus.desktop"
cp assets/images/logo/logo.png "$SRC_DIR/assets/piliplus.png"
tar -zcvf "$RPM_BUILD_ROOT/SOURCES/piliplus-${{ env.version }}.tar.gz" -C "$PWD" "piliplus-${{ env.version }}"
printf "生成 spec 文件...\n"
cat > "$RPM_BUILD_ROOT/SPECS/piliplus.spec" <<EOF
Name: piliplus
Version: ${{ env.version }}
Release: 1%{?dist}
Summary: PiliPlus Linux Version
License: GPL-3.0
Source0: piliplus-${{ env.version }}.tar.gz
Requires: desktop-file-utils, hicolor-icon-theme
%description
使用 Flutter 开发的 BiliBili 第三方客户端
%prep
%setup -q -n piliplus-${{ env.version }}
%build
%install
mkdir -p %{buildroot}/opt/PiliPlus
cp -r bundle/* %{buildroot}/opt/PiliPlus/
# 二进制权限与命令行入口
chmod 755 %{buildroot}/opt/PiliPlus/piliplus
mkdir -p %{buildroot}/usr/bin
ln -sf /opt/PiliPlus/piliplus %{buildroot}/usr/bin/piliplus
# 桌面集成
mkdir -p %{buildroot}/usr/share/applications
install -m 644 assets/com.example.piliplus.desktop %{buildroot}/usr/share/applications/com.example.piliplus.desktop
mkdir -p %{buildroot}/usr/share/icons/hicolor/512x512/apps
install -m 644 assets/piliplus.png %{buildroot}/usr/share/icons/hicolor/512x512/apps/piliplus.png
%post
update-desktop-database -q || true
gtk-update-icon-cache -q -t -f %{_datadir}/icons/hicolor || true
%postun
update-desktop-database -q || true
gtk-update-icon-cache -q -t -f %{_datadir}/icons/hicolor || true
%files
/opt/PiliPlus
/usr/bin/piliplus
/usr/share/applications/com.example.piliplus.desktop
/usr/share/icons/hicolor/512x512/apps/piliplus.png
%changelog
* DATE - ${{ env.version }}-1
- Initial RPM release
EOF
sed -i "s/DATE/${DATE}/g" "$RPM_BUILD_ROOT/SPECS/piliplus.spec"
printf "构建 RPM 包...\n"
rpmbuild --define "_topdir $RPM_BUILD_ROOT" -bb "$RPM_BUILD_ROOT/SPECS/piliplus.spec"
printf "移动生成的 RPM...\n"
find "$RPM_BUILD_ROOT/RPMS" -name "*.rpm" -exec mv {} "PiliPlus_linux_${{ env.version }}_amd64.rpm" \;
printf "完成: PiliPlus_linux_%s_amd64.rpm\n" "${{ env.version }}"
shell: bash
- name: Package AppImage
run: |
printf "下载 appimagetool...\n"
wget -q https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
chmod +x appimagetool-x86_64.AppImage
printf "建立 AppDir 目录结构...\n"
APPDIR="PiliPlus.AppDir"
mkdir -p "$APPDIR/usr/bin"
mkdir -p "$APPDIR/usr/lib"
mkdir -p "$APPDIR/usr/share/applications"
mkdir -p "$APPDIR/usr/share/icons/hicolor/512x512/apps"
printf "复制应用文件...\n"
cp -r build/linux/x64/release/bundle/* "$APPDIR/usr/bin/"
printf "复制桌面文件和图标...\n"
cp assets/linux/com.example.piliplus.desktop "$APPDIR/com.example.piliplus.desktop"
cp assets/linux/com.example.piliplus.desktop "$APPDIR/usr/share/applications/com.example.piliplus.desktop"
cp assets/images/logo/logo.png "$APPDIR/piliplus.png"
cp assets/images/logo/logo.png "$APPDIR/usr/share/icons/hicolor/512x512/apps/piliplus.png"
printf "创建 AppRun 启动脚本...\n"
cat > "$APPDIR/AppRun" <<'APPRUN_EOF'
#!/bin/bash
SELF=$(readlink -f "$0")
HERE=${SELF%/*}
export PATH="${HERE}/usr/bin:${PATH}"
export LD_LIBRARY_PATH="${HERE}/usr/lib:${LD_LIBRARY_PATH}"
exec "${HERE}/usr/bin/piliplus" "$@"
APPRUN_EOF
chmod +x "$APPDIR/AppRun"
printf "修改桌面文件中的 Exec 路径...\n"
sed -i 's|Exec=piliplus|Exec=piliplus|g' "$APPDIR/com.example.piliplus.desktop"
sed -i 's|Icon=piliplus|Icon=piliplus|g' "$APPDIR/com.example.piliplus.desktop"
printf "打包 AppImage...\n"
ARCH=x86_64 ./appimagetool-x86_64.AppImage "$APPDIR" "PiliPlus_linux_${{ env.version }}_amd64.AppImage"
printf "完成: PiliPlus_linux_%s_amd64.AppImage\n" "${{ env.version }}"
shell: bash
- name: Release
if: ${{ github.event.inputs.tag != '' }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag }}
name: ${{ github.event.inputs.tag }}
files: |
PiliPlus_linux_*.tar.gz
PiliPlus_linux_*.deb
PiliPlus_linux_*.rpm
PiliPlus_linux_*.AppImage
- name: Upload linux targz package
uses: actions/upload-artifact@v7
with:
archive: false
name: Linux_targz_amd64_packege
path: PiliPlus_linux_*.tar.gz
- name: Upload linux deb package
uses: actions/upload-artifact@v7
with:
archive: false
name: Linux_deb_amd64_package
path: PiliPlus_linux_*.deb
- name: Upload linux rpm package
uses: actions/upload-artifact@v7
with:
archive: false
name: Linux_rpm_amd64_package
path: PiliPlus_linux_*.rpm
- name: Upload linux AppImage package
uses: actions/upload-artifact@v7
with:
archive: false
name: Linux_AppImage_amd64_package
path: PiliPlus_linux_*.AppImage
================================================
FILE: .github/workflows/mac.yml
================================================
name: Build for Mac
on:
workflow_call:
inputs:
tag:
description: "tag"
required: false
default: ""
type: string
workflow_dispatch:
jobs:
build-mac-app:
name: Release Mac
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version-file: pubspec.yaml
- name: Set and Extract version
shell: pwsh
run: lib/scripts/build.ps1
- name: Apply Patch
shell: pwsh
run: lib/scripts/patch.ps1 macOS
continue-on-error: true
- name: Build Mac
run: flutter build macos --release --dart-define-from-file=pili_release.json
- name: Prepare Upload
run: |
npm install --global create-dmg
create-dmg build/macos/Build/Products/Release/PiliPlus.app || true
continue-on-error: true
- name: Rename DMG
run: mv PiliPlus*.dmg PiliPlus_macos_${{ env.version }}.dmg
- name: Release
if: ${{ github.event.inputs.tag != '' }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag }}
name: ${{ github.event.inputs.tag }}
files: |
PiliPlus_macos_*.dmg
- name: Upload macos release
uses: actions/upload-artifact@v7
with:
archive: false
name: macOS-release
path: PiliPlus_macos_*.dmg
================================================
FILE: .github/workflows/win_x64.yml
================================================
name: Build for Windows x64
on:
workflow_call:
inputs:
tag:
description: "tag"
required: false
default: ""
type: string
workflow_dispatch:
jobs:
build-windows-app:
name: Release Windows x64
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup flutter
uses: subosito/flutter-action@v2
with:
channel: stable
flutter-version-file: pubspec.yaml
- name: Apply Patch
shell: pwsh
run: lib/scripts/patch.ps1 windows
continue-on-error: true
- name: Add fastforge and Inno Setup
run: |
dart pub global activate fastforge
choco install innosetup
- name: Add Chinese language file for Inno Setup
run: |
Copy-Item "windows/packaging/exe/ChineseSimplified.isl" "C:\Program Files (x86)\Inno Setup 6\Languages\ChineseSimplified.isl"
shell: pwsh
- name: Set and Extract version
shell: pwsh
run: lib/scripts/build.ps1
- name: Build Windows
run: |
fastforge package --platform windows --targets exe --flutter-build-args="dart-define-from-file=pili_release.json"
- name: Prepare Upload
run: |
mkdir -p Release/PiliPlus-Win
mkdir -p PiliPlus-Win-Setup
mv build/windows/x64/runner/Release/* Release/PiliPlus-Win/
mv dist/**/*.exe PiliPlus-Win-Setup/PiliPlus_windows_${{env.version}}_x64_setup.exe
- name: Compress
if: ${{ github.event.inputs.tag != '' }}
run: |
Compress-Archive -Path "Release/PiliPlus-Win" -DestinationPath "PiliPlus_windows_${{env.version}}_x64_portable.zip"
shell: pwsh
- name: Release
if: ${{ github.event.inputs.tag != '' }}
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ github.event.inputs.tag }}
name: ${{ github.event.inputs.tag }}
files: |
PiliPlus_windows_*.zip
PiliPlus-Win-Setup/PiliPlus_windows_*.exe
- name: Upload windows file release
uses: actions/upload-artifact@v7
with:
archive: true
name: PiliPlus_windows_${{env.version}}_x64_portable
path: Release
- name: Upload windows setup release
uses: actions/upload-artifact@v7
with:
archive: false
name: Windows-setup-x64-release
path: PiliPlus-Win-Setup/PiliPlus_windows_*.exe
================================================
FILE: .gitignore
================================================
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
.vscode/
# Flutter repo-specific
/bin/cache/
/bin/internal/bootstrap.bat
/bin/internal/bootstrap.sh
/bin/mingit/
/dev/benchmarks/mega_gallery/
/dev/bots/.recipe_deps
/dev/bots/android_tools/
/dev/devicelab/ABresults*.json
/dev/docs/doc/
/dev/docs/api_docs.zip
/dev/docs/flutter.docs.zip
/dev/docs/lib/
/dev/docs/pubspec.yaml
/dev/integration_tests/**/xcuserdata
/dev/integration_tests/**/Pods
/packages/flutter/coverage/
version
analysis_benchmark.json
# packages file containing multi-root paths
.packages.generated
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
flutter_*.png
linked_*.ds
unlinked.ds
unlinked_spec.ds
# Obfuscation related
app.*.map.json
# Android related
**/android/**/gradle-wrapper.jar
.gradle/
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
**/android/key.properties
*.jks
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/.last_build_id
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/ephemeral
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*
# macOS
**/Flutter/ephemeral/
**/Pods/
**/macos/Flutter/GeneratedPluginRegistrant.swift
**/macos/Flutter/ephemeral
**/xcuserdata/
# Windows
**/windows/flutter/generated_plugin_registrant.cc
**/windows/flutter/generated_plugin_registrant.h
**/windows/flutter/generated_plugins.cmake
# Linux
**/linux/flutter/generated_plugin_registrant.cc
**/linux/flutter/generated_plugin_registrant.h
**/linux/flutter/generated_plugins.cmake
# Coverage
coverage/
# Symbols
app.*.symbols
# Exceptions to above rules.
!**/ios/**/default.mode1v3
!**/ios/**/default.mode2v3
!**/ios/**/default.pbxuser
!**/ios/**/default.perspectivev3
!/packages/flutter_tools/test/data/dart_dependencies_test/**/.packages
!/dev/ci/**/Gemfile.lock
!.vscode/settings.json
!.vscode/launch.json
!.vscode/tasks.json
devtools_options.yaml
# FVM Version Cache
.fvm/
pili_release.json
dist
test*.dart
================================================
FILE: .metadata
================================================
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled.
version:
revision: 4b12645012342076800eb701bcdfe18f87da21cf
channel: stable
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
- platform: android
create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
- platform: ios
create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
- platform: linux
create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
- platform: macos
create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
- platform: web
create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
- platform: windows
create_revision: 4b12645012342076800eb701bcdfe18f87da21cf
base_revision: 4b12645012342076800eb701bcdfe18f87da21cf
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
================================================
FILE: .vscode/launch.json
================================================
{
// 使用 IntelliSense 了解相关属性。
// 悬停以查看现有属性的描述。
// 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "PiliPlus",
"request": "launch",
"type": "dart"
},
{
"name": "PiliPlus (profile mode)",
"request": "launch",
"type": "dart",
"flutterMode": "profile"
},
{
"name": "PiliPlus (release mode)",
"request": "launch",
"type": "dart",
"flutterMode": "release"
}
]
}
================================================
FILE: .vscode/settings.json
================================================
{
"editor.formatOnSave": true,
"[dart]": {
"editor.formatOnType": true
},
"editor.codeActionsOnSave": {
"source.organizeImports": "explicit",
// "source.fixAll": "explicit",
}
}
================================================
FILE: LICENSE
================================================
GNU GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The GNU General Public License is a free, copyleft license for
software and other kinds of works.
The licenses for most software and other practical works are designed
to take away your freedom to share and change the works. By contrast,
the GNU General Public License is intended to guarantee your freedom to
share and change all versions of a program--to make sure it remains free
software for all its users. We, the Free Software Foundation, use the
GNU General Public License for most of our software; it applies also to
any other work released this way by its authors. You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
them if you wish), that you receive source code or can get it if you
want it, that you can change the software or use pieces of it in new
free programs, and that you know you can do these things.
To protect your rights, we need to prevent others from denying you
these rights or asking you to surrender the rights. Therefore, you have
certain responsibilities if you distribute copies of the software, or if
you modify it: responsibilities to respect the freedom of others.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must pass on to the recipients the same
freedoms that you received. You must make sure that they, too, receive
or can get the source code. And you must show them these terms so they
know their rights.
Developers that use the GNU GPL protect your rights with two steps:
(1) assert copyright on the software, and (2) offer you this License
giving you legal permission to copy, distribute and/or modify it.
For the developers' and authors' protection, the GPL clearly explains
that there is no warranty for this free software. For both users' and
authors' sake, the GPL requires that modified versions be marked as
changed, so that their problems will not be attributed erroneously to
authors of previous versions.
Some devices are designed to deny users access to install or run
modified versions of the software inside them, although the manufacturer
can do so. This is fundamentally incompatible with the aim of
protecting users' freedom to change the software. The systematic
pattern of such abuse occurs in the area of products for individuals to
use, which is precisely where it is most unacceptable. Therefore, we
have designed this version of the GPL to prohibit the practice for those
products. If such problems arise substantially in other domains, we
stand ready to extend this provision to those domains in future versions
of the GPL, as needed to protect the freedom of users.
Finally, every program is threatened constantly by software patents.
States should not allow patents to restrict development and use of
software on general-purpose computers, but in those that do, we wish to
avoid the special danger that patents applied to a free program could
make it effectively proprietary. To prevent this, the GPL assures that
patents cannot be used to render the program non-free.
The precise terms and conditions for copying, distribution and
modification follow.
TERMS AND CONDITIONS
0. Definitions.
"This License" refers to version 3 of the GNU General Public License.
"Copyright" also means copyright-like laws that apply to other kinds of
works, such as semiconductor masks.
"The Program" refers to any copyrightable work licensed under this
License. Each licensee is addressed as "you". "Licensees" and
"recipients" may be individuals or organizations.
To "modify" a work means to copy from or adapt all or part of the work
in a fashion requiring copyright permission, other than the making of an
exact copy. The resulting work is called a "modified version" of the
earlier work or a work "based on" the earlier work.
A "covered work" means either the unmodified Program or a work based
on the Program.
To "propagate" a work means to do anything with it that, without
permission, would make you directly or secondarily liable for
infringement under applicable copyright law, except executing it on a
computer or modifying a private copy. Propagation includes copying,
distribution (with or without modification), making available to the
public, and in some countries other activities as well.
To "convey" a work means any kind of propagation that enables other
parties to make or receive copies. Mere interaction with a user through
a computer network, with no transfer of a copy, is not conveying.
An interactive user interface displays "Appropriate Legal Notices"
to the extent that it includes a convenient and prominently visible
feature that (1) displays an appropriate copyright notice, and (2)
tells the user that there is no warranty for the work (except to the
extent that warranties are provided), that licensees may convey the
work under this License, and how to view a copy of this License. If
the interface presents a list of user commands or options, such as a
menu, a prominent item in the list meets this criterion.
1. Source Code.
The "source code" for a work means the preferred form of the work
for making modifications to it. "Object code" means any non-source
form of a work.
A "Standard Interface" means an interface that either is an official
standard defined by a recognized standards body, or, in the case of
interfaces specified for a particular programming language, one that
is widely used among developers working in that language.
The "System Libraries" of an executable work include anything, other
than the work as a whole, that (a) is included in the normal form of
packaging a Major Component, but which is not part of that Major
Component, and (b) serves only to enable use of the work with that
Major Component, or to implement a Standard Interface for which an
implementation is available to the public in source code form. A
"Major Component", in this context, means a major essential component
(kernel, window system, and so on) of the specific operating system
(if any) on which the executable work runs, or a compiler used to
produce the work, or an object code interpreter used to run it.
The "Corresponding Source" for a work in object code form means all
the source code needed to generate, install, and (for an executable
work) run the object code and to modify the work, including scripts to
control those activities. However, it does not include the work's
System Libraries, or general-purpose tools or generally available free
programs which are used unmodified in performing those activities but
which are not part of the work. For example, Corresponding Source
includes interface definition files associated with source files for
the work, and the source code for shared libraries and dynamically
linked subprograms that the work is specifically designed to require,
such as by intimate data communication or control flow between those
subprograms and other parts of the work.
The Corresponding Source need not include anything that users
can regenerate automatically from other parts of the Corresponding
Source.
The Corresponding Source for a work in source code form is that
same work.
2. Basic Permissions.
All rights granted under this License are granted for the term of
copyright on the Program, and are irrevocable provided the stated
conditions are met. This License explicitly affirms your unlimited
permission to run the unmodified Program. The output from running a
covered work is covered by this License only if the output, given its
content, constitutes a covered work. This License acknowledges your
rights of fair use or other equivalent, as provided by copyright law.
You may make, run and propagate covered works that you do not
convey, without conditions so long as your license otherwise remains
in force. You may convey covered works to others for the sole purpose
of having them make modifications exclusively for you, or provide you
with facilities for running those works, provided that you comply with
the terms of this License in conveying all material for which you do
not control copyright. Those thus making or running the covered works
for you must do so exclusively on your behalf, under your direction
and control, on terms that prohibit them from making any copies of
your copyrighted material outside their relationship with you.
Conveying under any other circumstances is permitted solely under
the conditions stated below. Sublicensing is not allowed; section 10
makes it unnecessary.
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
No covered work shall be deemed part of an effective technological
measure under any applicable law fulfilling obligations under article
11 of the WIPO copyright treaty adopted on 20 December 1996, or
similar laws prohibiting or restricting circumvention of such
measures.
When you convey a covered work, you waive any legal power to forbid
circumvention of technological measures to the extent such circumvention
is effected by exercising rights under this License with respect to
the covered work, and you disclaim any intention to limit operation or
modification of the work as a means of enforcing, against the work's
users, your or third parties' legal rights to forbid circumvention of
technological measures.
4. Conveying Verbatim Copies.
You may convey verbatim copies of the Program's source code as you
receive it, in any medium, provided that you conspicuously and
appropriately publish on each copy an appropriate copyright notice;
keep intact all notices stating that this License and any
non-permissive terms added in accord with section 7 apply to the code;
keep intact all notices of the absence of any warranty; and give all
recipients a copy of this License along with the Program.
You may charge any price or no price for each copy that you convey,
and you may offer support or warranty protection for a fee.
5. Conveying Modified Source Versions.
You may convey a work based on the Program, or the modifications to
produce it from the Program, in the form of source code under the
terms of section 4, provided that you also meet all of these conditions:
a) The work must carry prominent notices stating that you modified
it, and giving a relevant date.
b) The work must carry prominent notices stating that it is
released under this License and any conditions added under section
7. This requirement modifies the requirement in section 4 to
"keep intact all notices".
c) You must license the entire work, as a whole, under this
License to anyone who comes into possession of a copy. This
License will therefore apply, along with any applicable section 7
additional terms, to the whole of the work, and all its parts,
regardless of how they are packaged. This License gives no
permission to license the work in any other way, but it does not
invalidate such permission if you have separately received it.
d) If the work has interactive user interfaces, each must display
Appropriate Legal Notices; however, if the Program has interactive
interfaces that do not display Appropriate Legal Notices, your
work need not make them do so.
A compilation of a covered work with other separate and independent
works, which are not by their nature extensions of the covered work,
and which are not combined with it such as to form a larger program,
in or on a volume of a storage or distribution medium, is called an
"aggregate" if the compilation and its resulting copyright are not
used to limit the access or legal rights of the compilation's users
beyond what the individual works permit. Inclusion of a covered work
in an aggregate does not cause this License to apply to the other
parts of the aggregate.
6. Conveying Non-Source Forms.
You may convey a covered work in object code form under the terms
of sections 4 and 5, provided that you also convey the
machine-readable Corresponding Source under the terms of this License,
in one of these ways:
a) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by the
Corresponding Source fixed on a durable physical medium
customarily used for software interchange.
b) Convey the object code in, or embodied in, a physical product
(including a physical distribution medium), accompanied by a
written offer, valid for at least three years and valid for as
long as you offer spare parts or customer support for that product
model, to give anyone who possesses the object code either (1) a
copy of the Corresponding Source for all the software in the
product that is covered by this License, on a durable physical
medium customarily used for software interchange, for a price no
more than your reasonable cost of physically performing this
conveying of source, or (2) access to copy the
Corresponding Source from a network server at no charge.
c) Convey individual copies of the object code with a copy of the
written offer to provide the Corresponding Source. This
alternative is allowed only occasionally and noncommercially, and
only if you received the object code with such an offer, in accord
with subsection 6b.
d) Convey the object code by offering access from a designated
place (gratis or for a charge), and offer equivalent access to the
Corresponding Source in the same way through the same place at no
further charge. You need not require recipients to copy the
Corresponding Source along with the object code. If the place to
copy the object code is a network server, the Corresponding Source
may be on a different server (operated by you or a third party)
that supports equivalent copying facilities, provided you maintain
clear directions next to the object code saying where to find the
Corresponding Source. Regardless of what server hosts the
Corresponding Source, you remain obligated to ensure that it is
available for as long as needed to satisfy these requirements.
e) Convey the object code using peer-to-peer transmission, provided
you inform other peers where the object code and Corresponding
Source of the work are being offered to the general public at no
charge under subsection 6d.
A separable portion of the object code, whose source code is excluded
from the Corresponding Source as a System Library, need not be
included in conveying the object code work.
A "User Product" is either (1) a "consumer product", which means any
tangible personal property which is normally used for personal, family,
or household purposes, or (2) anything designed or sold for incorporation
into a dwelling. In determining whether a product is a consumer product,
doubtful cases shall be resolved in favor of coverage. For a particular
product received by a particular user, "normally used" refers to a
typical or common use of that class of product, regardless of the status
of the particular user or of the way in which the particular user
actually uses, or expects or is expected to use, the product. A product
is a consumer product regardless of whether the product has substantial
commercial, industrial or non-consumer uses, unless such uses represent
the only significant mode of use of the product.
"Installation Information" for a User Product means any methods,
procedures, authorization keys, or other information required to install
and execute modified versions of a covered work in that User Product from
a modified version of its Corresponding Source. The information must
suffice to ensure that the continued functioning of the modified object
code is in no case prevented or interfered with solely because
modification has been made.
If you convey an object code work under this section in, or with, or
specifically for use in, a User Product, and the conveying occurs as
part of a transaction in which the right of possession and use of the
User Product is transferred to the recipient in perpetuity or for a
fixed term (regardless of how the transaction is characterized), the
Corresponding Source conveyed under this section must be accompanied
by the Installation Information. But this requirement does not apply
if neither you nor any third party retains the ability to install
modified object code on the User Product (for example, the work has
been installed in ROM).
The requirement to provide Installation Information does not include a
requirement to continue to provide support service, warranty, or updates
for a work that has been modified or installed by the recipient, or for
the User Product in which it has been modified or installed. Access to a
network may be denied when the modification itself materially and
adversely affects the operation of the network or violates the rules and
protocols for communication across the network.
Corresponding Source conveyed, and Installation Information provided,
in accord with this section must be in a format that is publicly
documented (and with an implementation available to the public in
source code form), and must require no special password or key for
unpacking, reading or copying.
7. Additional Terms.
"Additional permissions" are terms that supplement the terms of this
License by making exceptions from one or more of its conditions.
Additional permissions that are applicable to the entire Program shall
be treated as though they were included in this License, to the extent
that they are valid under applicable law. If additional permissions
apply only to part of the Program, that part may be used separately
under those permissions, but the entire Program remains governed by
this License without regard to the additional permissions.
When you convey a copy of a covered work, you may at your option
remove any additional permissions from that copy, or from any part of
it. (Additional permissions may be written to require their own
removal in certain cases when you modify the work.) You may place
additional permissions on material, added by you to a covered work,
for which you have or can give appropriate copyright permission.
Notwithstanding any other provision of this License, for material you
add to a covered work, you may (if authorized by the copyright holders of
that material) supplement the terms of this License with terms:
a) Disclaiming warranty or limiting liability differently from the
terms of sections 15 and 16 of this License; or
b) Requiring preservation of specified reasonable legal notices or
author attributions in that material or in the Appropriate Legal
Notices displayed by works containing it; or
c) Prohibiting misrepresentation of the origin of that material, or
requiring that modified versions of such material be marked in
reasonable ways as different from the original version; or
d) Limiting the use for publicity purposes of names of licensors or
authors of the material; or
e) Declining to grant rights under trademark law for use of some
trade names, trademarks, or service marks; or
f) Requiring indemnification of licensors and authors of that
material by anyone who conveys the material (or modified versions of
it) with contractual assumptions of liability to the recipient, for
any liability that these contractual assumptions directly impose on
those licensors and authors.
All other non-permissive additional terms are considered "further
restrictions" within the meaning of section 10. If the Program as you
received it, or any part of it, contains a notice stating that it is
governed by this License along with a term that is a further
restriction, you may remove that term. If a license document contains
a further restriction but permits relicensing or conveying under this
License, you may add to a covered work material governed by the terms
of that license document, provided that the further restriction does
not survive such relicensing or conveying.
If you add terms to a covered work in accord with this section, you
must place, in the relevant source files, a statement of the
additional terms that apply to those files, or a notice indicating
where to find the applicable terms.
Additional terms, permissive or non-permissive, may be stated in the
form of a separately written license, or stated as exceptions;
the above requirements apply either way.
8. Termination.
You may not propagate or modify a covered work except as expressly
provided under this License. Any attempt otherwise to propagate or
modify it is void, and will automatically terminate your rights under
this License (including any patent licenses granted under the third
paragraph of section 11).
However, if you cease all violation of this License, then your
license from a particular copyright holder is reinstated (a)
provisionally, unless and until the copyright holder explicitly and
finally terminates your license, and (b) permanently, if the copyright
holder fails to notify you of the violation by some reasonable means
prior to 60 days after the cessation.
Moreover, your license from a particular copyright holder is
reinstated permanently if the copyright holder notifies you of the
violation by some reasonable means, this is the first time you have
received notice of violation of this License (for any work) from that
copyright holder, and you cure the violation prior to 30 days after
your receipt of the notice.
Termination of your rights under this section does not terminate the
licenses of parties who have received copies or rights from you under
this License. If your rights have been terminated and not permanently
reinstated, you do not qualify to receive new licenses for the same
material under section 10.
9. Acceptance Not Required for Having Copies.
You are not required to accept this License in order to receive or
run a copy of the Program. Ancillary propagation of a covered work
occurring solely as a consequence of using peer-to-peer transmission
to receive a copy likewise does not require acceptance. However,
nothing other than this License grants you permission to propagate or
modify any covered work. These actions infringe copyright if you do
not accept this License. Therefore, by modifying or propagating a
covered work, you indicate your acceptance of this License to do so.
10. Automatic Licensing of Downstream Recipients.
Each time you convey a covered work, the recipient automatically
receives a license from the original licensors, to run, modify and
propagate that work, subject to this License. You are not responsible
for enforcing compliance by third parties with this License.
An "entity transaction" is a transaction transferring control of an
organization, or substantially all assets of one, or subdividing an
organization, or merging organizations. If propagation of a covered
work results from an entity transaction, each party to that
transaction who receives a copy of the work also receives whatever
licenses to the work the party's predecessor in interest had or could
give under the previous paragraph, plus a right to possession of the
Corresponding Source of the work from the predecessor in interest, if
the predecessor has it or can get it with reasonable efforts.
You may not impose any further restrictions on the exercise of the
rights granted or affirmed under this License. For example, you may
not impose a license fee, royalty, or other charge for exercise of
rights granted under this License, and you may not initiate litigation
(including a cross-claim or counterclaim in a lawsuit) alleging that
any patent claim is infringed by making, using, selling, offering for
sale, or importing the Program or any portion of it.
11. Patents.
A "contributor" is a copyright holder who authorizes use under this
License of the Program or a work on which the Program is based. The
work thus licensed is called the contributor's "contributor version".
A contributor's "essential patent claims" are all patent claims
owned or controlled by the contributor, whether already acquired or
hereafter acquired, that would be infringed by some manner, permitted
by this License, of making, using, or selling its contributor version,
but do not include claims that would be infringed only as a
consequence of further modification of the contributor version. For
purposes of this definition, "control" includes the right to grant
patent sublicenses in a manner consistent with the requirements of
this License.
Each contributor grants you a non-exclusive, worldwide, royalty-free
patent license under the contributor's essential patent claims, to
make, use, sell, offer for sale, import and otherwise run, modify and
propagate the contents of its contributor version.
In the following three paragraphs, a "patent license" is any express
agreement or commitment, however denominated, not to enforce a patent
(such as an express permission to practice a patent or covenant not to
sue for patent infringement). To "grant" such a patent license to a
party means to make such an agreement or commitment not to enforce a
patent against the party.
If you convey a covered work, knowingly relying on a patent license,
and the Corresponding Source of the work is not available for anyone
to copy, free of charge and under the terms of this License, through a
publicly available network server or other readily accessible means,
then you must either (1) cause the Corresponding Source to be so
available, or (2) arrange to deprive yourself of the benefit of the
patent license for this particular work, or (3) arrange, in a manner
consistent with the requirements of this License, to extend the patent
license to downstream recipients. "Knowingly relying" means you have
actual knowledge that, but for the patent license, your conveying the
covered work in a country, or your recipient's use of the covered work
in a country, would infringe one or more identifiable patents in that
country that you have reason to believe are valid.
If, pursuant to or in connection with a single transaction or
arrangement, you convey, or propagate by procuring conveyance of, a
covered work, and grant a patent license to some of the parties
receiving the covered work authorizing them to use, propagate, modify
or convey a specific copy of the covered work, then the patent license
you grant is automatically extended to all recipients of the covered
work and works based on it.
A patent license is "discriminatory" if it does not include within
the scope of its coverage, prohibits the exercise of, or is
conditioned on the non-exercise of one or more of the rights that are
specifically granted under this License. You may not convey a covered
work if you are a party to an arrangement with a third party that is
in the business of distributing software, under which you make payment
to the third party based on the extent of your activity of conveying
the work, and under which the third party grants, to any of the
parties who would receive the covered work from you, a discriminatory
patent license (a) in connection with copies of the covered work
conveyed by you (or copies made from those copies), or (b) primarily
for and in connection with specific products or compilations that
contain the covered work, unless you entered into that arrangement,
or that patent license was granted, prior to 28 March 2007.
Nothing in this License shall be construed as excluding or limiting
any implied license or other defenses to infringement that may
otherwise be available to you under applicable patent law.
12. No Surrender of Others' Freedom.
If conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot convey a
covered work so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you may
not convey it at all. For example, if you agree to terms that obligate you
to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.
14. Revised Versions of this License.
The Free Software Foundation may publish revised and/or new versions of
the GNU General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the
Program specifies that a certain numbered version of the GNU General
Public License "or any later version" applies to it, you have the
option of following the terms and conditions either of that numbered
version or of any later version published by the Free Software
Foundation. If the Program does not specify a version number of the
GNU General Public License, you may choose any version ever published
by the Free Software Foundation.
If the Program specifies that a proxy can decide which future
versions of the GNU General Public License can be used, that proxy's
public statement of acceptance of a version permanently authorizes you
to choose that version for the Program.
Later license versions may give you additional or different
permissions. However, no additional obligations are imposed on any
author or copyright holder as a result of your choosing to follow a
later version.
15. Disclaimer of Warranty.
THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
16. Limitation of Liability.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
SUCH DAMAGES.
17. Interpretation of Sections 15 and 16.
If the disclaimer of warranty and limitation of liability provided
above cannot be given local legal effect according to their terms,
reviewing courts shall apply local law that most closely approximates
an absolute waiver of all civil liability in connection with the
Program, unless a warranty or assumption of liability accompanies a
copy of the Program in return for a fee.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
state the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
Also add information on how to contact you by electronic and paper mail.
If the program does terminal interaction, make it output a short
notice like this when it starts in an interactive mode:
<program> Copyright (C) <year> <name of author>
This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, your program's commands
might be different; for a GUI interface, you would use an "about box".
You should also get your employer (if you work as a programmer) or school,
if any, to sign a "copyright disclaimer" for the program, if necessary.
For more information on this, and how to apply and follow the GNU GPL, see
<https://www.gnu.org/licenses/>.
The GNU General Public License does not permit incorporating your program
into proprietary programs. If your program is a subroutine library, you
may consider it more useful to permit linking proprietary applications with
the library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License. But first, please read
<https://www.gnu.org/licenses/why-not-lgpl.html>.
================================================
FILE: README.md
================================================
<div align="center">
<img width="200" height="200" src="assets/images/logo/logo.png">
</div>
<div align="center">
<h1>PiliPlus</h1>
<div align="center">



</div>
<p>使用Flutter开发的BiliBili第三方客户端</p>
<img src="assets/screenshots/510shots_so.png" width="32%" alt="home" />
<img src="assets/screenshots/174shots_so.png" width="32%" alt="home" />
<img src="assets/screenshots/850shots_so.png" width="32%" alt="home" />
<br/>
<img src="assets/screenshots/main_screen.png" width="96%" alt="home" />
<br/>
</div>
<br/>
## 适配平台
- [x] Android
- [x] iOS
- [x] Pad
- [x] Windows
- [x] Linux
[](https://repology.org/project/piliplus/versions)
## refactor
- [ ] gRPC [wip]
- [x] 用户界面
- [x] 其他
## feat
- [x] 编辑动态
- [x] DLNA 投屏
- [x] 离线缓存/播放
- [x] 移动端支持点击弹幕悬停,点赞、复制、举报 by [@My-Responsitories](https://github.com/My-Responsitories)
- [x] 播放音频
- [x] 跳过番剧片头/片尾
- [x] 安卓端 `loudnorm` 适配 by [@My-Responsitories](https://github.com/My-Responsitories)
- [x] Win/Mac 支持极验、短信登录 by [@My-Responsitories](https://github.com/My-Responsitories)
- [x] 视频截取动图 by [@My-Responsitories](https://github.com/My-Responsitories)
- [x] AI 原声翻译
- [x] SuperChat
- [x] 播放课堂视频
- [x] 发起投票
- [x] 发布动态/评论支持`富文本编辑`/`表情显示`/`@用户`
- [x] 修改消息设置
- [x] 修改聊天设置
- [x] 展示折叠消息
- [x] 查看用户图文
- [x] 动态话题
- [x] 直播分区
- [x] 分享`视频`/`番剧`/`动态`/`专栏`/`直播`至消息
- [x] 创建/修改/删除关注分组
- [x] 移除粉丝
- [x] 直播弹幕发送表情
- [x] 收藏夹排序
- [x] 稍后再看 ~~`未看`~~ / `未看完` / ~~`已看完`~~ 分类
- [x] WebDAV 备份/恢复设置
- [x] 保存评论/动态
- [x] 高级弹幕 by [@My-Responsitories](https://github.com/My-Responsitories)
- [x] 取消/置顶评论
- [x] 记笔记
- [x] 多账号支持 by [@My-Responsitories](https://github.com/My-Responsitories)
- [x] 屏蔽带货动态/评论
- [x] 互动视频
- [x] 发评/动态反诈
- [x] 高能进度条
- [x] 滑动跳转预览视频缩略图
- [x] Live Photo
- [x] 复制/移动/排序收藏夹/稍后再看视频
- [x] 超分辨率
- [x] 合并弹幕
- [x] 会员彩色弹幕
- [x] 播放全部/继续播放/倒序播放
- [x] Cookie登录
- [x] 显示视频分段信息
- [x] 调节字幕大小
- [x] 调节全屏弹幕大小
- [x] 收藏夹/稍后再看多选删除
- [x] 搜索用户动态
- [x] 直播弹幕
- [x] 修改头像/用户名/签名/性别/生日
- [x] 创建/编辑/删除收藏夹
- [x] 评论楼中楼查看对话
- [x] 评论楼中楼定位点击查看的评论
- [x] 评论楼中楼按热度/时间排序
- [x] 评论点踩
- [x] 私信发图
- [x] 投币动画
- [x] 取消/追番,更新追番状态
- [x] 取消/订阅合集
- [x] SponsorBlock
- [x] 显示视频完整合集
- [x] 三连动画
- [x] 番剧三连
- [x] 带图评论
- [x] 视频TAG
- [x] 筛选搜索
- [x] 转发动态
- [x] 合集图片
- [x] 删除/置顶/撤回私信
- [x] 举报用户/评论/视频/动态
- [x] 删除/发布/置顶文本/图片动态
- [x] 其他
## opt
- [x] 专栏界面
- [x] 私信界面
- [x] 收藏面板
- [x] PIP
- [x] 视频封面
- [x] 回复界面
- [x] 系统通知
- [x] 评论显示
- [x] 亮度调节
- [x] 视频播放
- [x] 视频staff
- [x] 防止bottomsheet遮挡全屏视频
- [x] 其他
## fix
- [x] 番剧分集点赞/投币/收藏
- [x] bugs
<br/>
## 功能
- [x] 推荐视频列表(app端)
- [x] 最热视频列表
- [x] 热门直播
- [x] 番剧列表
- [x] 屏蔽黑名单内用户视频
- [x] 无痕模式(播放视为未登录)
- [x] 游客模式(推荐视为未登录)
- [x] 用户相关
- [x] 粉丝、关注用户、拉黑用户查看
- [x] 用户主页查看
- [x] 关注/取关用户
- [x] 离线缓存
- [x] 稍后再看
- [x] 观看记录
- [x] 我的收藏
- [x] 站内私信
- [x] 动态相关
- [x] 全部、投稿、番剧分类查看
- [x] 动态评论查看
- [x] 动态评论回复功能
- [x] 视频播放相关
- [x] 双击快进/快退
- [x] 双击播放/暂停
- [x] 垂直方向调节亮度/音量
- [x] 垂直方向上滑全屏、下滑退出全屏
- [x] 水平方向手势快进/快退
- [x] 全屏方向设置
- [x] 倍速选择/长按2倍速
- [x] 硬件加速(视机型而定)
- [x] 画质选择(高清画质未解锁)
- [x] 音质选择(视视频而定)
- [x] 解码格式选择(视视频而定)
- [x] 弹幕
- [x] 字幕
- [x] 记忆播放
- [x] 视频比例:高度/宽度适应、填充、包含等
- [x] 搜索相关
- [x] 热搜
- [x] 搜索历史
- [x] 默认搜索词
- [x] 投稿、番剧、直播间、用户搜索
- [x] 视频搜索排序、按时长筛选
- [x] 视频详情页相关
- [x] 视频选集(分p)切换
- [x] 点赞、投币、收藏/取消收藏
- [x] 相关视频查看
- [x] 评论用户身份标识
- [x] 评论(排序)查看、二楼评论查看
- [x] 主楼、二楼评论回复功能
- [x] 评论点赞
- [x] 评论笔记图片查看、保存
- [x] 设置相关
- [x] 画质、音质、解码方式预设
- [x] 图片质量设定
- [x] 主题模式:亮色/暗色/跟随系统
- [x] 震动反馈(可选)
- [x] 高帧率
- [x] 自动全屏
- [x] 横屏适配
- [ ] 等等
<br/>
## 下载
可以通过右侧release进行下载或拉取代码到本地进行编译
<br/>
## 声明
此项目(PiliPlus)是个人为了兴趣而开发,仅用于学习和测试,请于下载后24小时内删除。
所用API皆从官方网站收集,不提供任何破解内容。
在此致敬原作者:[guozhigq/pilipala](https://github.com/guozhigq/pilipala)
在此致敬上游作者:[orz12/PiliPalaX](https://github.com/orz12/PiliPalaX)
本仓库做了更激进的修改,感谢原作者的开源精神。
感谢使用
<br/>
## 致谢
- [bilibili-API-collect](https://github.com/SocialSisterYi/bilibili-API-collect)
- [flutter_meedu_videoplayer](https://github.com/zezo357/flutter_meedu_videoplayer)
- [media-kit](https://github.com/media-kit/media-kit)
- [dio](https://pub.dev/packages/dio)
- 等等
<br/>
<br/>
<br/>
## Star History
<a href="https://www.star-history.com/#bggRGjQaUbCoE/PiliPlus&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=bggRGjQaUbCoE/PiliPlus&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=bggRGjQaUbCoE/PiliPlus&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=bggRGjQaUbCoE/PiliPlus&type=Date" />
</picture>
</a>
================================================
FILE: analysis_options.yaml
================================================
# This file configures the analyzer, which statically analyzes Dart code to
# check for errors, warnings, and lints.
#
# The issues identified by the analyzer are surfaced in the UI of Dart-enabled
# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be
# invoked from the command line by running `flutter analyze`.
# The following line activates a set of recommended lints for Flutter apps,
# packages, and plugins designed to encourage good coding practices.
include: package:flutter_lints/flutter.yaml
analyzer:
exclude:
- lib/grpc/bilibili/**
# - lib/grpc/google/**
# - lib/common/widgets/flutter/**
formatter:
trailing_commas: preserve
linter:
# The lint rules applied to this project can be customized in the
# section below to disable rules from the `package:flutter_lints/flutter.yaml`
# included above or to enable additional rules. A list of all available lints
# and their documentation is published at
# https://dart-lang.github.io/linter/lints/index.html.
#
# Instead of disabling a lint rule for the entire project in the
# section below, it can also be suppressed for a single line of code
# or a specific dart file by using the `// ignore: name_of_lint` and
# `// ignore_for_file: name_of_lint` syntax on the line or in the file
# producing the lint.
# https://dart.dev/tools/linter-rules
rules:
# avoid_print: false # Uncomment to disable the `avoid_print` rule
# prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule
# - always_specify_types
# - avoid_positional_boolean_parameters
- always_declare_return_types
- always_use_package_imports
- avoid_empty_else
- avoid_field_initializers_in_const_classes
- avoid_print
- avoid_relative_lib_imports
- avoid_shadowing_type_parameters
- avoid_single_cascade_in_expression_statements
- avoid_slow_async_io
- avoid_type_to_string
- avoid_types_as_parameter_names
- avoid_unnecessary_containers
- avoid_void_async
- await_only_futures
- camel_case_extensions
- camel_case_types
- cancel_subscriptions
- cascade_invocations
- prefer_const_constructors
- prefer_const_declarations
- sized_box_for_whitespace
- unnecessary_late
- use_colored_box
- use_decorated_box
- use_named_constants
- use_null_aware_elements
- unnecessary_lambdas
- use_is_even_rather_than_modulo
- unnecessary_async
- unnecessary_await_in_return
- unnecessary_getters_setters
- prefer_const_literals_to_create_immutables
- no_literal_bool_comparisons
- use_truncating_division
- use_string_buffers
- unnecessary_statements
- unnecessary_nullable_for_final_variable_declarations
- tighten_type_of_initializing_formals
- prefer_void_to_null
- prefer_spread_collections
- unnecessary_to_list_in_spreads
- prefer_for_elements_to_map_fromIterable
# Additional information about this file can be found at
# https://dart.dev/guides/language/analysis-options
================================================
FILE: android/.gitignore
================================================
gradle-wrapper.jar
/.gradle
/captures/
/gradlew
/gradlew.bat
/local.properties
GeneratedPluginRegistrant.java
# Remember to never publicly share your keystore.
# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app
key.properties
**/*.keystore
**/*.jks
/build
/.kotlin
================================================
FILE: android/app/.gitignore
================================================
/.cxx
/build
================================================
FILE: android/app/build.gradle.kts
================================================
import com.android.build.gradle.internal.api.ApkVariantOutputImpl
import org.jetbrains.kotlin.konan.properties.Properties
plugins {
id("com.android.application")
id("kotlin-android")
// The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins.
id("dev.flutter.flutter-gradle-plugin")
}
android {
namespace = "com.example.piliplus"
compileSdk = flutter.compileSdkVersion
ndkVersion = flutter.ndkVersion
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = JavaVersion.VERSION_17.toString()
}
defaultConfig {
applicationId = "com.example.piliplus"
minSdk = flutter.minSdkVersion
targetSdk = flutter.targetSdkVersion
versionCode = flutter.versionCode
versionName = flutter.versionName
}
packagingOptions.jniLibs.useLegacyPackaging = true
val keyProperties = Properties().also {
val properties = rootProject.file("key.properties")
if (properties.exists())
it.load(properties.inputStream())
}
val config = keyProperties.getProperty("storeFile")?.let {
signingConfigs.create("release") {
storeFile = file(it)
storePassword = keyProperties.getProperty("storePassword")
keyAlias = keyProperties.getProperty("keyAlias")
keyPassword = keyProperties.getProperty("keyPassword")
enableV1Signing = true
enableV2Signing = true
}
}
buildTypes {
all {
signingConfig = config ?: signingConfigs["debug"]
}
release {
if (project.hasProperty("dev")) {
applicationIdSuffix = ".dev"
resValue(
type = "string",
name = "app_name",
value = "PiliPlus dev",
)
}
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
debug {
applicationIdSuffix = ".debug"
}
}
applicationVariants.all {
val variant = this
variant.outputs.forEach { output ->
(output as ApkVariantOutputImpl).versionCodeOverride = flutter.versionCode
}
}
}
flutter {
source = "../.."
}
================================================
FILE: android/app/proguard-rules.pro
================================================
-dontwarn javax.annotation.Nullable
-dontwarn org.conscrypt.Conscrypt
-dontwarn org.conscrypt.OpenSSLProvider
================================================
FILE: android/app/src/debug/res/values/string.xml
================================================
<resources>
<string name="app_name">PiliPlus debug</string>
</resources>
================================================
FILE: android/app/src/main/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.piliplus">
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
</intent>
<!-- If your app opens https URLs -->
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>
<queries>
<intent>
<action android:name=
"android.support.customtabs.action.CustomTabsService" />
</intent>
</queries>
<queries>
<!-- If your app checks for http support -->
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" />
</intent>
</queries>
<application
android:label="@string/app_name"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher"
xmlns:tools="http://schemas.android.com/tools"
android:enableOnBackInvokedCallback="false"
android:allowBackup="false"
android:fullBackupContent="false"
tools:replace="android:allowBackup">
<meta-data
android:name="io.flutter.embedding.android.EnableImpeller"
android:value="false" />
<activity
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/LaunchTheme"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:hardwareAccelerated="true"
android:windowSoftInputMode="adjustResize"
android:supportsPictureInPicture="true"
android:resizeableActivity="true"
>
<meta-data android:name="flutter_deeplinking_enabled" android:value="false" />
<!-- Specifies an Android theme to apply to this Activity as soon as
the Android process has started. This theme is visible to the user
while the Flutter UI initializes. After that, this theme continues
to determine the Window background behind the Flutter UI. -->
<meta-data
android:name="io.flutter.embedding.android.NormalTheme"
android:resource="@style/NormalTheme"
/>
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter android:label="PiliPlus">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="http"/>
<data android:scheme="https"/>
<data android:host="*.bilibili.com"/>
<data android:host="*.bilibili.cn"/>
<data android:host="*.bilibili.tv"/>
<data android:host="bilibili.com"/>
<data android:host="bilibili.cn"/>
<data android:host="bilibili.tv"/>
<data android:host="b23.tv" />
<!--<data android:host="live.bilibili.com"/>-->
<!--<data android:host="www.bilibili.com"/>-->
<!--<data android:host="www.bilibili.tv"/>-->
<!--<data android:host="www.bilibili.cn"/>-->
<!--<data android:host="m.bilibili.cn"/>-->
<!--<data android:host="m.bilibili.com"/>-->
<!--<data android:host="bilibili.cn"/>-->
<!--<data android:host="bilibili.com"/>-->
<!--<data android:host="bangumi.bilibili.com"/>-->
<!--<data android:host="space.bilibili.com"/>-->
</intent-filter>
<intent-filter android:label="PiliPlus">
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="bilibili"/>
<data android:host="forward" />
<data android:host="comment"
android:pathPattern="/detail/.*/.*/.*" />
<data android:host="uper" />
<data android:host="article"
android:pathPattern="/readlist" />
<data android:host="opus" />
<data android:host="advertise" android:path="/home" />
<data android:host="clip" />
<data android:host="search" android:pathPattern=".*" />
<data android:host="stardust-search" />
<data android:host="music" />
<data android:host="cheese" />
<data android:host="bangumi"
android:pathPattern="/season.*" />
<data android:host="bangumi" android:pathPattern="/.*" />
<data android:host="pictureshow"
android:pathPrefix="/creative_center" />
<data android:host="cliparea" />
<data android:host="im" />
<data android:host="im" android:path="/notifications" />
<data android:host="following" />
<data android:host="following"
android:pathPattern="/detail/.*" />
<data android:host="following"
android:path="/publishInfo/" />
<data android:host="laser" android:pathPattern="/.*" />
<data android:host="livearea" />
<data android:host="live" />
<data android:host="catalog" />
<data android:host="browser" />
<data android:host="user_center" />
<data android:host="login" />
<data android:host="space" />
<data android:host="author" />
<data android:host="tag" />
<data android:host="rank" />
<data android:host="external" />
<data android:host="blank" />
<data android:host="home" />
<data android:host="root" />
<data android:host="video" />
<data android:host="story" />
<data android:host="podcast" />
<data android:host="main" android:path="/favorite" />
<data android:host="pgc" android:path="/theater/match" />
<data android:host="pgc" android:path="/theater/square" />
<data android:host="m.bilibili.com"
android:path="/topic-detail" />
<data android:host="article" />
<data android:host="pegasus"
android:pathPattern="/channel/v2/.*" />
<data android:host="feed" android:pathPattern="/channel" />
<data android:host="vip" />
<data android:host="user_center" android:path="/vip" />
<data android:host="history" />
<data android:host="charge" android:path="/rank" />
<data android:host="assistant" />
<data android:host="feedback" />
<data android:host="auth" android:path="/launch" />
</intent-filter>
</activity>
<service
android:name="com.ryanheise.audioservice.AudioService"
android:foregroundServiceType="mediaPlayback"
android:exported="true"
tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.media.browse.MediaBrowserService" />
</intent-filter>
</service>
<activity
android:name="com.yalantis.ucrop.UCropActivity"
android:theme="@style/Ucrop.CropTheme"/>
<receiver
android:name="com.ryanheise.audioservice.MediaButtonReceiver"
android:exported="true"
tools:ignore="Instantiatable">
<intent-filter>
<action android:name="android.intent.action.MEDIA_BUTTON" />
</intent-filter>
</receiver>
<!-- Don't delete the meta-data below.
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
<meta-data
android:name="flutterEmbedding"
android:value="2" />
</application>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="28"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<!--
Media access permissions.
Android 13 or higher.
https://developer.android.com/about/versions/13/behavior-changes-13#granular-media-permissions
-->
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
</manifest>
================================================
FILE: android/app/src/main/kotlin/com/example/piliplus/MainActivity.kt
================================================
package com.example.piliplus
import android.app.PictureInPictureParams
import android.app.SearchManager
import android.content.ComponentName
import android.content.Intent
import android.content.pm.PackageManager
import android.content.res.Configuration
import android.os.Build
import android.os.Bundle
import android.provider.MediaStore
import android.provider.Settings
import android.view.WindowManager.LayoutParams
import androidx.core.net.toUri
import com.ryanheise.audioservice.AudioServiceActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import kotlin.system.exitProcess
class MainActivity : AudioServiceActivity() {
private lateinit var methodChannel: MethodChannel
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
methodChannel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, "PiliPlus")
methodChannel.setMethodCallHandler { call, result ->
when (call.method) {
"back" -> back();
"biliSendCommAntifraud" -> {
try {
val action = call.argument<Int>("action") ?: 0
val oid = call.argument<Number>("oid") ?: 0L
val type = call.argument<Int>("type") ?: 0
val rpid = call.argument<Number>("rpid") ?: 0L
val root = call.argument<Number>("root") ?: 0L
val parent = call.argument<Number>("parent") ?: 0L
val ctime = call.argument<Number>("ctime") ?: 0L
val commentText = call.argument<String>("comment_text") ?: ""
val pictures = call.argument<String?>("pictures")
val sourceId = call.argument<String>("source_id") ?: ""
val uid = call.argument<Number>("uid") ?: 0L
val cookies = call.argument<List<String>>("cookies") ?: emptyList<String>()
val intent = Intent().apply {
component = ComponentName(
"icu.freedomIntrovert.biliSendCommAntifraud",
"icu.freedomIntrovert.biliSendCommAntifraud.ByXposedLaunchedActivity"
)
putExtra("action", action)
putExtra("oid", oid.toLong())
putExtra("type", type)
putExtra("rpid", rpid.toLong())
putExtra("root", root.toLong())
putExtra("parent", parent.toLong())
putExtra("ctime", ctime.toLong())
putExtra("comment_text", commentText)
if (pictures != null)
putExtra("pictures", pictures)
putExtra("source_id", sourceId)
putExtra("uid", uid.toLong())
putStringArrayListExtra("cookies", ArrayList(cookies))
}
startActivity(intent)
} catch (_: Exception) {
}
}
"linkVerifySettings" -> {
val uri = ("package:" + context.packageName).toUri()
try {
val intent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
Intent(Settings.ACTION_APP_OPEN_BY_DEFAULT_SETTINGS, uri)
} else {
Intent("android.intent.action.MAIN", uri).setClassName(
"com.android.settings",
"com.android.settings.applications.InstalledAppOpenByDefaultActivity"
)
}
context.startActivity(intent)
} catch (_: Throwable) {
val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS, uri)
context.startActivity(intent)
}
}
"music" -> {
val title = call.argument<String>("title")
val intent = Intent(MediaStore.INTENT_ACTION_MEDIA_SEARCH).apply {
putExtra(SearchManager.QUERY, title)
putExtra(MediaStore.EXTRA_MEDIA_TITLE, title)
call.argument<String?>("artist")
?.let { putExtra(MediaStore.EXTRA_MEDIA_ARTIST, it) }
call.argument<String?>("album")
?.let { putExtra(MediaStore.EXTRA_MEDIA_ALBUM, it) }
addCategory(Intent.CATEGORY_DEFAULT)
}
try {
if (packageManager.resolveActivity(
intent,
PackageManager.MATCH_DEFAULT_ONLY
) != null
) {
startActivity(intent)
result.success(true)
return@setMethodCallHandler
}
} catch (_: Throwable) {
}
try {
intent.action = MediaStore.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
if (packageManager.resolveActivity(
intent,
PackageManager.MATCH_DEFAULT_ONLY
) != null
) {
startActivity(intent)
result.success(true)
return@setMethodCallHandler
}
} catch (_: Throwable) {
}
result.success(false)
}
"setPipAutoEnterEnabled" -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val params = PictureInPictureParams.Builder()
.setAutoEnterEnabled(call.argument<Boolean>("autoEnable") ?: false)
.build()
setPictureInPictureParams(params)
}
}
else -> result.notImplemented()
}
}
}
private fun back() {
val intent = Intent(Intent.ACTION_MAIN).apply {
addCategory(Intent.CATEGORY_HOME)
flags = Intent.FLAG_ACTIVITY_NEW_TASK
}
startActivity(intent)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
window.attributes.layoutInDisplayCutoutMode =
LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES
}
}
override fun onDestroy() {
stopService(Intent(this, com.ryanheise.audioservice.AudioService::class.java))
super.onDestroy()
android.os.Process.killProcess(android.os.Process.myPid())
exitProcess(0)
}
override fun onUserLeaveHint() {
super.onUserLeaveHint()
methodChannel.invokeMethod("onUserLeaveHint", null)
}
override fun onPictureInPictureModeChanged(
isInPictureInPictureMode: Boolean,
newConfig: Configuration?
) {
super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
MethodChannel(
flutterEngine!!.dartExecutor.binaryMessenger,
"floating"
).invokeMethod("onPipChanged", isInPictureInPictureMode)
}
}
================================================
FILE: android/app/src/main/res/drawable/ic_baseline_forward_10_24.xml
================================================
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M18,13c0,3.31 -2.69,6 -6,6s-6,-2.69 -6,-6s2.69,-6 6,-6v4l5,-5l-5,-5v4c-4.42,0 -8,3.58 -8,8c0,4.42 3.58,8 8,8s8,-3.58 8,-8H18z"/>
<path android:fillColor="@android:color/white" android:pathData="M10.86,15.94l0,-4.27l-0.09,0l-1.77,0.63l0,0.69l1.01,-0.31l0,3.26z"/>
<path android:fillColor="@android:color/white" android:pathData="M12.25,13.44v0.74c0,1.9 1.31,1.82 1.44,1.82c0.14,0 1.44,0.09 1.44,-1.82v-0.74c0,-1.9 -1.31,-1.82 -1.44,-1.82C13.55,11.62 12.25,11.53 12.25,13.44zM14.29,13.32v0.97c0,0.77 -0.21,1.03 -0.59,1.03c-0.38,0 -0.6,-0.26 -0.6,-1.03v-0.97c0,-0.75 0.22,-1.01 0.59,-1.01C14.07,12.3 14.29,12.57 14.29,13.32z"/>
</vector>
================================================
FILE: android/app/src/main/res/drawable/ic_baseline_replay_10_24.xml
================================================
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M11.99,5V1l-5,5l5,5V7c3.31,0 6,2.69 6,6s-2.69,6 -6,6s-6,-2.69 -6,-6h-2c0,4.42 3.58,8 8,8s8,-3.58 8,-8S16.41,5 11.99,5z"/>
<path android:fillColor="@android:color/white" android:pathData="M10.89,16h-0.85v-3.26l-1.01,0.31v-0.69l1.77,-0.63h0.09V16z"/>
<path android:fillColor="@android:color/white" android:pathData="M15.17,14.24c0,0.32 -0.03,0.6 -0.1,0.82s-0.17,0.42 -0.29,0.57s-0.28,0.26 -0.45,0.33s-0.37,0.1 -0.59,0.1s-0.41,-0.03 -0.59,-0.1s-0.33,-0.18 -0.46,-0.33s-0.23,-0.34 -0.3,-0.57s-0.11,-0.5 -0.11,-0.82V13.5c0,-0.32 0.03,-0.6 0.1,-0.82s0.17,-0.42 0.29,-0.57s0.28,-0.26 0.45,-0.33s0.37,-0.1 0.59,-0.1s0.41,0.03 0.59,0.1c0.18,0.07 0.33,0.18 0.46,0.33s0.23,0.34 0.3,0.57s0.11,0.5 0.11,0.82V14.24zM14.32,13.38c0,-0.19 -0.01,-0.35 -0.04,-0.48s-0.07,-0.23 -0.12,-0.31s-0.11,-0.14 -0.19,-0.17s-0.16,-0.05 -0.25,-0.05s-0.18,0.02 -0.25,0.05s-0.14,0.09 -0.19,0.17s-0.09,0.18 -0.12,0.31s-0.04,0.29 -0.04,0.48v0.97c0,0.19 0.01,0.35 0.04,0.48s0.07,0.24 0.12,0.32s0.11,0.14 0.19,0.17s0.16,0.05 0.25,0.05s0.18,-0.02 0.25,-0.05s0.14,-0.09 0.19,-0.17s0.09,-0.19 0.11,-0.32s0.04,-0.29 0.04,-0.48V13.38z"/>
</vector>
================================================
FILE: android/app/src/main/res/drawable/ic_launcher_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<!-- Modify this file to customize your launch splash screen -->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="?android:colorBackground" />
<!-- You can insert your own image assets here -->
<!-- <item>
<bitmap
android:gravity="center"
android:src="@mipmap/launch_image" />
</item> -->
</layer-list>
================================================
FILE: android/app/src/main/res/drawable/ic_launcher_foreground.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="108dp"
android:width="108dp"
android:viewportWidth="108.0"
android:viewportHeight="108.0">
<path
android:fillColor="@color/ic_launcher_foreground"
android:pathData="M56,54L39.78,54l2.22,-10.94h14c3.02,0 5.47,2.45 5.47,5.47 0,3.02 -2.45,5.47 -5.47,5.47zM56,35.77h-9.62l-7.13,36.45h7.51L48.92,61.29h7.08c7.05,0 12.76,-5.71 12.76,-12.76 0,-7.05 -5.71,-12.76 -12.76,-12.76z"
android:fillType="evenOdd" />
</vector>
================================================
FILE: android/app/src/main/res/drawable/ic_notification_icon.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="108.0"
android:viewportHeight="108.0">
<path
android:fillColor="#FF5CB67B"
android:pathData="M57.54,54L28.82,54l3.93,-19.36h24.78c5.35,0 9.68,4.33 9.68,9.68 0,5.35 -4.33,9.68 -9.68,9.68zM57.54,21.73L40.5,21.73L27.88,86.27h13.3l3.83,-19.36h12.54c12.48,0 22.59,-10.11 22.59,-22.59 0,-12.48 -10.11,-22.59 -22.59,-22.59z"
android:strokeWidth="0.252073"
android:fillType="evenOdd" />
</vector>
================================================
FILE: android/app/src/main/res/drawable/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-night/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-night-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/drawable-v21/launch_background.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap android:gravity="fill" android:src="@drawable/background"/>
</item>
<item>
<bitmap android:gravity="center" android:src="@drawable/splash"/>
</item>
</layer-list>
================================================
FILE: android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@color/ic_launcher_background"/>
<foreground android:drawable="@drawable/ic_launcher_foreground"/>
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
================================================
FILE: android/app/src/main/res/raw/keep.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@drawable/*" />
================================================
FILE: android/app/src/main/res/values/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_foreground">#FF5CB67B</color>
<color name="ic_launcher_background">#FFFFFFFF</color>
</resources>
================================================
FILE: android/app/src/main/res/values/string.xml
================================================
<resources>
<string name="app_name">PiliPlus</string>
</resources>
================================================
FILE: android/app/src/main/res/values/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:defaultFocusHighlightEnabled">false</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
<item name="android:windowLayoutInDisplayCutoutMode" tools:targetApi="o_mr1">shortEdges</item>
</style>
<style name="Ucrop.CropTheme" parent="Theme.AppCompat.Light.NoActionBar"/>
</resources>
================================================
FILE: android/app/src/main/res/values-night/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<!-- Show a splash screen on the activity. Automatically removed when
the Flutter engine draws its first frame -->
<item name="android:windowBackground">@drawable/launch_background</item>
<item name="android:defaultFocusHighlightEnabled">false</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-night-v31/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_foreground">@android:color/system_accent1_100</color>
<color name="ic_launcher_background">@android:color/system_neutral1_800</color>
</resources>
================================================
FILE: android/app/src/main/res/values-night-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
<style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:defaultFocusHighlightEnabled">false</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#212121</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/main/res/values-v31/colors.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="ic_launcher_foreground">@android:color/system_neutral2_700</color>
<color name="ic_launcher_background">@android:color/system_accent1_100</color>
</resources>
================================================
FILE: android/app/src/main/res/values-v31/styles.xml
================================================
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
<style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:defaultFocusHighlightEnabled">false</item>
<item name="android:forceDarkAllowed">false</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
<item name="android:windowLayoutInDisplayCutoutMode">shortEdges</item>
<item name="android:windowSplashScreenBackground">#ffffff</item>
</style>
<!-- Theme applied to the Android Window as soon as the process has started.
This theme determines the color of the Android Window while your
Flutter UI initializes, as well as behind your Flutter UI while its
running.
This Theme is only used starting with V2 of Flutter's Android embedding. -->
<style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
<item name="android:windowBackground">?android:colorBackground</item>
</style>
</resources>
================================================
FILE: android/app/src/profile/AndroidManifest.xml
================================================
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.piliplus">
<!-- The INTERNET permission is required for development. Specifically,
the Flutter tool needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
<uses-permission android:name="android.permission.INTERNET"/>
</manifest>
================================================
FILE: android/build.gradle.kts
================================================
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
allprojects {
repositories {
google()
mavenCentral()
}
}
val newBuildDir: Directory =
rootProject.layout.buildDirectory
.dir("../../build")
.get()
rootProject.layout.buildDirectory.value(newBuildDir)
subprojects {
val newSubprojectBuildDir: Directory = newBuildDir.dir(project.name)
project.layout.buildDirectory.value(newSubprojectBuildDir)
}
subprojects {
afterEvaluate {
if (project.extensions.findByName("android") != null) {
val androidExtension =
project.extensions.getByName("android") as com.android.build.gradle.BaseExtension
if (androidExtension.namespace == null) {
androidExtension.namespace = project.group.toString()
}
androidExtension.compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
project.tasks.withType<KotlinCompile>().configureEach {
compilerOptions {
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17)
}
}
val pluginCompileSdkStr = androidExtension.compileSdkVersion
val pluginCompileSdk = pluginCompileSdkStr
?.removePrefix("android-")
?.toIntOrNull()
if (pluginCompileSdk != null && pluginCompileSdk < 31) {
project.logger.error(
"Warning: Overriding compileSdk version in Flutter plugin: ${project.name} " +
"from $pluginCompileSdk to 31 (to work around https://issuetracker.google.com/issues/199180389).\n" +
"If there is not a new version of ${project.name}, consider filing an issue against ${project.name} " +
"to increase their compileSdk to the latest (otherwise try updating to the latest version)."
)
androidExtension.setCompileSdkVersion(31)
}
}
project.buildDir = File(rootProject.buildDir, project.name)
}
}
subprojects {
project.evaluationDependsOn(":app")
}
tasks.register<Delete>("clean") {
delete(rootProject.layout.buildDirectory)
}
================================================
FILE: android/gradle/wrapper/gradle-wrapper.properties
================================================
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
================================================
FILE: android/gradle.properties
================================================
org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError
android.useAndroidX=true
android.enableJetifier=true
================================================
FILE: android/settings.gradle.kts
================================================
pluginManagement {
val flutterSdkPath =
run {
val properties = java.util.Properties()
file("local.properties").inputStream().use { properties.load(it) }
val flutterSdkPath = properties.getProperty("flutter.sdk")
require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
flutterSdkPath
}
includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")
repositories {
google()
mavenCentral()
gradlePluginPortal()
}
}
plugins {
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
id("com.android.application") version "8.12.1" apply false
id("org.jetbrains.kotlin.android") version "2.2.20" apply false
}
include(":app")
================================================
FILE: assets/linux/DEBIAN/control
================================================
Package: PiliPlus
Version: version_need_change
Maintainer: gh-MzA4Nzk <githubaccount2333@proton.me>
Original-Maintainer: bggRGjQaUbCoE <githubaccount56556@proton.me>
Section: x11
Priority: optional
Architecture: amd64
Essential: no
Installed-Size: size_need_change
Description: third-party Bilibili client developed in Flutter
Homepage: https://github.com/bggRGjQaUbCoE/PiliPlus
Depends: libgtk-3-0t64,
libmpv2,
gir1.2-ayatanaappindicator3-0.1,
libayatana-appindicator3-1
================================================
FILE: assets/linux/DEBIAN/postinst
================================================
#!/usr/bin/env bash
ln -sf /opt/PiliPlus/piliplus /usr/bin/piliplus
chmod +x /usr/bin/piliplus
if [ $1 == "configure" ] && [ -x /usr/bin/update-mime-database ]; then
echo "updating mime database..."
update-mime-database /usr/share/mime || true
fi
if [ $1 == "configure" ] && [ -x /usr/bin/gtk-update-icon-cache ]; then
echo "updating icon cache..."
gtk-update-icon-cache -q -f -t /usr/share/icons/hicolor || true
fi
if [ $1 == "configure" ] && [ -x /usr/bin/update-desktop-database ]; then
echo "configure desktop database..."
update-desktop-database -q /usr/share/applications || true
fi
exit 0
================================================
FILE: assets/linux/DEBIAN/postrm
================================================
#!/usr/bin/env bash
rm /usr/bin/piliplus
if [ "$1" = "remove" ] || [ "$1" = "purge" ]; then
if [ -x /usr/bin/update-desktop-database ]; then
echo "updating desktop database..."
update-desktop-database -q /usr/share/applications || true
fi
if [ -x /usr/bin/gtk-update-icon-cache ]; then
echo "updating icon cache..."
gtk-update-icon-cache -q -t /usr/share/icons/hicolor || true
fi
if [ -x /usr/bin/update-mime-database ]; then
echo "updating mime database..."
update-mime-database /usr/share/mime || true
fi
fi
if [ $1 = "purge" ]; then
echo "Removing user data..."
rm -rf /home/*/.local/share/com.example.PiliPlus || true
rm -rf /root/.local/share/com.example.PiliPlus || true
fi
exit 0
================================================
FILE: assets/linux/DEBIAN/prerm
================================================
#!/usr/bin/env bash
if [ "$1" = "remove" ] || [ "$1" = "deconfigure" ]; then
echo "Stopping PiliPlus if running..."
pkill -x piliplus || true
fi
exit 0
================================================
FILE: assets/linux/com.example.piliplus.desktop
================================================
[Desktop Entry]
Type=Application
Name=PiliPlus
Comment=A third-party Bilibili Client developed in Flutter
Comment[zh_CN]=使用 Flutter 开发的 BiliBili 第三方客户端
Exec=piliplus
Icon=piliplus
Terminal=false
StartupWMClass=com.example.piliplus
Categories=Video;AudioVideo;Player;
================================================
FILE: assets/shaders/Anime4K_AutoDownscalePre_x2.glsl
================================================
// This is free and unencumbered software released into the public domain.
// Anyone is free to copy, modify, publish, use, compile, sell, or
// distribute this software, either in source code form or as a compiled
// binary, for any purpose, commercial or non-commercial, and by any
// means.
// In jurisdictions that recognize copyright laws, the author or authors
// of this software dedicate any and all copyright interest in the
// software to the public domain. We make this dedication for the benefit
// of the public at large and to the detriment of our heirs and
// successors. We intend this dedication to be an overt act of
// relinquishment in perpetuity of all present and future rights to this
// software under copyright law.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
// For more information, please refer to <https://unlicense.org>
//!DESC Anime4K-v4.0-AutoDownscalePre-x2
//!HOOK MAIN
//!BIND HOOKED
//!BIND NATIVE
//!WHEN OUTPUT.w NATIVE.w / 2.0 < OUTPUT.h NATIVE.h / 2.0 < * OUTPUT.w NATIVE.w / 1.2 > OUTPUT.h NATIVE.h / 1.2 > * *
//!WIDTH OUTPUT.w
//!HEIGHT OUTPUT.h
vec4 hook() {
return HOOKED_tex(HOOKED_pos);
}
================================================
FILE: assets/shaders/Anime4K_AutoDownscalePre_x4.glsl
================================================
// This is free and unencumbered software released into the public domain.
// Anyone is free to copy, modify, publish, use, compile, sell, or
// distribute this software, either in source code form or as a compiled
// binary, for any purpose, commercial or non-commercial, and by any
// means.
// In jurisdictions that recognize copyright laws, the author or authors
// of this software dedicate any and all copyright interest in the
// software to the public domain. We make this dedication for the benefit
// of the public at large and to the detriment of our heirs and
// successors. We intend this dedication to be an overt act of
// relinquishment in perpetuity of all present and future rights to this
// software under copyright law.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
// OTHER DEALINGS IN THE SOFTWARE.
// For more information, please refer to <https://unlicense.org>
//!DESC Anime4K-v3.2-AutoDownscalePre-x4
//!HOOK MAIN
//!BIND HOOKED
//!BIND NATIVE
//!WHEN OUTPUT.w NATIVE.w / 4.0 < OUTPUT.h NATIVE.h / 4.0 < * OUTPUT.w NATIVE.w / 2.4 > OUTPUT.h NATIVE.h / 2.4 > * *
//!WIDTH OUTPUT.w 2 /
//!HEIGHT OUTPUT.h 2 /
vec4 hook() {
return HOOKED_tex(HOOKED_pos);
}
================================================
FILE: assets/shaders/Anime4K_Clamp_Highlights.glsl
================================================
// MIT License
// Copyright (c) 2019-2021 bloc97
// All rights reserved.
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//!DESC Anime4K-v4.0-De-Ring-Compute-Statistics
//!HOOK MAIN
//!BIND HOOKED
//!SAVE STATSMAX
//!COMPONENTS 1
#define KERNELSIZE 5 //Kernel size, must be an positive odd integer.
#define KERNELHALFSIZE 2 //Half of the kernel size without remainder. Must be equal to trunc(KERNELSIZE/2).
float get_luma(vec4 rgba) {
return dot(vec4(0.299, 0.587, 0.114, 0.0), rgba);
}
vec4 hook() {
float gmax = 0.0;
for (int i=0; i<KERNELSIZE; i++) {
float g = get_luma(MAIN_texOff(vec2(i - KERNELHALFSIZE, 0)));
gmax = max(g, gmax);
}
return vec4(gmax, 0.0, 0.0, 0.0);
}
//!DESC Anime4K-v4.0-De-Ring-Compute-Statistics
//!HOOK MAIN
//!BIND HOOKED
//!BIND STATSMAX
//!SAVE STATSMAX
//!COMPONENTS 1
#define KERNELSIZE 5 //Kernel size, must be an positive odd integer.
#define KERNELHALFSIZE 2 //Half of the kernel size without remainder. Must be equal to trunc(KERNELSIZE/2).
vec4 hook() {
float gmax = 0.0;
for (int i=0; i<KERNELSIZE; i++) {
float g = STATSMAX_texOff(vec2(0, i - KERNELHALFSIZE)).x;
gmax = max(g, gmax);
}
return vec4(gmax, 0.0, 0.0, 0.0);
}
//!DESC Anime4K-v4.0-De-Ring-Clamp
//!HOOK PREKERNEL
//!BIND HOOKED
//!BIND STATSMAX
float get_luma(vec4 rgba) {
return dot(vec4(0.299, 0.587, 0.114, 0.0), rgba);
}
vec4 hook() {
float current_luma = get_luma(HOOKED_tex(HOOKED_pos));
float new_luma = min(current_luma, STATSMAX_tex(HOOKED_pos).x);
//This trick is only possible if the inverse Y->RGB matrix has 1 for every row... (which is the case for BT.709)
//Otherwise we would need to convert RGB to YUV, modify Y then convert back to RGB.
return HOOKED_tex(HOOKED_pos) - (current_luma - new_luma);
}
================================================
FILE: assets/shaders/Anime4K_Restore_CNN_M.glsl
================================================
// MIT License
// Copyright (c) 2019-2021 bloc97
// All rights reserved.
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-4x3x3x3
//!HOOK MAIN
//!BIND MAIN
//!SAVE conv2d_tf
//!WIDTH MAIN.w
//!HEIGHT MAIN.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (MAIN_texOff(vec2(x_off, y_off)))
vec4 hook() {
vec4 result = mat4(-0.09991986, 0.13782342, -0.031251684, -0.06356843, -0.3437488, 0.05450952, 0.34347802, 0.46335372, 0.08607224, 0.044988394, 0.137179, 0.17976908, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, -1.0);
result += mat4(-0.024212424, -0.09278509, -0.00040907756, 0.34552294, -0.13254678, 0.113105185, 0.005667946, -0.00036919137, -0.06375679, 0.009184115, 0.115518734, -0.115506776, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 0.0);
result += mat4(-0.14101827, 0.023523493, 0.044094566, -0.019271746, -0.44348842, -0.08818877, -0.4026149, -0.21995795, -0.15880394, -0.013732858, -0.020751135, 0.012719151, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 1.0);
result += mat4(0.013001821, -0.34503505, 0.39219138, 0.18792126, 0.24760444, -0.016173402, 0.10154511, 0.15453082, -0.058132876, 0.016784398, -0.05808539, -0.11039915, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, -1.0);
result += mat4(0.37024534, 0.041440863, -0.3374568, -0.44994286, 0.19555596, 0.20855539, -0.27974075, -0.5372628, 0.21228147, -0.0295346, -0.56700057, 0.030042822, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 0.0);
result += mat4(-0.12940632, 0.057526, 0.090682045, -0.06985033, -0.13704006, -0.047685407, 0.44615674, -0.48056605, -0.06166251, -0.01883519, 0.2032237, -0.113287605, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 1.0);
result += mat4(0.010856669, -0.35820737, 0.16757219, 0.082619876, -0.03967303, 0.038705572, 0.32652855, -0.012030017, 0.015120559, -0.15314877, 0.23442009, 0.09767922, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, -1.0);
result += mat4(-0.046272673, -0.17752305, 0.082018286, -0.2512824, 0.58619463, -0.060903464, -0.022793597, 0.077803515, -0.17025311, 0.05136993, 0.029383298, -0.15475409, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 0.0);
result += mat4(-0.11212024, 0.13378005, -0.2027488, 0.08056421, -0.11176219, -0.048429377, -0.08396386, 0.10507829, 0.13326839, 0.0430627, 0.051362377, 0.06482755, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 1.0);
result += vec4(-0.061233472, 0.39222646, 0.029704979, 0.02586828);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_tf
//!SAVE conv2d_1_tf
//!WIDTH conv2d_tf.w
//!HEIGHT conv2d_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(-0.16410656, -0.40521824, 0.13121907, -0.02314597, 0.105412476, -0.060401272, -0.043063477, -0.13933973, 0.12558138, -0.020861467, 0.030370515, 0.13178016, -0.14220351, 0.20736893, 0.003321564, -0.29241714) * go_0(-1.0, -1.0);
result += mat4(0.18517321, 0.29162985, -0.26783395, 0.039760686, 0.025527012, -0.067319244, 0.055004176, 0.048916563, 0.12750523, -0.091435954, 0.13818842, 0.36704224, 0.0839921, 0.10186618, -0.17237376, 0.13282418) * go_0(-1.0, 0.0);
result += mat4(-0.1657887, 0.0131325135, -0.17222486, 0.091398895, -0.12756164, -0.08437298, -0.29052997, 0.3269337, 0.15870757, -0.013529402, -0.0581753, 0.11802371, 0.07099966, -0.024063632, 0.31834844, -0.11183859) * go_0(-1.0, 1.0);
result += mat4(0.46036887, -0.07654623, 0.22923063, 0.17463821, 0.10555414, -0.117430426, 0.12406777, -0.011399492, 0.028316498, 0.13684341, 0.009664087, 0.2022659, 0.04953974, -0.31342217, -0.6103131, -0.13605757) * go_0(0.0, -1.0);
result += mat4(0.03406955, -0.39819366, 0.61176, -0.46809456, -0.029321073, 0.46619493, 0.36700186, 0.02288561, 0.11464085, -0.10931452, -0.09154022, 0.07334147, -0.5609916, 0.31826234, -0.011012659, -0.46719545) * go_0(0.0, 0.0);
result += mat4(-0.056855045, 0.27037027, -0.09269696, -0.563572, -0.06816116, -0.22986612, 0.08693167, -0.16246101, 0.09954046, -0.05374176, 0.0071916827, -0.1788692, 0.3825241, -0.1609887, 0.055204768, 0.10213068) * go_0(0.0, 1.0);
result += mat4(0.0646626, 0.102358796, -0.45055822, 0.20557903, -0.23337309, 0.12633002, -0.19299199, -0.15085731, -0.13473304, 0.053790465, -0.10061193, -0.13393497, -0.04264752, -0.029740738, -0.07865285, 0.20883279) * go_0(1.0, -1.0);
result += mat4(0.010471527, -0.033218473, -0.46157447, 0.004866583, 0.23226471, -0.059343327, -0.1439596, 0.13619648, 0.013839963, 0.15930325, 0.043742355, 0.17467323, 0.33772305, 0.40261495, -0.08351293, 0.18129359) * go_0(1.0, 0.0);
result += mat4(-0.12493434, -0.1875134, -0.074943796, -0.0031701606, -0.037142616, 0.1667002, 0.16665547, -0.011248127, 0.0071619414, 0.0034872112, 0.120318964, -0.09625579, 0.14917047, -0.16310586, 0.07231737, 0.30447328) * go_0(1.0, 1.0);
result += mat4(0.093798615, 0.17074613, -0.08780678, -0.012520207, 0.118534856, 0.027508778, -0.2778478, -0.19509242, -0.34137097, 0.32000312, -0.22027159, 0.337515, 0.16220862, 0.108993016, 0.14070526, 0.12784284) * go_1(-1.0, -1.0);
result += mat4(-0.14325632, -0.1467453, -0.27502358, 0.09370837, 0.11821083, -0.012266484, -0.2100548, 0.4707502, -0.06766648, 0.58165014, -0.2512279, -0.33783755, 0.1318925, -0.04346277, 0.15454485, 0.044500057) * go_1(-1.0, 0.0);
result += mat4(-0.05683207, 0.0051946463, -0.108000524, 0.10133204, -0.50763863, 0.007308442, 0.8542404, 0.28387356, 0.022709515, 0.294523, -0.3822472, 0.66166407, 0.01404485, 0.031282708, -0.26756814, -0.123147786) * go_1(-1.0, 1.0);
result += mat4(-0.36455178, 0.3470555, -0.045303088, -0.03170764, -0.15802494, -0.0019141496, -0.25939587, -0.23875342, 0.130428, 0.03954273, -0.17985536, 0.105145946, 0.15804817, 0.12551713, 0.28371975, -0.085748516) * go_1(0.0, -1.0);
result += mat4(0.0060625463, 0.2443924, -0.017692259, -0.20214005, -0.09584515, -0.012805372, -0.13942227, 0.16143198, 0.12942013, 0.41785547, 0.046071563, 0.7030026, 0.10499644, -0.20566013, -0.031321276, 0.27830327) * go_1(0.0, 0.0);
result += mat4(-0.081274964, -0.14562319, 0.27200526, -0.20491314, 0.012910989, 0.024201397, 0.04816258, 0.21297328, -0.22015952, -0.44160756, -0.056035373, 0.33824417, -0.31645304, 0.15469243, 0.053187452, -0.20989445) * go_1(0.0, 1.0);
result += mat4(-0.046550367, 0.033185404, 0.33337244, 0.12853645, 0.23520172, -0.05909214, 0.0861368, 0.10706329, -0.07058717, -0.11759937, -0.18594047, 0.080006264, -0.055425353, -0.12506317, 0.15729053, -0.0915004) * go_1(1.0, -1.0);
result += mat4(0.042516407, 0.14844789, 0.16533111, 0.13502933, -0.0655417, -0.057256397, 0.076713726, -0.23448966, 0.12855926, 0.014219275, 0.051761385, 0.053433083, -0.2446715, -0.4008074, 0.19603717, -0.1796951) * go_1(1.0, 0.0);
result += mat4(0.14777803, 0.15524907, 0.043158617, -0.06996876, 0.19210646, -0.2144364, -0.47020787, -0.4207906, -0.18074386, -0.2163903, 0.0030754965, 0.36799973, -0.3837698, -0.0022661497, -0.37276733, -0.28934997) * go_1(1.0, 1.0);
result += vec4(-0.018297346, -0.080951825, -0.062163066, -0.08050014);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_1_tf
//!SAVE conv2d_2_tf
//!WIDTH conv2d_1_tf.w
//!HEIGHT conv2d_1_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_1_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_1_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(0.31543177, 0.23095237, -0.06692611, -0.5867763, 0.003622504, 0.17948842, -0.14627707, 0.1745016, -0.052964583, -0.15551159, 0.05644786, -0.012665164, 0.13107763, 0.11369179, -0.09452995, -0.11973403) * go_0(-1.0, -1.0);
result += mat4(-0.2694661, -0.115382135, 0.3073268, -0.067228466, -0.25511482, -0.13922207, 0.36758214, -0.18821828, -0.022617863, 0.20333402, -0.11125889, 0.3552245, -0.013346653, -0.099095374, -0.25100616, 0.35521755) * go_0(-1.0, 0.0);
result += mat4(0.011012409, -0.13675085, 0.25642, -0.34851208, -0.23184675, 0.18012202, 0.57654136, 0.103173524, -0.16461405, 0.038177088, 0.1234096, 0.013202029, -0.19033363, 0.07469178, -0.017948546, 0.15287702) * go_0(-1.0, 1.0);
result += mat4(-0.05340533, 0.23797482, 0.20351392, -0.05333351, -0.12181174, -0.23363493, -0.20696607, 0.109941036, -0.11519453, 0.13842066, -0.10687832, 0.29040006, 0.022218632, 0.031238724, 0.2685182, 0.15300068) * go_0(0.0, -1.0);
result += mat4(0.22985318, -0.3103802, -0.22916415, 0.25238806, -0.11690287, -0.1947488, 0.118020535, 0.07814263, -0.06335474, -0.007870727, 0.076106325, 0.094677486, -0.16776285, -0.006570437, -0.29589584, 0.41413507) * go_0(0.0, 0.0);
result += mat4(0.43607962, -0.36456433, -0.123776875, -0.16634953, -0.091190875, 0.13035081, 0.28627968, 0.27249968, 0.12356344, -0.008616177, 0.09599816, -0.006144557, -0.23490307, 0.3013123, 0.14153156, 0.21837278) * go_0(0.0, 1.0);
result += mat4(0.060364585, 0.37860224, 0.039182413, -0.22805426, -0.089910224, -0.06817697, -0.2684275, -0.12528503, 0.036934495, -0.07826616, 0.06559976, -0.08253646, 0.13489649, 0.06237663, 0.126376, 0.21194184) * go_0(1.0, -1.0);
result += mat4(-0.12534817, 0.21225189, -0.27818045, -0.3070443, -0.006957577, -0.025105853, 0.12100924, -0.06916452, 0.23081483, 0.1802756, -0.18995638, 0.16603014, -0.2904096, -0.25292823, -0.21834068, 0.13719653) * go_0(1.0, 0.0);
result += mat4(0.017209655, 0.10757137, 0.21414296, -0.30885983, 0.10467716, -0.2184891, 0.100061476, -0.1527528, 0.2100472, -0.25768545, -0.22329919, -0.29153427, -0.06983842, -0.103854865, -0.051384352, 0.14629121) * go_0(1.0, 1.0);
result += mat4(0.0059623295, -0.26060802, 0.32115817, 0.021025505, 0.09783085, -0.15865178, 0.1473021, -0.24977303, -0.033508282, 0.17480391, -0.091310136, 0.09870876, 0.10504043, -0.06105686, 0.013493489, -0.11278855) * go_1(-1.0, -1.0);
result += mat4(0.14875248, -0.14859414, 0.19377062, -0.17456068, 0.101288855, -0.1113682, -0.48944646, 0.1018565, -0.037392337, 0.08539691, 0.1751306, -0.15428723, -0.059375558, 0.027663672, 0.051804014, -0.049813222) * go_1(-1.0, 0.0);
result += mat4(0.118846565, -0.19869871, -0.037388258, 0.08456728, -0.11662527, -0.43818352, -0.093285345, 0.038507205, -0.051991668, 0.21008292, 0.10792365, 0.2020924, 0.057021596, 0.09460527, 0.0016551288, -0.0015957063) * go_1(-1.0, 1.0);
result += mat4(0.11062174, -0.2639232, -0.060295466, -0.3217331, -0.050545212, 0.30989558, 0.30906132, 0.030323273, 0.028986752, 0.037429404, 0.20855664, -0.19848943, 0.034687653, -0.09599135, -0.06250494, -0.13215867) * go_1(0.0, -1.0);
result += mat4(-0.010391146, 0.07657845, 0.44491258, 0.0435906, 0.0075931503, 0.42632654, 0.47022533, 0.34737435, -0.15452717, -0.14613411, -0.45231065, 0.12094409, 0.0067911847, 0.057501152, 0.09876979, 0.044946447) * go_1(0.0, 0.0);
result += mat4(-0.15607435, 0.2293058, -0.09520331, 0.012836732, -0.15282455, 0.26437718, -0.1685477, -0.13211122, -0.055801593, -0.016778728, -0.34478986, -0.23228309, 0.12300962, -0.13235827, -0.13987203, -0.16550972) * go_1(0.0, 1.0);
result += mat4(0.13161735, -0.09039346, -0.033475474, -0.23686698, 0.1514885, 0.20977421, 0.031431954, -0.0049226107, 0.090661936, 0.15288061, -0.03316583, 0.09646573, -0.32651708, 0.18825398, -0.15777239, 0.17572704) * go_1(1.0, -1.0);
result += mat4(0.112157226, -0.08712878, 0.23453182, 0.1043877, -0.14686783, 0.28682423, -0.086443506, 0.059457052, -0.31530112, -0.2700583, -0.06028952, -0.070416875, 0.18053482, 0.16653341, 0.25215197, 0.061915852) * go_1(1.0, 0.0);
result += mat4(-0.20122242, 0.076313145, -0.0988483, 0.094337784, -0.35436687, 0.3762327, -0.07809558, 0.3055848, 0.10425242, -0.17087407, 0.030301496, -0.13911743, 0.01630275, 0.24247427, -0.006474477, 0.03842641) * go_1(1.0, 1.0);
result += vec4(-0.008952847, -0.0058945753, -0.08097229, 0.020968592);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_2_tf
//!SAVE conv2d_3_tf
//!WIDTH conv2d_2_tf.w
//!HEIGHT conv2d_2_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_2_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_2_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(-0.2237721, -0.0064096362, -0.31808427, 0.73477733, 0.015353088, 0.23983319, 0.14967978, -0.34920225, -0.07456269, 0.093151815, -0.14331086, -0.24586205, -0.14183366, 0.06401045, -0.22044073, 0.29932275) * go_0(-1.0, -1.0);
result += mat4(-0.07968509, -0.3349146, 0.16529128, 0.08443499, 0.4095855, -0.17120704, 0.17425705, 0.15298946, 0.2981273, 0.2212369, 0.10392389, -0.28775454, -0.065247655, -0.15255849, 0.13094437, 0.18685219) * go_0(-1.0, 0.0);
result += mat4(0.015706737, -0.17755036, 0.2622526, 0.112057306, -0.15876788, -0.38466996, -0.33700845, -0.031711742, -0.023320962, -0.3145249, -0.21223734, -0.1314596, -0.1888095, -0.046370104, 0.09000896, -0.0046378844) * go_0(-1.0, 1.0);
result += mat4(-0.31127506, 0.31304324, -0.03965752, 0.03649018, -0.029851055, 0.05801377, 0.00040150844, -0.04422069, 0.18019931, 0.14415511, -0.09845236, 0.21895434, -0.013932474, -0.046454947, -0.3403935, -0.006705289) * go_0(0.0, -1.0);
result += mat4(-0.34878647, -0.5129283, 0.060250953, -0.16354133, 0.20644619, 0.08732273, -0.24118888, 0.24455065, 0.24449423, 0.44103387, 0.22455928, 0.25738943, -0.26914698, -0.21309987, 0.08386486, 0.021484816) * go_0(0.0, 0.0);
result += mat4(-0.057454903, -0.4121922, 0.022661546, 0.37178272, 0.03331408, 0.05044008, 0.04324371, 0.20727943, 0.2432641, 0.076906696, -0.20858039, 0.012439015, -0.19335061, 0.09217451, 0.1968369, -0.19435833) * go_0(0.0, 1.0);
result += mat4(-0.16960496, 0.24616167, 0.37977478, 0.14324574, -0.011531225, -0.11312143, -0.18141079, -0.23843932, 0.0086012175, -0.3564491, -0.12639481, 0.009799298, -0.29120612, 0.23756824, 0.18035695, -0.087133996) * go_0(1.0, -1.0);
result += mat4(-0.10081239, 0.29191494, 0.10434693, 0.08970636, 0.008997759, 0.104756236, 0.039641086, 0.02323888, -0.11627765, 0.023693223, -0.30801758, -0.120208986, 0.05086147, 0.18498175, 0.15595439, -0.09877306) * go_0(1.0, 0.0);
result += mat4(0.101321675, -0.2929976, 0.38810417, 0.5605376, -0.04073937, 0.030110704, -0.18147062, -0.09833952, 0.01927733, 0.15335669, -0.15384074, -0.110595055, -0.054297395, -0.077522054, 0.07918369, -0.068480626) * go_0(1.0, 1.0);
result += mat4(0.23263514, -0.11719232, 0.2903209, -0.007503795, -0.020222448, -0.17790157, -0.15600762, -0.08741775, 0.12529704, 0.25548857, -0.04585447, -0.10255033, 0.18350503, -0.29593533, 0.0868933, 0.027004737) * go_1(-1.0, -1.0);
result += mat4(-0.14958654, -0.006238835, -0.2928948, 0.1988557, -0.17057803, 0.12524141, 0.13978264, -0.019280292, 0.05967142, -0.07790818, -0.5893818, -0.022845713, -0.08596779, 0.07875358, -0.03316667, -0.4369282) * go_1(-1.0, 0.0);
result += mat4(0.19195688, -0.060883682, -0.25897828, 0.07063324, 0.090833396, 0.003422883, 0.109534174, 0.031180874, -0.05017118, 0.022862168, -0.270113, -0.057831235, 0.53920543, -0.10252776, -0.091807485, 0.004294343) * go_1(-1.0, 1.0);
result += mat4(-0.18494242, -0.119284816, 0.3821897, 0.07777979, 0.15568028, -0.2854859, -0.22441281, -0.049155876, -0.15292497, 0.21895619, -0.095677756, 0.15210424, 0.001643022, -0.026176987, 0.048463076, -0.4824009) * go_1(0.0, -1.0);
result += mat4(0.007215129, 0.17074333, 0.053930074, -0.027014816, -0.17180431, -0.15163863, -0.0012122132, -0.18934256, -0.08294297, -0.24580221, -0.46552867, -0.27923223, 0.4092668, 0.06288688, -0.1602188, -0.0030876845) * go_1(0.0, 0.0);
result += mat4(0.111870885, 0.03317145, 0.14155298, 0.20328505, -0.05104131, 0.13979794, 0.018966835, -0.07238511, 0.05493792, -0.14975783, -0.10293237, -0.21985306, 0.49054706, 0.18288186, -0.26925826, 0.35845932) * go_1(0.0, 1.0);
result += mat4(0.3747799, -0.096748486, -0.17139742, 0.25289854, -0.17421168, -0.018461818, 0.09747162, 0.01660535, -0.20580359, 0.56189656, 0.17151354, -0.26347768, 0.28350568, -0.21486014, -0.44330928, -0.008981037) * go_1(1.0, -1.0);
result += mat4(0.10169985, -0.18244018, 0.04760736, 0.41017643, -0.09468786, -0.024218475, 0.103733875, -0.22540338, 0.10630112, 0.3677178, -0.104170956, 0.057317447, 0.21764882, 0.0789158, -0.22041337, 0.15065216) * go_1(1.0, 0.0);
result += mat4(0.11633995, -0.008195114, -0.14501533, 0.07168025, 0.058413275, 0.055995367, 0.09362145, -0.13827963, 0.13760869, 0.040319785, 0.038895044, 0.2675253, -0.087339684, 0.1412073, -0.17166458, -0.2312994) * go_1(1.0, 1.0);
result += vec4(-0.059377354, -0.02055341, 0.07234869, -0.015452986);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_3_tf
//!SAVE conv2d_4_tf
//!WIDTH conv2d_3_tf.w
//!HEIGHT conv2d_3_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_3_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_3_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(-0.29012984, -0.13150147, 0.31015614, 0.05992291, -0.050289866, 0.14845313, -0.09608898, 0.27913308, 0.060307387, -0.04160452, 0.035932682, -0.08137563, -0.07999419, 0.11818284, -0.27512288, 0.21948813) * go_0(-1.0, -1.0);
result += mat4(0.12916058, -0.21759962, -0.33868533, 0.021636661, 0.053470243, 0.1412425, 0.043395396, -0.26751056, -0.01689101, -0.2623835, 0.010809152, 0.062962815, -0.20692012, -0.1677863, -0.23313859, -0.17402615) * go_0(-1.0, 0.0);
result += mat4(-0.08204112, -0.23672083, -0.0064437394, -0.13200696, -0.056692924, -0.02708657, 0.12536962, 0.004428919, 0.14137582, 0.15404348, -0.105753876, 0.047957454, 0.15734316, 0.16562423, -0.010160829, -0.06602983) * go_0(-1.0, 1.0);
result += mat4(0.025653997, -0.10877775, -0.31258908, 0.18841636, -0.36005193, 0.1816357, -0.34537643, -0.0741087, 0.4663994, 0.0065186517, 0.08109033, 0.2976773, -0.35774228, -0.041366056, -0.37852773, 0.050565656) * go_0(0.0, -1.0);
result += mat4(0.04392313, 0.11316681, -0.14421389, 0.17985669, -0.1651274, -0.5656209, -0.124100484, 0.42774054, -0.1153939, 0.16829851, 0.2025612, 0.054007456, -0.06868256, -0.56935954, -0.12227961, 0.17688861) * go_0(0.0, 0.0);
result += mat4(0.34041, 0.499, 0.15234196, 0.21353458, -0.2732667, -0.049950935, 0.03550811, -0.21051687, 0.2609023, 0.016438454, -0.29874632, 0.37994128, 0.049288407, -0.31126305, 0.029235512, -0.012256015) * go_0(0.0, 1.0);
result += mat4(-0.0046853204, 0.15391374, -0.040689662, 0.20186873, -0.08137621, 0.35905558, 0.23733845, 0.21794793, -0.066420384, 0.029600656, -0.31421044, -0.050773863, -0.06260773, 0.04634221, -0.10948491, -0.045498934) * go_0(1.0, -1.0);
result += mat4(-0.082953, -0.025837064, -0.09928303, -0.14300232, 0.275064, 0.07793617, 0.22240888, 0.06637834, -0.4382666, -0.2932182, -0.27243167, -0.14221182, 0.5695728, 0.20719238, 0.5575927, 0.40816882) * go_0(1.0, 0.0);
result += mat4(-0.18510929, -0.15052167, 0.25277212, 0.06804461, 0.016387, 0.20310035, 0.2903229, -0.0615877, -0.28987274, -0.11942605, 0.013498961, 0.3184152, 0.29543474, -0.042830903, -0.018111207, -0.13263674) * go_0(1.0, 1.0);
result += mat4(0.25749087, 0.0053866603, -0.09391162, -0.06129529, -0.094091184, -0.07419633, 0.0013858611, 0.012000353, -0.062903, -0.0204224, -0.12113313, 0.017942557, -0.073379934, 0.052201986, 0.35864577, 0.023564404) * go_1(-1.0, -1.0);
result += mat4(0.100115694, 0.19451359, 0.23252094, 0.19506809, -0.12470779, 0.0027281935, -0.17488572, -0.018721964, -0.15159339, 0.18457152, 0.057712987, -0.08191495, 0.19735703, 0.07326743, -0.28563106, 0.01642815) * go_1(-1.0, 0.0);
result += mat4(0.068062514, 0.28356665, 0.07377898, 0.42776972, 0.28725025, -0.13045293, -0.17525704, -0.05885591, -0.16676305, -0.2555945, -0.10078422, -0.053032875, 0.084470876, 0.06460686, 0.13824362, -0.05231353) * go_1(-1.0, 1.0);
result += mat4(0.22637829, -0.028969254, 0.1968254, -0.13331996, 0.038017053, -0.008854481, -0.2031639, 0.09237089, -0.3821112, 0.1108527, -0.11029933, -0.24542028, 0.22416145, -0.031492114, -0.19144306, -0.0996271) * go_1(0.0, -1.0);
result += mat4(0.10776744, 0.16363445, 0.14656505, -0.3737814, -0.06642015, 0.5616549, -0.008412252, -0.37266847, 0.12506576, -0.15329036, 0.037538245, -0.10810259, 0.01706349, 0.1813702, 0.035651788, -0.012786579) * go_1(0.0, 0.0);
result += mat4(-0.4023338, -0.2098614, -0.18285121, -0.02727653, 0.26107362, 0.041306913, -0.036515504, -0.045217298, -0.39958602, -0.21229339, -0.021053292, -0.13427502, 0.36178818, 0.20934913, 0.1500852, 0.2634554) * go_1(0.0, 1.0);
result += mat4(0.07794611, -0.25937587, -0.06822529, -0.056336135, 0.094220124, 0.21588847, -0.0455218, -0.10968329, -0.08068449, -0.31366697, 0.07799637, 0.24252681, 0.23963861, 0.13715535, 0.010329345, 0.09094301) * go_1(1.0, -1.0);
result += mat4(-0.20975718, -0.12550138, 0.14453574, -0.0020878632, -0.07153068, 0.3249998, -0.056577377, 0.18166828, 0.37204072, 0.17018336, 0.3752895, 0.32178587, 0.2571982, -0.27258632, -0.25971004, -0.40536007) * go_1(1.0, 0.0);
result += mat4(-0.3243907, -0.06300621, -0.09398436, -0.19549188, 0.14906861, 0.061537784, -0.055284478, 0.11281728, 0.12964857, 0.09979093, -0.1810159, -0.4104283, 0.05807971, -0.056371246, 0.08072554, 0.18479007) * go_1(1.0, 1.0);
result += vec4(-0.048888464, -0.0561434, 0.030690912, -0.030496685);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_4_tf
//!SAVE conv2d_5_tf
//!WIDTH conv2d_4_tf.w
//!HEIGHT conv2d_4_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_4_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_4_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(0.15332128, 0.027258258, 0.14900503, -0.15982795, 0.17021236, -0.51046044, -0.15287271, -0.058167327, 0.51826185, -0.34817994, 0.004513167, 0.05395769, 0.1990321, -0.049979225, 0.11391989, -0.16062729) * go_0(-1.0, -1.0);
result += mat4(0.033682905, 0.019728886, 0.19931756, 0.17381927, 0.2585768, -0.2124572, -0.014632459, 0.39779893, -0.1146207, -0.2396625, 0.08960277, 0.38345298, 0.25497693, 0.11692859, -0.14207517, 0.12667973) * go_0(-1.0, 0.0);
result += mat4(-0.14911255, 0.08910706, 0.16136818, 0.03914566, 0.24204038, -0.03607149, -0.4571109, 0.10802461, -0.0021356856, 0.00885878, 0.22297303, 0.2367231, 0.045177583, 0.11120606, -0.009971904, -0.059262395) * go_0(-1.0, 1.0);
result += mat4(0.24565999, -0.2261384, 0.47373205, 0.024613412, -0.10923052, 0.039027315, -0.42707404, -0.3783373, 0.3544573, -0.5468578, -0.27599156, -0.09455918, 0.18760219, -0.19082001, 0.030565469, 0.20589156) * go_0(0.0, -1.0);
result += mat4(0.1973198, -0.03433863, 0.059960485, 0.045642868, 0.1819595, -0.14460869, 0.1286175, 0.2067575, -0.042632047, -0.11842967, -0.11224446, -0.18764776, -0.19563004, 0.027425969, 0.24056377, 0.5949649) * go_0(0.0, 0.0);
result += mat4(0.055027682, 0.16331595, -0.2608588, 0.12545955, 0.4588985, 0.03642909, 0.22187738, 0.45190734, -0.001210133, -0.057651415, -0.061199043, 0.11935476, -0.049561135, 0.27509886, 0.13778673, -0.124914035) * go_0(0.0, 1.0);
result += mat4(-0.02257459, 0.27705106, 0.044165276, -0.26521233, 0.05982374, -0.2824302, 0.3171142, 0.08430561, -0.10155528, 0.16182268, -0.09183147, -0.19447176, 0.3295707, -0.50616395, -0.036964044, 0.23166709) * go_0(1.0, -1.0);
result += mat4(-0.0232342, 0.07299799, -0.18038079, -0.13672702, -0.108305976, 0.15024792, -0.19531927, 0.0870979, -0.26488534, 0.19481428, 0.10737945, -0.14573483, -0.33094683, 0.24155116, -0.09850332, 0.2797003) * go_0(1.0, 0.0);
result += mat4(-0.24089853, 0.19506595, 0.4799156, -0.058313113, 0.36212957, -0.44844806, 0.23864488, 0.15477742, -0.07795971, -0.0033861927, -0.11216164, 0.033454563, -0.25893036, 0.23793478, -0.15769425, -0.00033481256) * go_0(1.0, 1.0);
result += mat4(0.05772507, -0.1640253, -0.13499664, -0.20460358, -0.024399966, 0.14966168, -0.090857334, -0.039677754, 0.00036956606, -0.24236615, -0.053542696, -0.0049544116, 0.026651502, 0.39019194, -0.2742246, -0.061242323) * go_1(-1.0, -1.0);
result += mat4(-0.016323274, -0.036179908, 0.029965919, 0.11151491, -0.00016685206, -0.29573023, 0.17996423, -0.20145437, 0.1324275, -0.18442132, -0.24618152, 0.061780427, -0.02770517, 0.28452995, 0.39804098, -0.1174389) * go_1(-1.0, 0.0);
result += mat4(-0.025068847, -0.053328387, -0.27053785, 0.26866457, -0.09866204, 0.057677213, 0.01850112, -0.18014707, -0.13319959, -0.14411181, -0.26355243, -0.022209354, -0.05062645, -0.036771543, 0.13294417, -0.18458557) * go_1(-1.0, 1.0);
result += mat4(-0.046194963, 0.038230438, -0.08993043, -0.07236354, 0.11031123, -0.16504908, -0.09517036, -0.16459833, -0.5279925, 0.12686682, -0.05726125, 0.055361677, 0.31593755, 0.027328093, 0.001839602, 0.30581662) * go_1(0.0, -1.0);
result += mat4(0.08608678, 0.03168437, 0.007713377, -0.26140293, -0.1268983, 0.13395861, -0.069848835, -0.24080403, 0.018839337, -0.049821075, -0.21461345, -0.14168301, -0.0872339, 0.47096667, 0.022512507, 0.14860632) * go_1(0.0, 0.0);
result += mat4(0.06293673, 0.22462969, 0.045494985, 0.021673543, 0.18227446, -0.2956555, 0.08010543, -0.01919729, -0.012190269, 0.241983, -0.046537094, -0.40094566, -0.3853647, 0.1081711, -0.16926058, 0.16138376) * go_1(0.0, 1.0);
result += mat4(-0.14854589, -0.17625804, -0.10849075, 0.221543, 0.099971965, 0.13901573, 0.29464146, 0.020068526, 0.054358527, -0.10351705, -0.0062914286, 0.24127026, -0.16914125, 0.12729423, -0.18377453, -0.6452375) * go_1(1.0, -1.0);
result += mat4(0.12603393, -0.10986093, 0.2314103, 0.16915044, -0.13619255, -0.09349073, 0.20594226, -0.34507084, 0.19077192, 0.052500796, 0.07185645, 0.029082738, -0.015576321, 0.08254907, -0.5501743, -0.38495848) * go_1(1.0, 0.0);
result += mat4(0.09300796, -0.079218306, 0.46825135, -0.08735625, 0.06321122, 0.16234867, 0.042932414, -0.013057422, 0.09697148, 0.23457524, 0.19417483, -0.16804664, 0.18379296, 0.17770062, -0.050235, -0.059676602) * go_1(1.0, 1.0);
result += vec4(0.011169491, 0.032399546, 0.138099, 0.023857072);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_5_tf
//!SAVE conv2d_6_tf
//!WIDTH conv2d_5_tf.w
//!HEIGHT conv2d_5_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_5_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_5_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(-0.22753362, -0.08612073, 0.33140692, 0.08699529, -0.18788953, -0.056579117, -0.12905197, -0.06694621, 0.054559365, 0.15031597, -0.13430363, 0.021646025, 0.14884405, -0.0694291, 0.26149413, 0.11270503) * go_0(-1.0, -1.0);
result += mat4(0.17876762, -0.09637848, 0.11285323, 0.2004893, 0.1317187, -0.036162686, 0.17958368, -0.069625, 0.28760737, -0.12505141, 0.12760694, 0.047717955, -0.16811855, -0.16340709, 0.13278298, -0.08403954) * go_0(-1.0, 0.0);
result += mat4(-0.21917523, 0.079711854, -0.28642535, 0.2822416, 0.03001489, -0.014772918, -0.3487396, 0.10597145, -0.013841082, 0.17034237, 0.10810282, -0.08089695, -0.22184245, -0.59067357, 0.44113398, 0.13045649) * go_0(-1.0, 1.0);
result += mat4(-0.29906932, 0.013923749, 0.2031124, -0.11846688, -0.13953634, 0.08003455, -0.10164494, -0.21218559, 0.10563715, 0.31033117, -0.075903505, 0.047310907, -0.37824214, -0.14506383, 0.11866701, -0.21384487) * go_0(0.0, -1.0);
result += mat4(-0.1353849, 0.19258606, 0.063908584, -0.2043788, 0.27244982, 0.1665306, -0.29357895, -0.22441709, 0.18514316, -0.17840464, 0.20986097, 0.14351055, -0.057732623, 0.42166704, -0.23182064, -0.4957248) * go_0(0.0, 0.0);
result += mat4(-0.34830126, 0.109066755, -0.28285867, -0.048280068, -0.12290918, 0.04291651, -0.047484186, -0.03702595, 0.23047262, 0.09398974, 0.022467108, 0.08271034, 0.3066665, -0.54077, 0.057771873, 0.23194093) * go_0(0.0, 1.0);
result += mat4(-0.17731948, -0.3175927, 0.1452728, 0.09396786, -0.16433562, -0.01833653, -0.22345604, -0.04161193, -0.14827462, 0.18544114, -0.15544125, -0.06179007, 0.16989979, -0.20985202, 0.16391534, -0.09447268) * go_0(1.0, -1.0);
result += mat4(-0.053878862, -0.21034616, 0.023831524, 0.19772215, 0.31647214, 0.0126534775, -0.19130844, -0.049282108, -0.21446131, 0.067189045, 0.09117449, -0.25548774, 0.12109098, 0.22009392, -0.3924665, -0.13340388) * go_0(1.0, 0.0);
result += mat4(-0.16096684, -0.18495405, 0.10410178, 0.0015673033, -0.00183498, -0.044303037, -0.062745355, -0.090802394, 0.043269135, 0.06924481, -0.21367405, -0.14619029, 0.11555763, -0.20292862, 0.5799557, 0.14739846) * go_0(1.0, 1.0);
result += mat4(-0.21030277, -0.09578802, 0.013482288, -0.21484336, 0.12995781, 0.40431052, -0.3347856, -0.18183486, 0.15550353, -0.04402301, 0.4603779, 0.14874357, -0.07694621, -0.053523075, -0.19607326, -0.10850742) * go_1(-1.0, -1.0);
result += mat4(-0.2347211, 0.2697403, -0.0634794, -0.17925987, 0.17231455, 0.24999185, -0.5208536, -0.10491828, -0.233575, 0.52950364, 0.0038063182, -0.1380038, 0.022935199, 0.19369157, 0.14586553, 0.1938704) * go_1(-1.0, 0.0);
result += mat4(-0.10245223, 0.34150192, 0.25862157, -0.20165509, 0.5597771, 0.114510864, -0.122526556, -0.04010975, 0.1704679, -0.23335956, -0.16771887, -0.03783455, -0.056995615, 0.24153493, -0.08082429, -0.24210933) * go_1(-1.0, 1.0);
result += mat4(-0.103466526, 0.15278348, -0.30526164, -0.080755696, 0.103505425, 0.15862796, 0.14696524, -0.008358076, -0.09180311, -0.12505089, 0.28052542, -0.13551563, 0.07528779, -0.09636086, -0.10369617, 0.23656134) * go_1(0.0, -1.0);
result += mat4(-0.25752836, 0.099439755, -0.30716348, 0.035077725, 0.023509016, 0.23106368, 0.05277125, 0.34910464, 0.088015385, 0.26995596, 0.1390645, -0.40671825, 0.18096298, -0.100688554, 0.5492049, 0.2482101) * go_1(0.0, 0.0);
result += mat4(0.41411775, -0.107200556, -0.13813478, 0.13768874, 0.27137747, 0.06313619, -0.08522967, 0.03218302, -0.03166121, -0.3415683, -0.52242, -0.1741813, -0.36956537, 0.179129, -0.09742935, -0.11696616) * go_1(0.0, 1.0);
result += mat4(-0.07975504, 0.17964838, 0.37122533, 0.16064765, 0.14309953, 0.29473078, 0.0926391, -0.22333665, 0.34612748, -0.3387473, 0.0077308523, -0.07239449, 0.18522519, -0.21297298, 0.11493978, 0.16117814) * go_1(1.0, -1.0);
result += mat4(-0.17402779, 0.10023144, 0.11712206, 0.031971734, 0.18713303, 0.08736295, 0.013007052, -0.06943139, -0.20102951, -0.010721135, -0.2562522, 0.34877458, -0.13732676, -0.40258047, 0.25824392, 0.15720639) * go_1(1.0, 0.0);
result += mat4(0.044494305, 0.3296108, 0.0017603852, 0.09362289, 0.38839245, 0.40015858, -0.13395199, -0.044521853, -0.56266373, 0.251378, 0.5005789, -0.13106057, -0.18491416, -0.046887, 0.067797676, -0.14694957) * go_1(1.0, 1.0);
result += vec4(0.013687534, -0.08185164, -0.04755438, 0.290178);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(M)-Conv-3x1x1x56
//!HOOK MAIN
//!BIND MAIN
//!BIND conv2d_tf
//!BIND conv2d_1_tf
//!BIND conv2d_2_tf
//!BIND conv2d_3_tf
//!BIND conv2d_4_tf
//!BIND conv2d_5_tf
//!BIND conv2d_6_tf
//!SAVE MAIN
//!WIDTH conv2d_tf.w
//!HEIGHT conv2d_tf.h
#define g_0 (max((conv2d_tf_tex(conv2d_tf_pos)), 0.0))
#define g_1 (max(-(conv2d_tf_tex(conv2d_tf_pos)), 0.0))
#define g_2 (max((conv2d_1_tf_tex(conv2d_1_tf_pos)), 0.0))
#define g_3 (max(-(conv2d_1_tf_tex(conv2d_1_tf_pos)), 0.0))
#define g_4 (max((conv2d_2_tf_tex(conv2d_2_tf_pos)), 0.0))
#define g_5 (max(-(conv2d_2_tf_tex(conv2d_2_tf_pos)), 0.0))
#define g_6 (max((conv2d_3_tf_tex(conv2d_3_tf_pos)), 0.0))
#define g_7 (max(-(conv2d_3_tf_tex(conv2d_3_tf_pos)), 0.0))
#define g_8 (max((conv2d_4_tf_tex(conv2d_4_tf_pos)), 0.0))
#define g_9 (max(-(conv2d_4_tf_tex(conv2d_4_tf_pos)), 0.0))
#define g_10 (max((conv2d_5_tf_tex(conv2d_5_tf_pos)), 0.0))
#define g_11 (max(-(conv2d_5_tf_tex(conv2d_5_tf_pos)), 0.0))
#define g_12 (max((conv2d_6_tf_tex(conv2d_6_tf_pos)), 0.0))
#define g_13 (max(-(conv2d_6_tf_tex(conv2d_6_tf_pos)), 0.0))
vec4 hook() {
vec4 result = mat4(-0.08837163, -0.065234736, -0.034704313, 0.0, 0.021405501, 0.013663729, 0.019249594, 0.0, 0.05328863, 0.03580334, 0.046457592, 0.0, -0.12216048, 0.022547891, 0.016400825, 0.0) * g_0;
result += mat4(0.061996464, 0.05631466, 0.06808407, 0.0, -0.005013109, -0.0044589997, -0.032367796, 0.0, 0.016481603, 0.13721058, 0.14924648, 0.0, 0.020035887, -0.07250003, -0.08034037, 0.0) * g_1;
result += mat4(0.24078514, 0.081361525, 0.053420708, 0.0, -0.009353794, -0.051077116, -0.058007747, 0.0, -0.14071098, 0.01035966, 0.005308949, 0.0, -0.1489842, -0.06711817, -0.05552926, 0.0) * g_2;
result += mat4(-0.13002375, 0.012733757, 0.017821986, 0.0, 0.17767483, 0.20204604, 0.1751779, 0.0, 0.12804912, 0.07381453, 0.05655911, 0.0, 0.17044514, 0.07301451, 0.06523978, 0.0) * g_3;
result += mat4(-0.1170986, -0.05130371, -0.027939914, 0.0, -0.16645707, -0.121526904, -0.09471366, 0.0, -0.04143118, 0.026693767, 0.034615446, 0.0, -0.084318705, -0.064990036, -0.054324172, 0.0) * g_4;
result += mat4(0.12094524, 0.09518409, 0.07387219, 0.0, 0.062216382, 0.053228356, 0.031372335, 0.0, 0.072797105, 0.026258165, 0.009804673, 0.0, 0.120719045, 0.073281154, 0.056623302, 0.0) * g_5;
result += mat4(-0.11141495, -0.11566289, -0.10398725, 0.0, -0.0651895, -0.06820691, -0.054204144, 0.0, -0.032746475, -0.008849683, -0.007610222, 0.0, -0.024655705, -0.048778858, -0.041144755, 0.0) * g_6;
result += mat4(0.058090195, 0.07538767, 0.059722915, 0.0, 0.044788487, 0.04212742, 0.027502589, 0.0, 0.04892866, 0.015416752, 0.008312418, 0.0, -0.011864114, -0.0074752793, -0.0060824654, 0.0) * g_7;
result += mat4(0.043446552, 0.061971307, 0.05758086, 0.0, -0.06379154, -0.053758245, -0.047204215, 0.0, 0.016307736, 0.03423424, 0.030179083, 0.0, 0.041445345, 0.03843772, 0.033059113, 0.0) * g_8;
result += mat4(-0.003803544, 0.0008906116, -0.00059585314, 0.0, 0.102071285, 0.11485224, 0.10007254, 0.0, -0.074306004, -0.08803551, -0.07972321, 0.0, -0.030704215, -0.021514274, -0.009049376, 0.0) * g_9;
result += mat4(0.0066058086, 0.0011408008, 0.0016199006, 0.0, -0.03916473, -0.042929266, -0.04018418, 0.0, -0.03153446, -0.039413508, -0.034767237, 0.0, 0.113516055, 0.12577052, 0.113335624, 0.0) * g_10;
result += mat4(0.02655948, 0.041905303, 0.03861737, 0.0, 0.048471425, 0.049788587, 0.050447535, 0.0, 0.12092813, 0.13564217, 0.12613249, 0.0, -0.0023508538, 0.0012828974, 0.0028730957, 0.0) * g_11;
result += mat4(0.0084758485, 0.008800083, 0.008206044, 0.0, -0.056123603, -0.06610845, -0.060320783, 0.0, -0.081793964, -0.101638645, -0.096699014, 0.0, -0.04402356, -0.04177539, -0.03829645, 0.0) * g_12;
result += mat4(0.10676299, 0.118409514, 0.10618478, 0.0, -0.05880252, -0.06488367, -0.06432695, 0.0, 0.019221924, 0.017602798, 0.017413978, 0.0, -0.07512528, -0.080483615, -0.066218294, 0.0) * g_13;
result += vec4(-0.010478934, -0.008364784, -0.010246552, 0.0);
return result + MAIN_tex(MAIN_pos);
}
================================================
FILE: assets/shaders/Anime4K_Restore_CNN_S.glsl
================================================
// MIT License
// Copyright (c) 2019-2021 bloc97
// All rights reserved.
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//!DESC Anime4K-v4.0-Restore-CNN-(S)-Conv-4x3x3x3
//!HOOK MAIN
//!BIND MAIN
//!SAVE conv2d_tf
//!WIDTH MAIN.w
//!HEIGHT MAIN.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (MAIN_texOff(vec2(x_off, y_off)))
vec4 hook() {
vec4 result = mat4(-0.19288683, -0.21397883, 0.111997396, -0.04791413, -0.26682988, -0.06144587, -0.03601853, -0.16693151, 0.038494494, -0.16651472, 0.147657, -0.083003886, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, -1.0);
result += mat4(-0.14286195, 0.08746566, -0.40107322, 0.12390977, -0.33392772, -0.18703035, -0.21326795, 0.04780781, -0.15155545, -0.0010025925, -0.1554875, -0.10676251, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 0.0);
result += mat4(0.28095165, 0.022872915, -0.21342312, -0.29982176, 0.025937587, -0.055012174, -0.33779636, 0.0015666655, 0.076416336, 0.06656033, -0.1557806, 0.1078894, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 1.0);
result += mat4(-0.31584853, 0.07527119, 0.30713862, -0.34014285, -0.50103146, -0.07217874, 0.512807, -0.09597398, -0.32097813, -0.051580857, -0.022466356, 0.01148551, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, -1.0);
result += mat4(-0.026032459, -0.04193211, 0.37703893, -0.031916667, -0.27421117, 1.0906446, -0.049654085, -0.19814016, 0.07819544, 0.06003738, 0.1405805, -0.0064135445, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 0.0);
result += mat4(0.041450135, 0.11319654, -0.23237701, 0.08443178, 0.53344345, 0.30857387, -0.057264958, -0.1575803, 0.2325609, -0.027797326, -0.04544767, -0.18720597, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 1.0);
result += mat4(0.2531829, -0.074966915, -0.27800754, -0.3146097, 0.20126024, -0.5380133, -0.15082566, -0.19021043, 0.29951036, 0.17123336, -0.01681872, -0.12574998, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, -1.0);
result += mat4(0.25203633, 0.19882993, 0.14906439, 0.13593598, 0.40712556, 0.084902965, 0.42969635, 0.2961132, -0.057267334, -0.030388135, 8.8084314e-05, 0.0210724, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 0.0);
result += mat4(-0.13459359, -0.12199573, 0.12591946, 0.24736497, 0.2033463, -0.09388599, -0.094370656, 0.1071285, -0.18479438, -0.066625565, 0.08279283, 0.20130983, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 1.0);
result += vec4(-0.011108127, -0.07481861, 0.07640154, 0.4964964);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(S)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_tf
//!SAVE conv2d_1_tf
//!WIDTH conv2d_tf.w
//!HEIGHT conv2d_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(-0.056432575, 0.0028165397, -0.026325442, -0.14802271, 0.16885762, -0.062179096, -0.2332292, 0.17513658, -0.08011296, 0.02947316, 0.014771492, -0.17946689, 0.026012989, -0.09823925, 0.036625937, -0.06924322) * go_0(-1.0, -1.0);
result += mat4(-0.13571467, 0.09831142, 0.12911566, 0.06305893, -0.07188695, -0.20161287, 0.3858435, -0.21069056, -0.12294444, -0.1404628, -0.022659872, 0.23008968, 0.10969853, 0.17640765, 0.39796907, 0.20413099) * go_0(-1.0, 0.0);
result += mat4(-0.0061665224, 0.055102807, -0.0059629944, -0.021429887, 0.061626043, 0.16898955, -0.21215646, 0.16510476, 0.2238265, 0.19429931, 0.09874656, 0.06828208, -0.122404456, -0.00026717107, -0.28203064, -0.29979932) * go_0(-1.0, 1.0);
result += mat4(-0.22735378, 0.14538136, 0.11549746, 0.194148, -0.09841722, -0.0661309, 0.348576, -0.017375294, -0.044078812, 0.1298332, 0.04793373, -0.30687734, 0.08353025, 0.083519086, 0.10766399, 0.31796935) * go_0(0.0, -1.0);
result += mat4(0.048365135, -0.17566709, -0.33212858, -0.052667376, -0.26443407, -0.010216014, 0.1573303, 0.05725314, 0.08140953, -0.09664591, 0.076109104, -0.026773714, 0.07732627, 0.10188082, -0.28266954, -0.16230233) * go_0(0.0, 0.0);
result += mat4(0.29931107, 0.117944, -0.10414009, 0.12795551, 0.12576093, 0.17082554, -0.15803693, 0.13430743, -0.025801308, -0.10797019, 0.0721032, 0.2825884, -0.11025257, 0.12798019, 0.081827976, -0.050441865) * go_0(0.0, 1.0);
result += mat4(-0.11827391, 0.08306765, -0.3430314, 0.07898041, -0.023839617, -0.019507334, 0.23176382, -0.40992323, 0.09411734, 0.38415068, -0.25845516, -0.29984522, 0.1470966, -0.0684779, -0.07071314, -0.026773235) * go_0(1.0, -1.0);
result += mat4(0.19091596, 0.082110435, -0.5266589, -0.1744098, -0.015838385, -0.046316292, 0.023171103, -0.03731331, 0.2642396, 0.31824252, -0.041754793, -0.09525519, -0.14696182, 0.052168854, 0.039857205, -0.027555354) * go_0(1.0, 0.0);
result += mat4(0.15207373, 0.09845733, 0.0142631065, 0.096375965, 0.06089903, 0.17902578, -0.42391995, 0.22475442, 0.016356342, -0.06277531, -0.12173141, -0.18635495, -0.0013459618, 0.15725887, 0.019310836, 0.20293565) * go_0(1.0, 1.0);
result += mat4(-0.18395247, 0.30672902, 0.09034339, 0.1821889, -0.0419004, -0.2169228, -0.14052129, 0.11006559, 0.1709272, 0.51062274, 0.13758625, -0.2242552, -0.030382963, 0.3357568, -0.26491287, 0.02501938) * go_1(-1.0, -1.0);
result += mat4(0.040511727, 0.12523083, -0.27318433, 0.08388512, 0.25354835, 0.3404216, -0.2632471, -0.17784123, 0.2732347, 0.4468553, 0.084667034, -0.1856242, 0.034099877, -0.00954992, -0.32751867, -0.062207516) * go_1(-1.0, 0.0);
result += mat4(0.17564747, 0.11645554, -0.16362113, 0.105654195, -0.2762563, -0.1413764, 0.23264363, -0.14000498, 0.095402054, 0.0715738, -0.19346157, -0.028285999, 0.009799127, 0.04059529, 0.19688335, 0.1282381) * go_1(-1.0, 1.0);
result += mat4(0.23575781, -0.11446148, -0.20504695, 0.035568226, 0.36890212, -0.85968876, -0.18545328, 0.33796397, -0.30916876, -0.10445518, -0.3046253, 0.33271998, -0.06263589, -0.2160114, -0.16383372, -0.31173357) * go_1(0.0, -1.0);
result += mat4(0.20469664, 0.4039374, -0.070057206, 0.030353077, 0.39843914, -0.15490077, -0.24476516, 0.38238233, -0.21809858, 0.23496576, -0.051794037, 0.033664484, -0.14411364, -0.2515329, 0.124655396, -0.05818785) * go_1(0.0, 0.0);
result += mat4(-0.09065731, -0.16787091, 0.013269188, 0.23687351, -0.41504318, -0.048163068, 0.31760025, -0.33648986, 0.29752317, 0.2926866, 0.14408836, -0.33382463, -0.15873958, -0.121961035, 0.11797893, 0.09000567) * go_1(0.0, 1.0);
result += mat4(0.13356976, 0.013763947, 0.012169505, -0.109594524, 0.03417223, 0.7031121, 0.65146804, 0.5250268, -0.50132495, -0.419648, 0.2940041, 0.83051753, -0.17595838, 0.1633008, -0.018587278, 0.079596795) * go_1(1.0, -1.0);
result += mat4(0.07570128, -0.1581438, 0.03904949, 0.14890033, -0.054611947, 0.17469402, -0.44252598, 0.036181703, -0.4981031, -0.37507218, -0.18466389, 0.2645845, 0.25189674, -0.025896115, 0.034307647, -0.020462232) * go_1(1.0, 0.0);
result += mat4(-0.11645865, 0.02296537, 0.040909223, 0.015069485, 0.062284566, -0.22526766, 0.09241534, -0.32623053, 0.18208642, 0.3954284, 0.2884468, -0.25137675, -0.037232924, -0.10185309, -0.17956531, 0.018966453) * go_1(1.0, 1.0);
result += vec4(-0.16371979, -0.024620198, -0.035754893, 0.04176776);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(S)-Conv-4x3x3x8
//!HOOK MAIN
//!BIND conv2d_1_tf
//!SAVE conv2d_2_tf
//!WIDTH conv2d_1_tf.w
//!HEIGHT conv2d_1_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_1_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_1_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(0.01921286, -0.26684764, -0.12663573, 0.31641877, -0.25313398, 0.12264074, 0.58750325, -0.14084283, 0.5837018, -0.042300556, -0.20435576, -0.009954825, 0.060783498, 0.05540401, 0.2205112, -0.06578902) * go_0(-1.0, -1.0);
result += mat4(-0.21930243, -0.03774968, 0.22615197, 0.18338196, 0.011201461, -0.271034, 0.00573116, -0.12248194, 0.47990513, 0.2982416, -0.1087603, -0.050099242, -0.07620939, -0.07148229, 0.03691984, -0.16796488) * go_0(-1.0, 0.0);
result += mat4(-0.14962853, -0.053769328, 0.02387081, 0.22002189, 0.052237745, -0.26160842, -0.08603077, 0.012542448, 0.08119985, 0.075785555, -0.33437458, -0.43373227, -0.13206963, -0.08759176, -0.03288923, -0.09799959) * go_0(-1.0, 1.0);
result += mat4(-0.1305593, -0.5974288, 0.06058367, 0.08406488, 0.013692483, 0.06646377, 0.16469325, 0.08990975, 0.42217395, -0.11289523, -0.06165009, 0.48556912, -0.15702641, -0.19922857, -0.0035429662, -0.0022089656) * go_0(0.0, -1.0);
result += mat4(-0.1964807, 0.038099788, 0.21587034, 0.039734077, -0.07063389, 0.11604167, -0.24558097, -0.08900199, -0.7684516, -0.1037487, -0.09380674, 0.33144563, -0.16653742, 0.0028585843, -0.33774406, -0.0528696) * go_0(0.0, 0.0);
result += mat4(-0.27298656, -0.05665099, 0.09661685, 0.19780266, 0.1025106, -0.22055034, -0.21218458, -0.040628925, 0.0095010325, 0.13118382, -0.42582452, -0.22197723, 0.21006055, -0.06189587, -0.15285942, -0.09526762) * go_0(0.0, 1.0);
result += mat4(-0.14494462, -0.046788953, 0.065877035, 0.09911713, 0.35096622, 0.16682479, 0.028363144, 0.36037162, 0.29413632, 0.28212717, -0.025364442, -0.3406269, 0.047262143, -0.11892685, -0.008032766, 0.29743317) * go_0(1.0, -1.0);
result += mat4(-0.15191558, -0.36980554, 0.14555687, 0.0043930537, -0.012661432, 0.15737776, -0.115250416, 0.10324491, 0.24491951, -0.15575431, -0.27802598, 0.21959937, 0.18063772, 0.4455559, -0.09693302, 0.33382267) * go_0(1.0, 0.0);
result += mat4(0.2717801, 0.13452889, 0.14105384, 0.16324317, -0.40111846, 0.1154301, -0.0076733204, -0.09697362, 0.44306824, -0.02831414, -0.2153124, -0.12075326, 0.060776163, 0.30347148, -0.0036976219, -0.12070682) * go_0(1.0, 1.0);
result += mat4(-0.39780128, -0.29875937, -0.12952097, 0.080333896, 0.07520163, 0.021689568, -0.23121156, -0.038140096, -0.1593877, 0.017156163, -0.06038025, 0.009244022, -0.13917233, 0.30957314, 0.243109, -0.104947075) * go_1(-1.0, -1.0);
result += mat4(-0.07965157, 0.06776501, -0.13288979, 0.005851189, -0.08768168, -0.03689969, 0.12034646, 0.22441491, 0.14453568, -0.17648841, -0.3378289, -0.018329712, 0.11722939, -0.34161824, 0.08424494, -0.01400687) * go_1(-1.0, 0.0);
result += mat4(0.08153887, 0.07222914, -0.14663404, -0.038526025, -0.07385973, 0.18440577, 0.35890242, 0.17084727, 0.26345527, 0.15280858, -0.007446105, -0.024403179, -0.30336383, -0.22978698, 0.11612946, -0.23614909) * go_1(-1.0, 1.0);
result += mat4(-0.07447396, 0.09023449, -0.13798, -0.086943336, -0.30787337, 0.15087669, 0.14418626, -0.03371195, 0.048989657, -0.13075387, -0.13458036, -0.059836224, 0.06495196, 0.269715, 0.3674355, 0.38956037) * go_1(0.0, -1.0);
result += mat4(0.34981915, -0.048779126, 0.31717536, 0.38080826, -0.20149232, -0.82969636, -0.10167862, 0.6382858, 0.25976858, 0.4370118, -0.04724865, -0.10014156, 0.19380626, -0.080370255, 0.09578106, -0.035166856) * go_1(0.0, 0.0);
result += mat4(-0.026443917, 0.4132611, 0.01822534, 0.12742202, -0.26652107, -0.2996705, 0.30905882, 0.07989903, 0.38249823, 0.21486135, 0.025314959, -0.14717339, -0.13344015, -0.32088286, -0.2833883, -0.30973712) * go_1(0.0, 1.0);
result += mat4(0.021517841, 0.006556378, 0.2025686, -0.12044382, -0.38583103, -0.0027515136, -0.06556736, -0.097090125, 0.04676486, -0.11954886, -0.051612873, 0.07831412, -0.18823163, -0.16542958, 0.04245155, 0.6437998) * go_1(1.0, -1.0);
result += mat4(-0.39475346, -0.2936861, 0.26768062, -0.28151843, 0.21935691, 0.2101108, -0.15455097, 0.19548604, 0.09188909, -0.020147726, 0.103328265, -0.12574542, -0.34167948, 0.07523185, -0.17669058, 0.62446547) * go_1(1.0, 0.0);
result += mat4(-0.37661025, -0.29630858, 0.05451026, 0.1611643, 0.14079669, -0.2170294, -0.038716137, 0.13514164, -0.21235192, -0.07860726, -0.005749412, 0.025625167, -0.13297133, 0.33012658, -0.27434957, -0.18416783) * go_1(1.0, 1.0);
result += vec4(-0.0036821906, -0.050239526, -0.01355402, 0.00048220603);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(S)-Conv-3x3x3x8
//!HOOK MAIN
//!BIND MAIN
//!BIND conv2d_2_tf
//!SAVE MAIN
//!WIDTH conv2d_2_tf.w
//!HEIGHT conv2d_2_tf.h
#define go_0(x_off, y_off) (max((conv2d_2_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max(-(conv2d_2_tf_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(0.15873, 0.17989138, 0.14648493, 0.0, -0.017379675, -0.017363746, -0.019855022, 0.0, 0.009670625, 0.0070157526, 0.0075994316, 0.0, 0.025388412, 0.027231036, 0.024052646, 0.0) * go_0(-1.0, -1.0);
result += mat4(0.048195973, 0.041760173, 0.037366055, 0.0, -0.115950756, -0.12887983, -0.12535639, 0.0, 0.032125086, 0.03397254, 0.032950625, 0.0, 0.01223746, 0.020822672, 0.0161561, 0.0) * go_0(-1.0, 0.0);
result += mat4(0.0890567, 0.094453335, 0.09014035, 0.0, 0.016081346, 0.017434116, 0.020783134, 0.0, -0.011775135, -0.010094134, -0.018522855, 0.0, 0.072103254, 0.07940666, 0.065876864, 0.0) * go_0(-1.0, 1.0);
result += mat4(-0.04841196, -0.06963968, -0.056574684, 0.0, 0.10912542, 0.11813441, 0.10643838, 0.0, -0.013013885, -0.01562045, -0.013802797, 0.0, 0.037505716, 0.04352026, 0.04645123, 0.0) * go_0(0.0, -1.0);
result += mat4(-0.3472869, -0.36243078, -0.33530185, 0.0, 0.23654196, 0.2305048, 0.22150646, 0.0, -0.045226905, -0.041799217, -0.042511635, 0.0, -0.10267792, -0.1123385, -0.10845448, 0.0) * go_0(0.0, 0.0);
result += mat4(0.011987401, 0.012285043, 0.007813165, 0.0, -0.15911353, -0.17523928, -0.1535267, 0.0, 0.15675929, 0.16531634, 0.15948962, 0.0, -0.09240023, -0.09513292, -0.084187366, 0.0) * go_0(0.0, 1.0);
result += mat4(0.069052905, 0.07278333, 0.0756627, 0.0, -0.012180326, -0.018794727, -0.031050753, 0.0, -0.044663202, -0.04362803, -0.038904265, 0.0, -0.008540197, -0.011201734, -0.01556625, 0.0) * go_0(1.0, -1.0);
result += mat4(-0.08261173, -0.09042543, -0.07589266, 0.0, 0.043515377, 0.045066774, 0.04037769, 0.0, -0.06262993, -0.07469342, -0.058593787, 0.0, 0.026696987, 0.028740842, 0.037405368, 0.0) * go_0(1.0, 0.0);
result += mat4(0.07975598, 0.09597654, 0.08997132, 0.0, -0.07844719, -0.07880916, -0.06835411, 0.0, 0.05668995, 0.050163813, 0.053357534, 0.0, -0.020040333, -0.019867316, -0.01907621, 0.0) * go_0(1.0, 1.0);
result += mat4(-0.017078733, -0.017393313, -0.008266595, 0.0, -0.0033478448, -0.0027439648, -0.0042334674, 0.0, -0.06354017, -0.062058125, -0.04652064, 0.0, -0.010787706, -0.0062706997, -0.007573461, 0.0) * go_1(-1.0, -1.0);
result += mat4(-0.019895451, -0.016341688, -0.008712399, 0.0, 0.026231976, 0.023955572, 0.0216376, 0.0, -0.061950512, -0.05481285, -0.05261985, 0.0, -0.018804235, -0.016235247, -0.0131616965, 0.0) * go_1(-1.0, 0.0);
result += mat4(-0.055628926, -0.063315354, -0.057192408, 0.0, -0.0256364, -0.028660972, -0.02937357, 0.0, -0.017604912, -0.020851422, -0.016070362, 0.0, -0.0870202, -0.0832279, -0.07525406, 0.0) * go_1(-1.0, 1.0);
result += mat4(0.062738225, 0.07106593, 0.061644047, 0.0, -0.06068257, -0.06983662, -0.066070385, 0.0, 0.024919355, 0.03227179, 0.028569462, 0.0, -0.07866227, -0.098967604, -0.092128105, 0.0) * go_1(0.0, -1.0);
result += mat4(0.040397774, 0.047241107, 0.03962998, 0.0, -0.09112752, -0.10057507, -0.09301817, 0.0, 0.10833967, 0.101835825, 0.10027467, 0.0, 0.27189335, 0.27433604, 0.26781923, 0.0) * go_1(0.0, 0.0);
result += mat4(-0.044211388, -0.042373534, -0.03658007, 0.0, 0.113148406, 0.12423258, 0.107804194, 0.0, -0.17081551, -0.18562958, -0.17475435, 0.0, 0.09636739, 0.10763415, 0.093332425, 0.0) * go_1(0.0, 1.0);
result += mat4(-0.03798545, -0.047811143, -0.050768293, 0.0, 0.018775463, 0.026812987, 0.03452908, 0.0, 0.0055677597, 0.0039081173, -0.0017878668, 0.0, -0.10728597, -0.12618187, -0.109045394, 0.0) * go_1(1.0, -1.0);
result += mat4(0.06359783, 0.064184755, 0.04934199, 0.0, -0.009819327, -0.006616115, -0.007431496, 0.0, 0.025055679, 0.024787048, 0.017360551, 0.0, -0.047140837, -0.061695747, -0.06440822, 0.0) * go_1(1.0, 0.0);
result += mat4(0.060199022, 0.06482763, 0.059514645, 0.0, 0.026998974, 0.028776823, 0.024897143, 0.0, 0.17968474, 0.19337215, 0.16760105, 0.0, 0.0075838566, 0.010503482, 0.011993149, 0.0) * go_1(1.0, 1.0);
result += vec4(-0.0052927984, -0.0060193934, -0.0048643993, 0.0);
return result + MAIN_tex(MAIN_pos);
}
================================================
FILE: assets/shaders/Anime4K_Restore_CNN_VL.glsl
================================================
// MIT License
// Copyright (c) 2019-2021 bloc97
// All rights reserved.
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
//!DESC Anime4K-v4.0-Restore-CNN-(VL)-Conv-4x3x3x3
//!HOOK MAIN
//!BIND MAIN
//!SAVE conv2d_tf
//!WIDTH MAIN.w
//!HEIGHT MAIN.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (MAIN_texOff(vec2(x_off, y_off)))
vec4 hook() {
vec4 result = mat4(0.1690102, -0.2560719, 0.39658326, -0.3679659, -0.27616683, -0.35619372, -0.3748396, 0.08430813, -0.29574734, -0.31511316, -0.09773105, 0.13616018, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, -1.0);
result += mat4(-0.1326393, -0.259433, 0.025070239, 0.58914864, -0.036478516, 0.30723435, 0.007458902, 0.012962684, 0.2493056, 0.13007334, -0.08448256, -0.38414413, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 0.0);
result += mat4(-0.11539356, 0.35253766, 0.26143202, 0.2760807, -0.09371543, -0.028165473, -0.028452158, -0.27050856, 0.06718067, -0.0056619495, -0.17654495, 0.17288211, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 1.0);
result += mat4(-0.16145481, -0.3204927, -0.54317135, 0.11830119, 0.49315026, 0.12008072, 0.50857407, -0.30382085, 0.25807253, 0.020755528, 0.29388228, 0.106109895, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, -1.0);
result += mat4(-0.22728722, 0.50484747, -0.07904469, 0.33114597, 0.50306976, -0.22760947, 0.14773269, 0.17628263, 0.14788547, -0.08223464, -0.10880935, -0.3151985, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 0.0);
result += mat4(0.3414351, 0.057279214, -0.14419858, 0.09761111, -0.11794496, 0.021717256, -0.22750235, 0.13986664, -0.38932344, 0.28996095, 0.3773904, 0.13175532, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 1.0);
result += mat4(0.1376552, -0.19587159, -0.35147396, -0.097646296, 0.1686707, -0.14385861, 0.031198, 0.12383533, -0.23089902, 0.08707301, 0.3362293, -0.100579016, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, -1.0);
result += mat4(-0.056774966, 0.047585852, -0.36395878, -0.20211312, 0.4077735, 0.12631284, 0.39813092, -0.033365678, 0.2307249, -0.09131807, 0.20823865, 0.31084216, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 0.0);
result += mat4(-0.12456089, 0.09755632, 0.31490886, -0.06579996, -0.13386595, 0.07564795, -0.26605195, -0.075180635, -0.11182657, 0.06757017, -0.14351276, -0.16828312, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 1.0);
result += vec4(-0.046043985, 0.055581126, -0.08791638, -0.13022089);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(VL)-Conv-4x3x3x3
//!HOOK MAIN
//!BIND MAIN
//!SAVE conv2d_tf1
//!WIDTH MAIN.w
//!HEIGHT MAIN.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (MAIN_texOff(vec2(x_off, y_off)))
vec4 hook() {
vec4 result = mat4(-0.15485518, -0.29363206, -0.22610365, -0.14291525, -0.45240572, -0.18319772, -0.12209436, 0.15031648, 0.09878383, 0.06711082, 0.25763842, -0.084633484, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, -1.0);
result += mat4(-0.10204406, 0.16167697, 0.22371867, -0.37947702, -0.24476196, -0.038824454, 0.060157117, 0.15764871, -0.08072927, -0.2210841, -0.31835055, 0.009979876, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 0.0);
result += mat4(0.20506924, 0.21132155, -0.0922578, -0.07430473, 0.14529926, 0.20549752, 0.0077948375, 0.13246094, -0.32353187, 0.21074104, 0.092629515, 0.17590871, 0.0, 0.0, 0.0, 0.0) * go_0(-1.0, 1.0);
result += mat4(0.04125819, -0.44050243, 0.23729716, 0.3218237, 0.12943116, -0.011674174, 0.10390632, 0.027775545, -0.20308031, -0.16904089, -0.2121676, -0.022515794, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, -1.0);
result += mat4(0.09664124, 0.20127031, 0.60345304, 0.16697013, 0.23093723, -0.38116834, 0.109695725, 0.0007595324, 0.4092646, 0.009624758, 0.11229678, 0.25326383, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 0.0);
result += mat4(0.014879592, 0.19204311, 0.07102085, -0.7312604, 0.34860876, 0.3429918, -0.027331594, 0.27636307, 0.1342437, 0.107820466, -0.12645108, 0.21081445, 0.0, 0.0, 0.0, 0.0) * go_0(0.0, 1.0);
result += mat4(-0.12687613, -0.09247973, -0.25973785, 0.4350873, -0.18987224, 0.028678741, -0.0903819, -0.63974863, 0.205591, 0.11308998, 0.18458389, -0.4149041, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, -1.0);
result += mat4(0.34691808, -0.025498383, 0.3428986, 0.21663484, 0.23404741, -0.1725327, -0.0036315925, -0.13299675, -0.1873967, 0.031331502, -0.08785591, -0.0013278709, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 0.0);
result += mat4(-0.35846514, 0.048703704, -0.104165934, 0.16529736, -0.15378916, 0.26030356, -0.07134151, 0.03692383, -0.15807101, -0.18885155, 0.044707954, -0.11444462, 0.0, 0.0, 0.0, 0.0) * go_0(1.0, 1.0);
result += vec4(-0.0022791293, -0.024132347, -0.57621074, 0.028573977);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(VL)-Conv-4x3x3x16
//!HOOK MAIN
//!BIND conv2d_tf
//!BIND conv2d_tf1
//!SAVE conv2d_1_tf
//!WIDTH conv2d_tf.w
//!HEIGHT conv2d_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max((conv2d_tf1_texOff(vec2(x_off, y_off))), 0.0))
#define go_2(x_off, y_off) (max(-(conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_3(x_off, y_off) (max(-(conv2d_tf1_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(0.010346764, 0.07230188, -0.24734616, -0.09937907, 0.02228549, -0.19550583, -0.019540425, -0.1037373, 0.033996485, -0.075554, -0.20228972, 0.07090153, -0.09194035, -0.058972966, 0.1768268, 0.27517542) * go_0(-1.0, -1.0);
result += mat4(0.020078976, 0.12433655, -0.1620775, 0.036401592, 0.079748705, 0.11660013, 0.17917652, -0.017513236, -0.18936846, 0.24478136, -0.45726213, -0.045004416, -0.08295188, 0.067733586, -0.080548316, 0.2744211) * go_0(-1.0, 0.0);
result += mat4(0.024916803, 0.27562472, 0.043771956, -0.012240604, 0.0786355, 0.042651594, 0.16049327, -0.14577515, -0.032735053, 0.17658092, 0.16382934, -0.02337374, 0.11551492, 0.056343183, -0.17930213, 0.14259394) * go_0(-1.0, 1.0);
result += mat4(0.20010485, 0.06747722, -0.19026905, 0.11013709, 0.13062745, -0.044626113, -0.0062261797, 0.2189639, 0.1403497, -0.022713251, -0.19452858, -0.010305412, -0.06407589, 0.09836748, 0.025805516, 0.23430973) * go_0(0.0, -1.0);
result += mat4(-0.14664203, 0.034910418, 0.024714258, -0.066872925, -0.15717538, -0.14179383, -0.14091893, 0.05859166, 0.18919097, -0.18544437, -0.09068573, -0.08615929, -0.051434122, 0.2170678, 0.18409058, -0.17461225) * go_0(0.0, 0.0);
result += mat4(-0.11354446, 0.10745854, 0.2682663, 0.05949201, -0.10695986, 0.1407851, -0.03551388, 0.10691649, -0.17148238, -0.38287184, 0.2074456, 0.11828914, 0.048535194, 0.1464864, -0.18169662, -0.14074169) * go_0(0.0, 1.0);
result += mat4(0.22160622, -0.1513045, -0.053284165, 0.033202525, 0.15574448, -0.043640967, -0.0093824165, -0.0019965349, -0.097964935, -0.08289824, 0.08239996, 0.07868361, 0.05731752, -0.20441617, -0.013016076, -0.253108) * go_0(1.0, -1.0);
result += mat4(-0.031249097, -0.2272863, 0.23573665, 0.03357689, 0.011395065, -0.10885564, -0.06287508, -0.031719524, 0.10331069, 0.17560169, 0.18303394, 0.022961004, -0.17011635, -0.24371737, 0.10678694, -0.3222825) * go_0(1.0, 0.0);
result += mat4(-0.1275465, -0.08844758, 0.10994917, -0.00910273, 0.09393154, 0.03894992, 0.14367905, -0.11811715, -0.09077633, -0.015776094, 0.27427456, -0.13283503, 0.18724327, -0.08139094, 0.04933602, -0.051852766) * go_0(1.0, 1.0);
result += mat4(-0.06764611, -0.27426586, 0.12045272, 0.09410856, -0.14258035, 0.11802992, -0.09093882, 0.0022018093, 0.4590643, 0.046258576, -0.07827223, 0.448011, -0.103631735, -0.016930219, -0.15421398, 0.11045997) * go_1(-1.0, -1.0);
result += mat4(-0.17295076, 0.00151352, 0.14938255, 0.08336512, -0.07496541, -0.07561223, -0.0846474, 0.14979269, -0.09142163, 0.23925088, -0.015199518, -0.37749895, -0.20636298, -0.022585187, -0.20371509, 0.0745308) * go_1(-1.0, 0.0);
result += mat4(0.06458832, -0.009722021, -0.123604394, 0.06548835, -0.3039139, -0.022024399, 0.05297587, -0.0626883, 0.23556642, 0.1516464, -0.07004877, -0.1845364, -0.05918428, 0.19158973, -0.14983447, 0.030489758) * go_1(-1.0, 1.0);
result += mat4(0.36604697, 0.17516142, -0.10853731, -0.22694224, -0.107650936, 0.23013335, 0.094055794, -0.17047717, -0.3006048, -0.08621717, -0.18815655, -0.03570218, 0.09676118, -0.017718751, 0.059138596, 0.073388465) * go_1(0.0, -1.0);
result += mat4(-0.12791575, 0.101956226, 0.13091874, -0.046373338, 0.04955811, -0.04030444, 0.13869923, -0.046699073, -0.42611042, -0.7173929, 0.052184317, 0.6178025, -0.02929954, -0.07638965, -0.15000828, 0.030710017) * go_1(0.0, 0.0);
result += mat4(0.057806686, 0.20842272, -0.20148766, 0.006666912, 0.13356528, -0.45265228, -0.07354092, 0.21447696, 0.019552143, -0.13645506, 0.14643854, -0.0071413796, -0.15487236, -0.002250615, 0.30622452, 0.0033902125) * go_1(0.0, 1.0);
result += mat4(0.06896002, 0.24397352, -0.06479052, 0.20676947, -0.24259068, 0.055320013, -0.09032122, -0.11222854, -0.08982342, -0.114818625, -0.06399291, -0.3024516, -0.06302166, -0.1925528, 0.03458982, 0.028828239) * go_1(1.0, -1.0);
result += mat4(0.09764086, 0.09599894, -0.0073313303, 0.14418933, -0.045712367, 0.12657364, 0.04620374, -0.069778584, 0.30047333, -0.012418192, 0.15516461, -0.18087754, 0.08178273, 0.14262857, -0.01741533, -0.12509112) * go_1(1.0, 0.0);
result += mat4(0.04697884, -0.1506804, 0.031823065, 0.13397239, -0.18396698, 0.10681781, -0.29586303, -0.0039136545, 0.17560847, -0.12486726, -0.018646788, -0.20688744, -0.030614454, -0.0527634, 0.23593572, -0.10542146) * go_1(1.0, 1.0);
result += mat4(-0.19182229, -0.32615846, 0.26283535, -0.1371942, -0.071202695, 0.12056063, -0.11450658, -0.27711076, -0.42096004, 0.0014352369, 0.1559669, -0.14464542, -0.17973948, 0.079166576, -0.12501791, -0.20623216) * go_2(-1.0, -1.0);
result += mat4(0.12469872, 0.32190827, -0.059510354, 0.1393449, -0.12845798, -0.019571869, -0.22630808, -0.14031963, 0.36072046, 0.05858427, 0.19278921, 0.121090546, -0.067538865, -0.018770566, 0.14318037, -0.15561756) * go_2(-1.0, 0.0);
result += mat4(0.024663208, 0.21110268, -0.016415706, 0.060093414, -0.03739678, -0.107412934, -0.077527136, 0.30331334, 0.17196326, -0.15512557, -0.09499732, -0.15748607, -0.16680105, -0.015185634, 0.16114107, -0.21288376) * go_2(-1.0, 1.0);
result += mat4(-0.17739037, -0.1190967, 0.13191372, -0.2527187, -0.14992718, -0.30511454, 0.19145966, 0.002194003, -0.12888977, 0.19152176, 0.27528167, 0.099714965, 0.12865707, -0.12051514, -0.055013947, 0.26231763) * go_2(0.0, -1.0);
result += mat4(0.46433613, -0.11708138, -0.20157282, 0.32022122, 0.079468675, 0.029407484, 0.2559102, -0.15651533, 0.08644574, -0.09747344, -0.07528584, 0.17354868, 0.19167562, -0.17698488, -0.09896657, 0.17093097) * go_2(0.0, 0.0);
result += mat4(0.20283653, -0.33680332, 0.2282385, 0.18832158, 0.20866042, 0.00076752366, 0.16471444, -0.21548858, 0.16193539, 0.17141372, 0.03140222, 0.03913644, -0.030161971, 0.00014570929, 0.08993654, -0.064823024) * go_2(0.0, 1.0);
result += mat4(-0.3075755, 0.19942546, 0.015526995, -0.120868504, -0.254515, -0.07791228, 0.03271691, 0.11794217, 0.11258601, 0.045204375, -0.061196107, -0.115958795, 0.3861869, 0.048215542, 0.07016682, -0.009975758) * go_2(1.0, -1.0);
result += mat4(-0.07623697, 0.16094944, -0.02283455, 0.14112763, -0.051149167, 0.20429814, 0.011314802, 0.18914083, -0.24240434, -0.08784008, -0.16763984, -0.08492233, 0.31062725, -0.11925119, -0.33195966, 0.2060798) * go_2(1.0, 0.0);
result += mat4(-0.016709225, -0.14472668, -0.3677625, -0.09832719, 0.030297454, -0.05775362, -0.1401375, 0.08119674, -0.01795042, 0.05183797, -0.24320887, 0.066842034, -0.22245285, -0.02740993, 0.06316751, 0.053399116) * go_2(1.0, 1.0);
result += mat4(-0.039214406, -0.08876633, 0.045552462, 0.19226661, 0.1355001, -0.13942362, 0.17398876, 0.2914014, -0.191809, 0.037143208, 0.013333581, -0.16632195, 0.113767646, -0.106692605, 0.1589787, 0.030107044) * go_3(-1.0, -1.0);
result += mat4(0.21997562, 0.13855208, -0.05783191, -0.033682413, -0.010961168, 0.10524961, 0.02177416, 0.18289444, 0.043692037, 0.07853899, -0.039936125, -0.1004449, 0.04494073, -0.020680292, 0.17578089, -0.106598996) * go_3(-1.0, 0.0);
result += mat4(0.026852835, -0.16037546, 0.11278316, 0.12656097, -0.006857894, -0.03400118, -0.051564034, 0.00085412664, -0.37556714, -0.05279987, 0.029383834, -0.14246808, -0.056380164, -0.002399925, 0.16025752, 0.036324855) * go_3(-1.0, 1.0);
result += mat4(0.022709966, 0.046350412, 0.03390721, 0.02810572, -0.14394265, 0.04215361, -0.3206118, 0.15034916, -0.0028448137, 0.1682989, -0.042686664, 0.020543462, -0.2786501, -0.007482015, -0.040313292, -0.20745736) * go_3(0.0, -1.0);
result += mat4(0.05417556, 0.18728684, -0.046121832, -0.27939513, 0.05907976, -0.09191223, -0.16625418, -0.26038164, 0.39956605, -0.052594025, -0.0596556, 0.29517552, -0.015181923, -0.0763375, 0.25131205, 0.13038464) * go_3(0.0, 0.0);
result += mat4(-0.036903054, -0.0066989153, -0.062650286, 0.05614359, -0.0064960583, 0.028512698, -0.10906273, -0.010047654, 0.23030473, 0.049983572, 0.10439064, 0.26643834, 0.05041243, 0.09185424, -0.32352915, 0.11295159) * go_3(0.0, 1.0);
result += mat4(0.09724027, -0.34962535, 0.06586686, 0.016635379, 0.13831381, 0.01707076, -0.04690347, 0.022350075, 0.018352794, 0.022000022, 0.070613205, 0.117735535, -0.025971051, 0.18832101, -0.09643588, -0.08512127) * go_3(1.0, -1.0);
result += mat4(-0.17324433, 0.06810613, -0.057295907, -0.05115964, -0.101570815, 0.12491774, 0.08762367, -0.005862404, -0.05342927, -0.031942457, -0.039624047, -0.04298937, -0.1303138, -0.11869282, -0.024832053, 0.070463404) * go_3(1.0, 0.0);
result += mat4(-0.010514842, 0.1376259, -0.11750346, -0.03786737, 0.03459249, 0.015408171, -0.031430878, -0.060825355, -0.072958425, -0.0037895301, 0.041686177, -0.12352204, -0.06261361, 0.054514423, -0.34072715, 0.13860728) * go_3(1.0, 1.0);
result += vec4(0.018166734, -0.11002478, -0.05554318, -0.0988193);
return result;
}
//!DESC Anime4K-v4.0-Restore-CNN-(VL)-Conv-4x3x3x16
//!HOOK MAIN
//!BIND conv2d_tf
//!BIND conv2d_tf1
//!SAVE conv2d_1_tf1
//!WIDTH conv2d_tf.w
//!HEIGHT conv2d_tf.h
//!COMPONENTS 4
#define go_0(x_off, y_off) (max((conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_1(x_off, y_off) (max((conv2d_tf1_texOff(vec2(x_off, y_off))), 0.0))
#define go_2(x_off, y_off) (max(-(conv2d_tf_texOff(vec2(x_off, y_off))), 0.0))
#define go_3(x_off, y_off) (max(-(conv2d_tf1_texOff(vec2(x_off, y_off))), 0.0))
vec4 hook() {
vec4 result = mat4(-0.040142782, 0.0288423, 0.07569487, -0.01490842, 0.14402796, -0.13682005, 0.027765118, 0.03907358, 0.07117706, 0.058157545, -0.23862502, -0.057674367, -0.19220531, 0.0147159435, -0.18028538, 0.0963821) * go_0(-1.0, -1.0);
result += mat4(-0.1676744, -0.11937339, 0.12137117, 0.07119485, 0.14148116, -0.043578617, -0.029261118, -0.0016938087, -0.057269357, -0.080076694, 0.12193026, 0.07326153, -0.056278303, -0.01630716, -0.03792076, 0.1483611) * go_0(-1.0, 0.0);
result += mat4(-0.3021578, 0.011601693, 0.11266048, 0.19086999, -0.0122412145, 0.08431291, 0.11615175, -0.008039614, -0.39987534, 0.07820729, 0.03509667, 0.1963505, -0.08839513, -0.21571854, 0.059425723, -0.06830175) * go_0(-1.0, 1.0);
result += mat4(0.23135209, -0.12452708, 0.0943565, 0.0028859286, -0.09836373, 0.10681712, -0.3535964, 0.08457615, 0.045332734, 0.16579892, -0.03809797, -0.021596594, 0.2937497, -0.028294371, 0.046484597, -0.037604347) * go_0(0.0, -1.0);
result += mat4(0.072675414, -0.16431206, 0.28952035, 0.0076831076, -0.020242939, 0.029483542, -0.092415355, 0.08673106, 0.12109694, 0.14307201, 0.23134442, 0.11731775, 0.09981601, -0.16968462, 0.037470713, 0.14948717) * go_0(0.0, 0.0);
result += mat4(0.0029752052, 0.06526503, 0.1866458, 0.07451277, -0.31836876, 0.17115082, -0.13969697, 0.23844297, -0.03244903, -0.08832665, 0.023691226, -0.18230624, -0.074933805, -0.00044301842, 0.050572682, 0.081511915) * go_0(0.0, 1.0);
result += mat4(0.039502528, 0.051221415, -0.13968123, -0.091212444, -0.016925618, 0.15409444, -0.017455677, -0.11653652, 0.03539446, -0.00087720866, -0.12839639, 0.037198763, 0.03674469, -0.26444665, 0.019721227, -0.13013805) * go_0(1.0, -1.0);
result += mat4(0.039229527, 0.25667152, 0.0032586441, -0.00718359, 0.1617932, 0.10409968, 0.07182867, -0.09810605, 0.07789241, -0.02014911, 0.025767172, -0.14604759, 0.07175764, 0.32513744, -0.20473222, -0.16266066) * go_0(1.0, 0.0);
result += mat4(0.13418433, 0.061813723, -0.13927278, -0.2498272, 0.03468218, 0.29483125, 0.063289374, -0.04726235, 0.1898295, -0.33132064, 0.032045014, 0.02159535, -0.1148363, 0.31306976, 0.06456038, 0.048988886) * go_0(1.0, 1.0);
result += mat4(0.07151646, 0.2799246, -0.107190795, -0.16431166, -0.28007045, 0.07206954, 0.06775463, 0.009758042, 0.07032184, -0.20843789, 0.087045245, 0.1360676, -0.25718534, 0.028249472, -0.12614648, 0.009949602) * go_1(-1.0, -1.0);
result += mat4(0.020241471, -0.23390484, -0.0083223935, 0.08344701, 0.08222297, 0.12026539, -0.08652223, -0.08228822, -0.039576706, -0.24677879, -0.1157289, 0.2590508, -0.23809408, 0.19911982, -0.116798095, -0.035870325) * go_1(-1.0, 0.0);
result += mat4(0.024991842, 0.050509237, -0.024134455, -0.12659028, 0.24089767, 0.122712664, -0.10482493, -0.19403952, -0.19177693, -0.06538376, -0.041478425, 0.32176673, -0.1534002, -0.18680622, 0.06763643, 0.020806564) * go_1(-1.0, 1.0);
result += mat4(0.03437814, -0.28067374, 0.2830681, 0.038812317, -0.021698112, -0.120865285, 0.22695538, -0.045419116, -0.030475847, -0.01977341, -0.1265364, -0.3109814, 0.012255813, 0.053917278, -0.018620957, -0.14599285) * go_1(0.0, -1.0);
result += mat4(-0.016204128, -0.04093018, 0.054571863, 0.02679643, 0.01756274, -0.057685968, 0.16148666, 0.17370272, -0.11065411, 0.06378157, -0.09331551, 0.22985275, 0.057905316, 0.12323568, 0.07748665, 0.09878629) * go_1(0.0, 0.0);
result += mat4(-0.018112244, 0.063234635, -0.013184602, 0.16241394, 0.08877139, 0.02145378, -0.02490027, -0.038920373, 0.13127136, 0.14391647, 0.020553736, 0.14401346, 0.06685973, -0.25398204, 0.10369067, -0.055949755) * go_1(0.0, 1.0);
result += mat4(0.07710333, 0.047412727, 0.13813803, 0.18624061, 0.16907091, -0.039532468, 0.06234584, 0.06408178, -0.054543987, -0.045220226, -0.11093376, -0.37399602, 0.20372874, 0.004580967, -0.07742308, 0.017989937) * go_1(1.0, -1.0);
result += mat4(0.003485311, -0.08897399, -0.013108594, -0.19473282, -0.27081844, -0.16812073, 0.0052992934, -0.055331517, 0.09446357, 0.019280333, 0.16560757, -0.3230032, 0.043096773, 0.059222896, -0.064184934, -0.059852477) * go_1(1.0, 0.0);
result += mat4(0.06794279, -0.034135245, 0.083064295, 0.13506731, 0.13064219, -0.44978833, -0.03513717, 0.08999715, 0.1124541, 0.42208397, -0.0038724816, -0.014332087, -0.13751853, -0.04929869, 0.09134992, -0.17687531) * go_1(1.0, 1.0);
result += mat4(0.100909084, -0.0131197255, 0.082274795, -0.2138443, -0.08515947, -0.021058358, 0.10951775, -0.06349191, -0.29129833, -0.029262653, 0.25235432, -0.11748315, 0.121980384, 0.062347785, 0.10916932, -0.15993518) * go_2(-1.0, -1.0);
result += mat4(0.28893283, -0.05677308
gitextract_69oby6yj/
├── .fvmrc
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug-反馈.yml
│ │ └── 功能请求.yml
│ └── workflows/
│ ├── build.yml
│ ├── ios.yml
│ ├── linux_x64.yml
│ ├── mac.yml
│ └── win_x64.yml
├── .gitignore
├── .metadata
├── .vscode/
│ ├── launch.json
│ └── settings.json
├── LICENSE
├── README.md
├── analysis_options.yaml
├── android/
│ ├── .gitignore
│ ├── app/
│ │ ├── .gitignore
│ │ ├── build.gradle.kts
│ │ ├── proguard-rules.pro
│ │ └── src/
│ │ ├── debug/
│ │ │ └── res/
│ │ │ └── values/
│ │ │ └── string.xml
│ │ ├── main/
│ │ │ ├── AndroidManifest.xml
│ │ │ ├── kotlin/
│ │ │ │ └── com/
│ │ │ │ └── example/
│ │ │ │ └── piliplus/
│ │ │ │ └── MainActivity.kt
│ │ │ └── res/
│ │ │ ├── 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
│ │ │ ├── drawable-night/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-night-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── drawable-v21/
│ │ │ │ └── launch_background.xml
│ │ │ ├── mipmap-anydpi-v26/
│ │ │ │ └── ic_launcher.xml
│ │ │ ├── raw/
│ │ │ │ └── keep.xml
│ │ │ ├── values/
│ │ │ │ ├── colors.xml
│ │ │ │ ├── string.xml
│ │ │ │ └── styles.xml
│ │ │ ├── values-night/
│ │ │ │ └── styles.xml
│ │ │ ├── values-night-v31/
│ │ │ │ ├── colors.xml
│ │ │ │ └── styles.xml
│ │ │ └── values-v31/
│ │ │ ├── colors.xml
│ │ │ └── styles.xml
│ │ └── profile/
│ │ └── AndroidManifest.xml
│ ├── build.gradle.kts
│ ├── gradle/
│ │ └── wrapper/
│ │ └── gradle-wrapper.properties
│ ├── gradle.properties
│ └── settings.gradle.kts
├── assets/
│ ├── linux/
│ │ ├── DEBIAN/
│ │ │ ├── control
│ │ │ ├── postinst
│ │ │ ├── postrm
│ │ │ └── prerm
│ │ └── com.example.piliplus.desktop
│ └── shaders/
│ ├── Anime4K_AutoDownscalePre_x2.glsl
│ ├── Anime4K_AutoDownscalePre_x4.glsl
│ ├── Anime4K_Clamp_Highlights.glsl
│ ├── Anime4K_Restore_CNN_M.glsl
│ ├── Anime4K_Restore_CNN_S.glsl
│ ├── Anime4K_Restore_CNN_VL.glsl
│ ├── Anime4K_Upscale_CNN_x2_M.glsl
│ ├── Anime4K_Upscale_CNN_x2_S.glsl
│ ├── Anime4K_Upscale_CNN_x2_VL.glsl
│ └── LICENSE
├── distribute_options.yaml
├── ios/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── AppFrameworkInfo.plist
│ │ ├── Debug.xcconfig
│ │ └── Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ ├── AppIcon.appiconset/
│ │ │ │ └── Contents.json
│ │ │ ├── LaunchBackground.imageset/
│ │ │ │ └── Contents.json
│ │ │ └── LaunchImage.imageset/
│ │ │ ├── Contents.json
│ │ │ └── README.md
│ │ ├── Base.lproj/
│ │ │ ├── LaunchScreen.storyboard
│ │ │ └── Main.storyboard
│ │ ├── Info.plist
│ │ └── Runner-Bridging-Header.h
│ ├── 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
├── lib/
│ ├── build_config.dart
│ ├── common/
│ │ ├── constants.dart
│ │ ├── skeleton/
│ │ │ ├── dynamic_card.dart
│ │ │ ├── fav_pgc_item.dart
│ │ │ ├── media_bangumi.dart
│ │ │ ├── msg_feed_sys_msg_.dart
│ │ │ ├── msg_feed_top.dart
│ │ │ ├── skeleton.dart
│ │ │ ├── space_opus.dart
│ │ │ ├── video_card_h.dart
│ │ │ ├── video_card_v.dart
│ │ │ ├── video_reply.dart
│ │ │ └── whisper_item.dart
│ │ └── widgets/
│ │ ├── appbar/
│ │ │ └── appbar.dart
│ │ ├── avatars.dart
│ │ ├── back_detector.dart
│ │ ├── badge.dart
│ │ ├── button/
│ │ │ ├── icon_button.dart
│ │ │ ├── more_btn.dart
│ │ │ └── toolbar_icon_button.dart
│ │ ├── color_palette.dart
│ │ ├── colored_box_transition.dart
│ │ ├── cropped_image.dart
│ │ ├── custom_arc.dart
│ │ ├── custom_height_widget.dart
│ │ ├── custom_icon.dart
│ │ ├── custom_toast.dart
│ │ ├── custom_tooltip.dart
│ │ ├── dialog/
│ │ │ ├── dialog.dart
│ │ │ ├── export_import.dart
│ │ │ ├── report.dart
│ │ │ └── report_member.dart
│ │ ├── disabled_icon.dart
│ │ ├── dynamic_sliver_app_bar/
│ │ │ ├── dynamic_sliver_app_bar.dart
│ │ │ ├── rendering/
│ │ │ │ └── sliver_persistent_header.dart
│ │ │ └── sliver_persistent_header.dart
│ │ ├── flutter/
│ │ │ ├── chat_list_view.dart
│ │ │ ├── draggable_sheet/
│ │ │ │ ├── draggable_scrollable_sheet_dyn.dart
│ │ │ │ └── draggable_scrollable_sheet_topic.dart
│ │ │ ├── layout_builder.dart
│ │ │ ├── list_tile.dart
│ │ │ ├── page/
│ │ │ │ ├── page_view.dart
│ │ │ │ ├── scrollable.dart
│ │ │ │ ├── scrollable_helpers.dart
│ │ │ │ └── tabs.dart
│ │ │ ├── pop_scope.dart
│ │ │ ├── popup_menu.dart
│ │ │ ├── refresh_indicator.dart
│ │ │ ├── selectable_text/
│ │ │ │ ├── selectable_region.dart
│ │ │ │ ├── selectable_text.dart
│ │ │ │ ├── selection_area.dart
│ │ │ │ ├── tap_and_drag.dart
│ │ │ │ ├── text.dart
│ │ │ │ └── text_selection.dart
│ │ │ ├── sliver_layout_builder.dart
│ │ │ ├── tabs.dart
│ │ │ ├── text/
│ │ │ │ ├── paragraph.dart
│ │ │ │ ├── rich_text.dart
│ │ │ │ └── text.dart
│ │ │ ├── text_field/
│ │ │ │ ├── adaptive_text_selection_toolbar.dart
│ │ │ │ ├── controller.dart
│ │ │ │ ├── cupertino/
│ │ │ │ │ ├── adaptive_text_selection_toolbar.dart
│ │ │ │ │ ├── spell_check_suggestions_toolbar.dart
│ │ │ │ │ └── text_field.dart
│ │ │ │ ├── editable.dart
│ │ │ │ ├── editable_text.dart
│ │ │ │ ├── spell_check.dart
│ │ │ │ ├── spell_check_suggestions_toolbar.dart
│ │ │ │ ├── system_context_menu.dart
│ │ │ │ ├── text_field.dart
│ │ │ │ └── text_selection.dart
│ │ │ └── vertical_tabs.dart
│ │ ├── gesture/
│ │ │ ├── horizontal_drag_gesture_recognizer.dart
│ │ │ ├── image_horizontal_drag_gesture_recognizer.dart
│ │ │ ├── immediate_tap_gesture_recognizer.dart
│ │ │ ├── mouse_interactive_viewer.dart
│ │ │ └── tap_gesture_recognizer.dart
│ │ ├── image/
│ │ │ ├── cached_network_svg_image.dart
│ │ │ ├── image_save.dart
│ │ │ └── network_img_layer.dart
│ │ ├── image_grid/
│ │ │ ├── image_grid_builder.dart
│ │ │ └── image_grid_view.dart
│ │ ├── image_viewer/
│ │ │ ├── gallery_viewer.dart
│ │ │ ├── hero.dart
│ │ │ ├── hero_dialog_route.dart
│ │ │ ├── image.dart
│ │ │ ├── loading_indicator.dart
│ │ │ └── viewer.dart
│ │ ├── keep_alive_wrapper.dart
│ │ ├── loading_widget/
│ │ │ ├── http_error.dart
│ │ │ ├── loading_widget.dart
│ │ │ └── m3e_loading_indicator.dart
│ │ ├── loading_widget.dart
│ │ ├── marquee.dart
│ │ ├── only_layout_widget.dart
│ │ ├── pair.dart
│ │ ├── pendant_avatar.dart
│ │ ├── player_bar.dart
│ │ ├── progress_bar/
│ │ │ ├── audio_video_progress_bar.dart
│ │ │ ├── segment_progress_bar.dart
│ │ │ └── video_progress_indicator.dart
│ │ ├── radio_widget.dart
│ │ ├── route_aware_mixin.dart
│ │ ├── scale_app.dart
│ │ ├── scroll_behavior.dart
│ │ ├── scroll_physics.dart
│ │ ├── select_mask.dart
│ │ ├── self_sized_horizontal_list.dart
│ │ ├── sliver/
│ │ │ ├── sliver_floating_header.dart
│ │ │ ├── sliver_pinned_dynamic_header.dart
│ │ │ └── sliver_pinned_header.dart
│ │ ├── sliver_wrap.dart
│ │ ├── stat/
│ │ │ └── stat.dart
│ │ ├── stateful_builder.dart
│ │ ├── time_picker.dart
│ │ ├── video_card/
│ │ │ ├── video_card_h.dart
│ │ │ └── video_card_v.dart
│ │ ├── video_popup_menu.dart
│ │ ├── view_safe_area.dart
│ │ └── view_sliver_safe_area.dart
│ ├── grpc/
│ │ ├── audio.dart
│ │ ├── bilibili/
│ │ │ ├── account/
│ │ │ │ └── service/
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── app/
│ │ │ │ ├── archive/
│ │ │ │ │ ├── middleware/
│ │ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── card/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── dynamic/
│ │ │ │ │ ├── common.pb.dart
│ │ │ │ │ ├── common.pbenum.dart
│ │ │ │ │ ├── common.pbjson.dart
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ ├── v1.pbjson.dart
│ │ │ │ │ ├── v2.pb.dart
│ │ │ │ │ ├── v2.pbenum.dart
│ │ │ │ │ └── v2.pbjson.dart
│ │ │ │ ├── im/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── listener/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── playurl/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ └── viewunite/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ ├── common.pbjson.dart
│ │ │ │ ├── pgcanymodel.pb.dart
│ │ │ │ ├── pgcanymodel.pbenum.dart
│ │ │ │ ├── pgcanymodel.pbjson.dart
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── community/
│ │ │ │ └── service/
│ │ │ │ └── dm/
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── dagw/
│ │ │ │ └── component/
│ │ │ │ └── avatar/
│ │ │ │ ├── common.pb.dart
│ │ │ │ ├── common.pbenum.dart
│ │ │ │ ├── common.pbjson.dart
│ │ │ │ ├── v1/
│ │ │ │ │ ├── plugin.pb.dart
│ │ │ │ │ ├── plugin.pbenum.dart
│ │ │ │ │ └── plugin.pbjson.dart
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── im/
│ │ │ │ ├── interfaces/
│ │ │ │ │ ├── v1.pb.dart
│ │ │ │ │ ├── v1.pbenum.dart
│ │ │ │ │ └── v1.pbjson.dart
│ │ │ │ ├── type.pb.dart
│ │ │ │ ├── type.pbenum.dart
│ │ │ │ └── type.pbjson.dart
│ │ │ ├── main/
│ │ │ │ └── community/
│ │ │ │ └── reply/
│ │ │ │ ├── v1.pb.dart
│ │ │ │ ├── v1.pbenum.dart
│ │ │ │ └── v1.pbjson.dart
│ │ │ ├── metadata/
│ │ │ │ ├── device.pb.dart
│ │ │ │ ├── device.pbenum.dart
│ │ │ │ ├── device.pbjson.dart
│ │ │ │ ├── fawkes.pb.dart
│ │ │ │ ├── fawkes.pbenum.dart
│ │ │ │ ├── fawkes.pbjson.dart
│ │ │ │ ├── locale.pb.dart
│ │ │ │ ├── locale.pbenum.dart
│ │ │ │ ├── locale.pbjson.dart
│ │ │ │ ├── network.pb.dart
│ │ │ │ ├── network.pbenum.dart
│ │ │ │ ├── network.pbjson.dart
│ │ │ │ ├── parabox.pb.dart
│ │ │ │ ├── parabox.pbenum.dart
│ │ │ │ ├── parabox.pbjson.dart
│ │ │ │ ├── restriction.pb.dart
│ │ │ │ ├── restriction.pbenum.dart
│ │ │ │ └── restriction.pbjson.dart
│ │ │ ├── metadata.pb.dart
│ │ │ ├── metadata.pbenum.dart
│ │ │ ├── metadata.pbjson.dart
│ │ │ ├── pagination.pb.dart
│ │ │ ├── pagination.pbenum.dart
│ │ │ ├── pagination.pbjson.dart
│ │ │ ├── playershared.pb.dart
│ │ │ ├── playershared.pbenum.dart
│ │ │ ├── playershared.pbjson.dart
│ │ │ ├── rpc.pb.dart
│ │ │ ├── rpc.pbenum.dart
│ │ │ ├── rpc.pbjson.dart
│ │ │ └── vas/
│ │ │ └── garb/
│ │ │ ├── model.pb.dart
│ │ │ ├── model.pbenum.dart
│ │ │ ├── model.pbjson.dart
│ │ │ ├── service.pb.dart
│ │ │ ├── service.pbenum.dart
│ │ │ └── service.pbjson.dart
│ │ ├── dm.dart
│ │ ├── dyn.dart
│ │ ├── grpc_req.dart
│ │ ├── im.dart
│ │ ├── reply.dart
│ │ ├── space.dart
│ │ ├── url.dart
│ │ └── view.dart
│ ├── http/
│ │ ├── api.dart
│ │ ├── black.dart
│ │ ├── browser_ua.dart
│ │ ├── constants.dart
│ │ ├── danmaku.dart
│ │ ├── danmaku_block.dart
│ │ ├── download.dart
│ │ ├── dynamics.dart
│ │ ├── fan.dart
│ │ ├── fav.dart
│ │ ├── follow.dart
│ │ ├── init.dart
│ │ ├── live.dart
│ │ ├── loading_state.dart
│ │ ├── login.dart
│ │ ├── match.dart
│ │ ├── member.dart
│ │ ├── msg.dart
│ │ ├── music.dart
│ │ ├── pgc.dart
│ │ ├── reply.dart
│ │ ├── retry_interceptor.dart
│ │ ├── search.dart
│ │ ├── sponsor_block.dart
│ │ ├── sponsor_block_api.dart
│ │ ├── user.dart
│ │ ├── validate.dart
│ │ └── video.dart
│ ├── main.dart
│ ├── models/
│ │ ├── common/
│ │ │ ├── account_type.dart
│ │ │ ├── audio_normalization.dart
│ │ │ ├── avatar_badge_type.dart
│ │ │ ├── badge_type.dart
│ │ │ ├── bar_hide_type.dart
│ │ │ ├── dm_block_type.dart
│ │ │ ├── dynamic/
│ │ │ │ ├── dynamic_badge_mode.dart
│ │ │ │ ├── dynamics_type.dart
│ │ │ │ └── up_panel_position.dart
│ │ │ ├── enum_with_label.dart
│ │ │ ├── episode_panel_type.dart
│ │ │ ├── fav_order_type.dart
│ │ │ ├── fav_type.dart
│ │ │ ├── follow_order_type.dart
│ │ │ ├── home_tab_type.dart
│ │ │ ├── image_preview_type.dart
│ │ │ ├── image_type.dart
│ │ │ ├── later_view_type.dart
│ │ │ ├── live/
│ │ │ │ ├── live_contribution_rank_type.dart
│ │ │ │ ├── live_dm_silent_type.dart
│ │ │ │ └── live_search_type.dart
│ │ │ ├── member/
│ │ │ │ ├── contribute_type.dart
│ │ │ │ ├── profile_type.dart
│ │ │ │ ├── search_type.dart
│ │ │ │ ├── tab_type.dart
│ │ │ │ └── user_info_type.dart
│ │ │ ├── msg/
│ │ │ │ ├── msg_type.dart
│ │ │ │ └── msg_unread_type.dart
│ │ │ ├── nav_bar_config.dart
│ │ │ ├── pgc_review_type.dart
│ │ │ ├── publish_panel_type.dart
│ │ │ ├── rank_type.dart
│ │ │ ├── reply/
│ │ │ │ ├── reply_option_type.dart
│ │ │ │ ├── reply_search_type.dart
│ │ │ │ ├── reply_sort_type.dart
│ │ │ │ └── reply_type.dart
│ │ │ ├── search/
│ │ │ │ ├── article_search_type.dart
│ │ │ │ ├── search_type.dart
│ │ │ │ ├── user_search_type.dart
│ │ │ │ └── video_search_type.dart
│ │ │ ├── setting_type.dart
│ │ │ ├── sponsor_block/
│ │ │ │ ├── action_type.dart
│ │ │ │ ├── post_segment_model.dart
│ │ │ │ ├── segment_model.dart
│ │ │ │ ├── segment_type.dart
│ │ │ │ └── skip_type.dart
│ │ │ ├── stat_type.dart
│ │ │ ├── super_chat_type.dart
│ │ │ ├── super_resolution_type.dart
│ │ │ ├── theme/
│ │ │ │ ├── theme_color_type.dart
│ │ │ │ └── theme_type.dart
│ │ │ ├── video/
│ │ │ │ ├── audio_quality.dart
│ │ │ │ ├── cdn_type.dart
│ │ │ │ ├── live_quality.dart
│ │ │ │ ├── source_type.dart
│ │ │ │ ├── subtitle_pref_type.dart
│ │ │ │ ├── video_decode_type.dart
│ │ │ │ ├── video_quality.dart
│ │ │ │ └── video_type.dart
│ │ │ └── webview_menu_type.dart
│ │ ├── dynamics/
│ │ │ ├── article_content_model.dart
│ │ │ ├── result.dart
│ │ │ ├── up.dart
│ │ │ └── vote_model.dart
│ │ ├── home/
│ │ │ └── rcmd/
│ │ │ └── result.dart
│ │ ├── login/
│ │ │ └── model.dart
│ │ ├── member/
│ │ │ ├── info.dart
│ │ │ └── tags.dart
│ │ ├── model_avatar.dart
│ │ ├── model_hot_video_item.dart
│ │ ├── model_owner.dart
│ │ ├── model_owner.g.dart
│ │ ├── model_rec_video_item.dart
│ │ ├── model_video.dart
│ │ ├── pgc_lcf.dart
│ │ ├── search/
│ │ │ ├── result.dart
│ │ │ └── suggest.dart
│ │ ├── user/
│ │ │ ├── danmaku_block.dart
│ │ │ ├── danmaku_rule.dart
│ │ │ ├── danmaku_rule_adapter.dart
│ │ │ ├── info.dart
│ │ │ ├── info.g.dart
│ │ │ ├── stat.dart
│ │ │ └── stat.g.dart
│ │ └── video/
│ │ └── play/
│ │ └── url.dart
│ ├── models_new/
│ │ ├── account_myinfo/
│ │ │ └── data.dart
│ │ ├── article/
│ │ │ ├── article_info/
│ │ │ │ ├── data.dart
│ │ │ │ ├── share_channel.dart
│ │ │ │ └── stats.dart
│ │ │ ├── article_list/
│ │ │ │ ├── article.dart
│ │ │ │ ├── category.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── label.dart
│ │ │ │ ├── last.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── stats.dart
│ │ │ └── article_view/
│ │ │ ├── category.dart
│ │ │ ├── data.dart
│ │ │ ├── label.dart
│ │ │ ├── media.dart
│ │ │ ├── ops.dart
│ │ │ ├── opus.dart
│ │ │ ├── stats.dart
│ │ │ └── tag.dart
│ │ ├── blacklist/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── coin_log/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── danmaku/
│ │ │ └── post.dart
│ │ ├── download/
│ │ │ ├── bili_download_entry_info.dart
│ │ │ ├── bili_download_media_file_info.dart
│ │ │ └── download_info.dart
│ │ ├── dynamic/
│ │ │ ├── dyn_mention/
│ │ │ │ ├── data.dart
│ │ │ │ ├── group.dart
│ │ │ │ └── item.dart
│ │ │ ├── dyn_reserve/
│ │ │ │ └── data.dart
│ │ │ ├── dyn_reserve_info/
│ │ │ │ └── data.dart
│ │ │ ├── dyn_topic_feed/
│ │ │ │ ├── all_sort_by.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── topic_card_list.dart
│ │ │ │ └── topic_sort_by_conf.dart
│ │ │ ├── dyn_topic_pub_search/
│ │ │ │ ├── data.dart
│ │ │ │ ├── new_topic.dart
│ │ │ │ └── page_info.dart
│ │ │ └── dyn_topic_top/
│ │ │ ├── top_details.dart
│ │ │ ├── topic_creator.dart
│ │ │ └── topic_item.dart
│ │ ├── emote/
│ │ │ ├── data.dart
│ │ │ ├── emote.dart
│ │ │ ├── meta.dart
│ │ │ └── package.dart
│ │ ├── fav/
│ │ │ ├── fav_article/
│ │ │ │ ├── author.dart
│ │ │ │ ├── cover.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── stat.dart
│ │ │ ├── fav_detail/
│ │ │ │ ├── cnt_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── info.dart
│ │ │ │ ├── media.dart
│ │ │ │ ├── ogv.dart
│ │ │ │ └── ugc.dart
│ │ │ ├── fav_folder/
│ │ │ │ ├── data.dart
│ │ │ │ └── list.dart
│ │ │ ├── fav_note/
│ │ │ │ ├── arc.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── page.dart
│ │ │ ├── fav_pgc/
│ │ │ │ ├── area.dart
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── badge_infos.dart
│ │ │ │ ├── cc_on_lock.dart
│ │ │ │ ├── config_attrs.dart
│ │ │ │ ├── content_attr.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── first_ep_info.dart
│ │ │ │ ├── highlight_ineffective_hd.dart
│ │ │ │ ├── highlight_ineffective_ott.dart
│ │ │ │ ├── highlight_ineffective_pink.dart
│ │ │ │ ├── list.dart
│ │ │ │ ├── multi_img.dart
│ │ │ │ ├── new_ep.dart
│ │ │ │ ├── producer.dart
│ │ │ │ ├── publish.dart
│ │ │ │ ├── rating.dart
│ │ │ │ ├── rights.dart
│ │ │ │ ├── section.dart
│ │ │ │ ├── series.dart
│ │ │ │ ├── stat.dart
│ │ │ │ └── vip_or_pay.dart
│ │ │ └── fav_topic/
│ │ │ ├── data.dart
│ │ │ ├── page_info.dart
│ │ │ ├── topic_item.dart
│ │ │ └── topic_list.dart
│ │ ├── follow/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── followee_votes/
│ │ │ └── vote.dart
│ │ ├── history/
│ │ │ ├── cursor.dart
│ │ │ ├── data.dart
│ │ │ ├── history.dart
│ │ │ ├── list.dart
│ │ │ └── tab.dart
│ │ ├── later/
│ │ │ ├── bangumi.dart
│ │ │ ├── data.dart
│ │ │ ├── list.dart
│ │ │ ├── page.dart
│ │ │ ├── rights.dart
│ │ │ ├── season.dart
│ │ │ └── stat.dart
│ │ ├── live/
│ │ │ ├── live_area_list/
│ │ │ │ ├── area_item.dart
│ │ │ │ └── area_list.dart
│ │ │ ├── live_contribution_rank/
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── medal_info.dart
│ │ │ ├── live_danmaku/
│ │ │ │ ├── danmaku_msg.dart
│ │ │ │ └── live_emote.dart
│ │ │ ├── live_dm_block/
│ │ │ │ ├── data.dart
│ │ │ │ ├── shield_info.dart
│ │ │ │ ├── shield_rules.dart
│ │ │ │ └── shield_user_list.dart
│ │ │ ├── live_dm_info/
│ │ │ │ ├── data.dart
│ │ │ │ └── host_list.dart
│ │ │ ├── live_emote/
│ │ │ │ ├── data.dart
│ │ │ │ ├── datum.dart
│ │ │ │ └── emoticon.dart
│ │ │ ├── live_feed_index/
│ │ │ │ ├── card_data.dart
│ │ │ │ ├── card_data_item.dart
│ │ │ │ ├── card_data_list_item.dart
│ │ │ │ ├── card_list.dart
│ │ │ │ ├── data.dart
│ │ │ │ └── watched_show.dart
│ │ │ ├── live_follow/
│ │ │ │ ├── data.dart
│ │ │ │ └── item.dart
│ │ │ ├── live_room_info_h5/
│ │ │ │ ├── anchor_info.dart
│ │ │ │ ├── base_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ └── room_info.dart
│ │ │ ├── live_room_play_info/
│ │ │ │ ├── codec.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── format.dart
│ │ │ │ ├── playurl.dart
│ │ │ │ ├── playurl_info.dart
│ │ │ │ ├── stream.dart
│ │ │ │ └── url_info.dart
│ │ │ ├── live_search/
│ │ │ │ ├── data.dart
│ │ │ │ ├── live_search.dart
│ │ │ │ ├── room.dart
│ │ │ │ ├── room_item.dart
│ │ │ │ ├── user.dart
│ │ │ │ └── user_item.dart
│ │ │ ├── live_second_list/
│ │ │ │ ├── data.dart
│ │ │ │ └── tag.dart
│ │ │ └── live_superchat/
│ │ │ ├── data.dart
│ │ │ ├── item.dart
│ │ │ └── user_info.dart
│ │ ├── login_devices/
│ │ │ ├── data.dart
│ │ │ └── device.dart
│ │ ├── login_log/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── match/
│ │ │ └── match_info/
│ │ │ ├── contest.dart
│ │ │ ├── data.dart
│ │ │ ├── home_away.dart
│ │ │ ├── season.dart
│ │ │ ├── success_teaminfo.dart
│ │ │ └── team.dart
│ │ ├── media_list/
│ │ │ ├── badge.dart
│ │ │ ├── coin.dart
│ │ │ ├── data.dart
│ │ │ ├── media_list.dart
│ │ │ ├── ogv_info.dart
│ │ │ ├── page.dart
│ │ │ └── rights.dart
│ │ ├── member/
│ │ │ ├── coin_like_arc/
│ │ │ │ ├── data.dart
│ │ │ │ └── item.dart
│ │ │ └── search_archive/
│ │ │ ├── data.dart
│ │ │ ├── episodic_button.dart
│ │ │ ├── list.dart
│ │ │ ├── page.dart
│ │ │ └── vlist.dart
│ │ ├── member_card_info/
│ │ │ ├── card.dart
│ │ │ └── data.dart
│ │ ├── msg/
│ │ │ ├── im_user_infos/
│ │ │ │ └── datum.dart
│ │ │ ├── msg_at/
│ │ │ │ ├── content.dart
│ │ │ │ ├── cursor.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_dnd/
│ │ │ │ └── uid_setting.dart
│ │ │ ├── msg_like/
│ │ │ │ ├── content.dart
│ │ │ │ ├── cursor.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── latest.dart
│ │ │ │ ├── total.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_like_detail/
│ │ │ │ ├── card.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── page.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_reply/
│ │ │ │ ├── content.dart
│ │ │ │ ├── cursor.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── user.dart
│ │ │ ├── msg_sys/
│ │ │ │ ├── data.dart
│ │ │ │ ├── publisher.dart
│ │ │ │ └── source.dart
│ │ │ ├── msgfeed_unread.dart
│ │ │ └── session_ss/
│ │ │ └── data.dart
│ │ ├── msgfeed_unread/
│ │ │ └── data.dart
│ │ ├── music/
│ │ │ ├── bgm_detail.dart
│ │ │ └── bgm_recommend_list.dart
│ │ ├── pgc/
│ │ │ ├── pgc_index_condition/
│ │ │ │ ├── data.dart
│ │ │ │ ├── sort.dart
│ │ │ │ └── value.dart
│ │ │ ├── pgc_index_result/
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── first_ep.dart
│ │ │ │ └── list.dart
│ │ │ ├── pgc_info_model/
│ │ │ │ ├── activity.dart
│ │ │ │ ├── area.dart
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── brief.dart
│ │ │ │ ├── cooperator.dart
│ │ │ │ ├── danmaku.dart
│ │ │ │ ├── ed.dart
│ │ │ │ ├── episode.dart
│ │ │ │ ├── icon_font.dart
│ │ │ │ ├── new_ep.dart
│ │ │ │ ├── op.dart
│ │ │ │ ├── publish.dart
│ │ │ │ ├── rating.dart
│ │ │ │ ├── result.dart
│ │ │ │ ├── rights.dart
│ │ │ │ ├── season.dart
│ │ │ │ ├── section.dart
│ │ │ │ ├── series.dart
│ │ │ │ ├── skip.dart
│ │ │ │ ├── stat.dart
│ │ │ │ ├── stat_for_unity.dart
│ │ │ │ ├── up_info.dart
│ │ │ │ ├── user_progress.dart
│ │ │ │ ├── user_status.dart
│ │ │ │ └── vt.dart
│ │ │ ├── pgc_rank/
│ │ │ │ ├── badge_info.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── icon_font.dart
│ │ │ │ ├── new_ep.dart
│ │ │ │ ├── pgc_rank_item_model.dart
│ │ │ │ └── stat.dart
│ │ │ ├── pgc_review/
│ │ │ │ ├── author.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── stat.dart
│ │ │ └── pgc_timeline/
│ │ │ ├── episode.dart
│ │ │ ├── icon_font.dart
│ │ │ ├── pgc_timeline.dart
│ │ │ └── result.dart
│ │ ├── popular/
│ │ │ ├── popular_precious/
│ │ │ │ └── data.dart
│ │ │ ├── popular_series_list/
│ │ │ │ └── list.dart
│ │ │ └── popular_series_one/
│ │ │ ├── config.dart
│ │ │ └── data.dart
│ │ ├── reply/
│ │ │ ├── content.dart
│ │ │ ├── control.dart
│ │ │ ├── cursor.dart
│ │ │ ├── data.dart
│ │ │ ├── folder.dart
│ │ │ ├── level_info.dart
│ │ │ ├── member.dart
│ │ │ ├── nameplate.dart
│ │ │ ├── pagination_reply.dart
│ │ │ ├── picture.dart
│ │ │ ├── reply.dart
│ │ │ ├── reply_control.dart
│ │ │ ├── senior.dart
│ │ │ ├── top.dart
│ │ │ ├── top_reply.dart
│ │ │ ├── up_action.dart
│ │ │ ├── up_selection.dart
│ │ │ └── upper.dart
│ │ ├── reply2reply/
│ │ │ ├── data.dart
│ │ │ ├── page.dart
│ │ │ └── root.dart
│ │ ├── reply_interaction/
│ │ │ ├── data.dart
│ │ │ └── interact_status.dart
│ │ ├── search/
│ │ │ ├── search_rcmd/
│ │ │ │ └── data.dart
│ │ │ └── search_trending/
│ │ │ ├── data.dart
│ │ │ └── list.dart
│ │ ├── single_unread/
│ │ │ └── data.dart
│ │ ├── space/
│ │ │ ├── space/
│ │ │ │ ├── achieve.dart
│ │ │ │ ├── archive.dart
│ │ │ │ ├── article.dart
│ │ │ │ ├── attention_tip.dart
│ │ │ │ ├── audios.dart
│ │ │ │ ├── author.dart
│ │ │ │ ├── badge.dart
│ │ │ │ ├── button.dart
│ │ │ │ ├── card.dart
│ │ │ │ ├── category.dart
│ │ │ │ ├── cheese.dart
│ │ │ │ ├── coin_archive.dart
│ │ │ │ ├── collection_top_simple.dart
│ │ │ │ ├── color_config.dart
│ │ │ │ ├── colour.dart
│ │ │ │ ├── comic.dart
│ │ │ │ ├── container_size.dart
│ │ │ │ ├── cover.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── day.dart
│ │ │ │ ├── digital_info.dart
│ │ │ │ ├── display.dart
│ │ │ │ ├── draw.dart
│ │ │ │ ├── draw_src.dart
│ │ │ │ ├── elec.dart
│ │ │ │ ├── elec_list.dart
│ │ │ │ ├── elec_set.dart
│ │ │ │ ├── entrance.dart
│ │ │ │ ├── entrance_button.dart
│ │ │ │ ├── entry.dart
│ │ │ │ ├── episodic_button.dart
│ │ │ │ ├── extra.dart
│ │ │ │ ├── favourite2.dart
│ │ │ │ ├── followings_followed_upper.dart
│ │ │ │ ├── general_spec.dart
│ │ │ │ ├── guard.dart
│ │ │ │ ├── honours.dart
│ │ │ │ ├── images.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── label.dart
│ │ │ │ ├── level_info.dart
│ │ │ │ ├── like_archive.dart
│ │ │ │ ├── likes.dart
│ │ │ │ ├── list.dart
│ │ │ │ ├── live.dart
│ │ │ │ ├── live_fans_wearing.dart
│ │ │ │ ├── media.dart
│ │ │ │ ├── nameplate.dart
│ │ │ │ ├── nft.dart
│ │ │ │ ├── nft_certificate.dart
│ │ │ │ ├── nft_show_module.dart
│ │ │ │ ├── night.dart
│ │ │ │ ├── official_verify.dart
│ │ │ │ ├── order.dart
│ │ │ │ ├── play_game.dart
│ │ │ │ ├── pos_spec.dart
│ │ │ │ ├── pr_info.dart
│ │ │ │ ├── preference.dart
│ │ │ │ ├── profession_verify.dart
│ │ │ │ ├── purchase_button.dart
│ │ │ │ ├── relation.dart
│ │ │ │ ├── render_spec.dart
│ │ │ │ ├── res_native_draw.dart
│ │ │ │ ├── resource.dart
│ │ │ │ ├── season.dart
│ │ │ │ ├── senior_inquiry.dart
│ │ │ │ ├── series.dart
│ │ │ │ ├── setting.dart
│ │ │ │ ├── size_spec.dart
│ │ │ │ ├── space_button_list.dart
│ │ │ │ ├── space_tag.dart
│ │ │ │ ├── stats.dart
│ │ │ │ ├── tab.dart
│ │ │ │ ├── tab2.dart
│ │ │ │ ├── top.dart
│ │ │ │ └── ugc_season.dart
│ │ │ ├── space_archive/
│ │ │ │ ├── badge.dart
│ │ │ │ ├── cursor_attr.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── episodic_button.dart
│ │ │ │ ├── history.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── last_watched_locator.dart
│ │ │ │ ├── order.dart
│ │ │ │ ├── season.dart
│ │ │ │ └── stats.dart
│ │ │ ├── space_article/
│ │ │ │ ├── author.dart
│ │ │ │ ├── category.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── list.dart
│ │ │ │ ├── media.dart
│ │ │ │ └── stats.dart
│ │ │ ├── space_audio/
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── statistic.dart
│ │ │ ├── space_cheese/
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── page.dart
│ │ │ ├── space_fav/
│ │ │ │ ├── data.dart
│ │ │ │ ├── list.dart
│ │ │ │ └── media_list_response.dart
│ │ │ ├── space_opus/
│ │ │ │ ├── cover.dart
│ │ │ │ ├── data.dart
│ │ │ │ ├── item.dart
│ │ │ │ └── stat.dart
│ │ │ ├── space_season_series/
│ │ │ │ ├── archive.dart
│ │ │ │ ├── item.dart
│ │ │ │ ├── page.dart
│ │ │ │ ├── season.dart
│ │ │ │ └── stat.dart
│ │ │ └── space_shop/
│ │ │ ├── below_label.dart
│ │ │ ├── benefit_info.dart
│ │ │ ├── cover.dart
│ │ │ ├── data.dart
│ │ │ ├── item.dart
│ │ │ ├── net_price.dart
│ │ │ ├── report_params.dart
│ │ │ ├── source_desc.dart
│ │ │ └── source_front_tag.dart
│ │ ├── space_setting/
│ │ │ ├── data.dart
│ │ │ └── privacy.dart
│ │ ├── sponsor_block/
│ │ │ ├── segment_item.dart
│ │ │ └── user_info.dart
│ │ ├── sub/
│ │ │ ├── sub/
│ │ │ │ ├── data.dart
│ │ │ │ └── list.dart
│ │ │ └── sub_detail/
│ │ │ ├── data.dart
│ │ │ └── media.dart
│ │ ├── triple/
│ │ │ ├── pgc_triple.dart
│ │ │ └── ugc_triple.dart
│ │ ├── upload_bfs/
│ │ │ └── data.dart
│ │ ├── upower_rank/
│ │ │ ├── data.dart
│ │ │ ├── level_info.dart
│ │ │ ├── rank_info.dart
│ │ │ ├── up_info.dart
│ │ │ └── user_info.dart
│ │ ├── user_real_name/
│ │ │ ├── data.dart
│ │ │ └── reject_page.dart
│ │ └── video/
│ │ ├── video_ai_conclusion/
│ │ │ ├── data.dart
│ │ │ ├── model_result.dart
│ │ │ ├── outline.dart
│ │ │ ├── part_outline.dart
│ │ │ ├── part_subtitle.dart
│ │ │ └── subtitle.dart
│ │ ├── video_detail/
│ │ │ ├── arc.dart
│ │ │ ├── argue_info.dart
│ │ │ ├── data.dart
│ │ │ ├── desc_v2.dart
│ │ │ ├── dimension.dart
│ │ │ ├── episode.dart
│ │ │ ├── page.dart
│ │ │ ├── rights.dart
│ │ │ ├── section.dart
│ │ │ ├── staff.dart
│ │ │ ├── stat.dart
│ │ │ ├── stat_detail.dart
│ │ │ ├── subtitle.dart
│ │ │ ├── ugc_season.dart
│ │ │ ├── user_garb.dart
│ │ │ └── video_detail_response.dart
│ │ ├── video_note_list/
│ │ │ ├── author.dart
│ │ │ ├── data.dart
│ │ │ ├── list.dart
│ │ │ └── page.dart
│ │ ├── video_pbp/
│ │ │ └── data.dart
│ │ ├── video_play_info/
│ │ │ ├── data.dart
│ │ │ ├── interaction.dart
│ │ │ ├── subtitle.dart
│ │ │ ├── subtitle_info.dart
│ │ │ └── view_point.dart
│ │ ├── video_relation/
│ │ │ └── data.dart
│ │ ├── video_shot/
│ │ │ └── data.dart
│ │ ├── video_stein_edgeinfo/
│ │ │ ├── choice.dart
│ │ │ ├── data.dart
│ │ │ ├── edges.dart
│ │ │ ├── preload.dart
│ │ │ ├── question.dart
│ │ │ ├── skin.dart
│ │ │ ├── story_list.dart
│ │ │ └── video.dart
│ │ └── video_tag/
│ │ └── data.dart
│ ├── pages/
│ │ ├── about/
│ │ │ └── view.dart
│ │ ├── article/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── article_ops.dart
│ │ │ ├── html_render.dart
│ │ │ └── opus_content.dart
│ │ ├── article_list/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── audio/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── blacklist/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── coin_log/
│ │ │ └── controller.dart
│ │ ├── common/
│ │ │ ├── common_controller.dart
│ │ │ ├── common_data_controller.dart
│ │ │ ├── common_intro_controller.dart
│ │ │ ├── common_list_controller.dart
│ │ │ ├── common_page.dart
│ │ │ ├── common_whisper_controller.dart
│ │ │ ├── dyn/
│ │ │ │ ├── common_dyn_controller.dart
│ │ │ │ └── common_dyn_page.dart
│ │ │ ├── fab_mixin.dart
│ │ │ ├── multi_select/
│ │ │ │ ├── base.dart
│ │ │ │ └── multi_select_controller.dart
│ │ │ ├── publish/
│ │ │ │ ├── common_publish_page.dart
│ │ │ │ ├── common_rich_text_pub_page.dart
│ │ │ │ ├── common_text_pub_page.dart
│ │ │ │ └── publish_route.dart
│ │ │ ├── reply_controller.dart
│ │ │ ├── search/
│ │ │ │ ├── common_search_controller.dart
│ │ │ │ └── common_search_page.dart
│ │ │ └── slide/
│ │ │ └── common_slide_page.dart
│ │ ├── contact/
│ │ │ └── view.dart
│ │ ├── danmaku/
│ │ │ ├── controller.dart
│ │ │ ├── danmaku_model.dart
│ │ │ └── view.dart
│ │ ├── danmaku_block/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dlna/
│ │ │ └── view.dart
│ │ ├── download/
│ │ │ ├── controller.dart
│ │ │ ├── detail/
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── downloading/
│ │ │ │ └── view.dart
│ │ │ ├── search/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ └── view.dart
│ │ ├── dynamics/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── action_panel.dart
│ │ │ ├── additional_panel.dart
│ │ │ ├── author_panel.dart
│ │ │ ├── blocked_item.dart
│ │ │ ├── content_panel.dart
│ │ │ ├── dyn_content.dart
│ │ │ ├── dynamic_panel.dart
│ │ │ ├── forward_panel.dart
│ │ │ ├── interaction.dart
│ │ │ ├── live_panel.dart
│ │ │ ├── live_panel_sub.dart
│ │ │ ├── live_rcmd_panel.dart
│ │ │ ├── module_panel.dart
│ │ │ ├── rich_node_panel.dart
│ │ │ ├── up_panel.dart
│ │ │ ├── video_panel.dart
│ │ │ └── vote.dart
│ │ ├── dynamics_create/
│ │ │ └── view.dart
│ │ ├── dynamics_create_reserve/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_create_vote/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_detail/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_mention/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── dynamics_repost/
│ │ │ └── view.dart
│ │ ├── dynamics_select_topic/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── dynamics_tab/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_topic/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── dynamics_topic_rcmd/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── emote/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── episode_panel/
│ │ │ └── view.dart
│ │ ├── exp_log/
│ │ │ └── controller.dart
│ │ ├── fan/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── fav/
│ │ │ ├── article/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widget/
│ │ │ │ └── item.dart
│ │ │ ├── cheese/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── note/
│ │ │ │ ├── child_view.dart
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widget/
│ │ │ │ └── item.dart
│ │ │ ├── pgc/
│ │ │ │ ├── child_view.dart
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widget/
│ │ │ │ └── item.dart
│ │ │ ├── topic/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── video/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ └── view.dart
│ │ ├── fav_create/
│ │ │ └── view.dart
│ │ ├── fav_detail/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── fav_video_card.dart
│ │ ├── fav_folder_sort/
│ │ │ └── view.dart
│ │ ├── fav_panel/
│ │ │ └── view.dart
│ │ ├── fav_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── fav_sort/
│ │ │ └── view.dart
│ │ ├── follow/
│ │ │ ├── child/
│ │ │ │ ├── child_controller.dart
│ │ │ │ └── child_view.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── follow_item.dart
│ │ ├── follow_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── follow_type/
│ │ │ ├── controller.dart
│ │ │ ├── follow_same/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── followed/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── group_panel/
│ │ │ └── view.dart
│ │ ├── history/
│ │ │ ├── base_controller.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── history_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── home/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── hot/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── later/
│ │ │ ├── base_controller.dart
│ │ │ ├── child_view.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── video_card_h_later.dart
│ │ ├── later_search/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── live_item_app.dart
│ │ ├── live_area/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_area_detail/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_dm_block/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_emote/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── live_follow/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── live_item_follow.dart
│ │ ├── live_room/
│ │ │ ├── contribution_rank/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ ├── send_danmaku/
│ │ │ │ └── view.dart
│ │ │ ├── superchat/
│ │ │ │ ├── superchat_card.dart
│ │ │ │ └── superchat_panel.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── bottom_control.dart
│ │ │ ├── chat_panel.dart
│ │ │ └── header_control.dart
│ │ ├── live_search/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── live_search_room.dart
│ │ │ └── live_search_user.dart
│ │ ├── log_table/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── login/
│ │ │ ├── controller.dart
│ │ │ ├── geetest/
│ │ │ │ └── geetest_webview_dialog.dart
│ │ │ └── view.dart
│ │ ├── login_devices/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── login_log/
│ │ │ └── controller.dart
│ │ ├── main/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── main_reply/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── match_info/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ ├── header_layout_widget.dart
│ │ │ └── user_info_card.dart
│ │ ├── member_article/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── item.dart
│ │ ├── member_audio/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_cheese/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_coin_arc/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_comic/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_contribute/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_dynamics/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_favorite/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── item.dart
│ │ ├── member_home/
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── fav_item.dart
│ │ │ └── video_card_v_member_home.dart
│ │ ├── member_like_arc/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_opus/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── space_opus_item.dart
│ │ ├── member_pgc/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── pgc_card_v_member_pgc.dart
│ │ ├── member_profile/
│ │ │ └── view.dart
│ │ ├── member_search/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_season_series/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── season_series_card.dart
│ │ ├── member_shop/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── member_upower_rank/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── member_video/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── video_card_h_member_video.dart
│ │ ├── mine/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── msg_feed_top/
│ │ │ ├── at_me/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── like_detail/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── like_me/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── reply_me/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ └── sys_msg/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── music/
│ │ │ ├── controller.dart
│ │ │ ├── video/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── music_video_card_h.dart
│ │ ├── my_reply/
│ │ │ └── view.dart
│ │ ├── pgc/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── pgc_card_v.dart
│ │ │ └── pgc_card_v_timeline.dart
│ │ ├── pgc_index/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── pgc_card_v_pgc_index.dart
│ │ ├── pgc_review/
│ │ │ ├── child/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── post/
│ │ │ │ └── view.dart
│ │ │ └── view.dart
│ │ ├── popular_precious/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── popular_series/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── rank/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── zone/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── pgc_rank_item.dart
│ │ ├── rcmd/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── save_panel/
│ │ │ └── view.dart
│ │ ├── search/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── hot_keyword.dart
│ │ │ └── search_text.dart
│ │ ├── search_panel/
│ │ │ ├── all/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── pgc_card_v_search.dart
│ │ │ ├── article/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── controller.dart
│ │ │ ├── live/
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── pgc/
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── user/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ └── item.dart
│ │ │ ├── video/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ └── view.dart
│ │ ├── search_result/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── search_trending/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── setting/
│ │ │ ├── extra_setting.dart
│ │ │ ├── models/
│ │ │ │ ├── extra_settings.dart
│ │ │ │ ├── model.dart
│ │ │ │ ├── play_settings.dart
│ │ │ │ ├── privacy_settings.dart
│ │ │ │ ├── recommend_settings.dart
│ │ │ │ ├── style_settings.dart
│ │ │ │ └── video_settings.dart
│ │ │ ├── pages/
│ │ │ │ ├── bar_set.dart
│ │ │ │ ├── color_select.dart
│ │ │ │ ├── display_mode.dart
│ │ │ │ ├── font_size_select.dart
│ │ │ │ ├── logs.dart
│ │ │ │ └── play_speed_set.dart
│ │ │ ├── play_setting.dart
│ │ │ ├── privacy_setting.dart
│ │ │ ├── recommend_setting.dart
│ │ │ ├── slide_color_picker.dart
│ │ │ ├── style_setting.dart
│ │ │ ├── video_setting.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ ├── checkbox_num.dart
│ │ │ ├── checkbox_num_list_tile.dart
│ │ │ ├── dual_slider_dialog.dart
│ │ │ ├── multi_select_dialog.dart
│ │ │ ├── normal_item.dart
│ │ │ ├── ordered_multi_select_dialog.dart
│ │ │ ├── popup_item.dart
│ │ │ ├── select_dialog.dart
│ │ │ ├── slider_dialog.dart
│ │ │ └── switch_item.dart
│ │ ├── settings_search/
│ │ │ └── view.dart
│ │ ├── share/
│ │ │ └── view.dart
│ │ ├── space_setting/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── sponsor_block/
│ │ │ ├── block_mixin.dart
│ │ │ └── view.dart
│ │ ├── subscription/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── subscription_detail/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── sub_video_card.dart
│ │ ├── video/
│ │ │ ├── ai_conclusion/
│ │ │ │ └── view.dart
│ │ │ ├── controller.dart
│ │ │ ├── download_panel/
│ │ │ │ └── view.dart
│ │ │ ├── introduction/
│ │ │ │ ├── local/
│ │ │ │ │ ├── controller.dart
│ │ │ │ │ └── view.dart
│ │ │ │ ├── pgc/
│ │ │ │ │ ├── controller.dart
│ │ │ │ │ ├── view.dart
│ │ │ │ │ └── widgets/
│ │ │ │ │ ├── intro_detail.dart
│ │ │ │ │ └── pgc_panel.dart
│ │ │ │ └── ugc/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── action_item.dart
│ │ │ │ ├── menu_row.dart
│ │ │ │ ├── page.dart
│ │ │ │ ├── season.dart
│ │ │ │ └── triple_mixin.dart
│ │ │ ├── medialist/
│ │ │ │ └── view.dart
│ │ │ ├── member/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── note/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── pay_coins/
│ │ │ │ └── view.dart
│ │ │ ├── post_panel/
│ │ │ │ ├── popup_menu_text.dart
│ │ │ │ └── view.dart
│ │ │ ├── related/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── reply/
│ │ │ │ ├── controller.dart
│ │ │ │ ├── view.dart
│ │ │ │ └── widgets/
│ │ │ │ ├── reply_item_grpc.dart
│ │ │ │ └── zan_grpc.dart
│ │ │ ├── reply_new/
│ │ │ │ └── view.dart
│ │ │ ├── reply_reply/
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── reply_search_item/
│ │ │ │ ├── child/
│ │ │ │ │ ├── controller.dart
│ │ │ │ │ ├── view.dart
│ │ │ │ │ └── widgets/
│ │ │ │ │ └── item.dart
│ │ │ │ ├── controller.dart
│ │ │ │ └── view.dart
│ │ │ ├── send_danmaku/
│ │ │ │ └── view.dart
│ │ │ ├── view.dart
│ │ │ ├── view_point/
│ │ │ │ └── view.dart
│ │ │ └── widgets/
│ │ │ ├── header_control.dart
│ │ │ ├── header_mixin.dart
│ │ │ └── player_focus.dart
│ │ ├── webdav/
│ │ │ ├── view.dart
│ │ │ └── webdav.dart
│ │ ├── webview/
│ │ │ └── view.dart
│ │ ├── whisper/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widgets/
│ │ │ └── item.dart
│ │ ├── whisper_block/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── whisper_detail/
│ │ │ ├── controller.dart
│ │ │ ├── view.dart
│ │ │ └── widget/
│ │ │ └── chat_item.dart
│ │ ├── whisper_link_setting/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ ├── whisper_secondary/
│ │ │ ├── controller.dart
│ │ │ └── view.dart
│ │ └── whisper_settings/
│ │ ├── controller.dart
│ │ ├── view.dart
│ │ └── widgets/
│ │ └── item.dart
│ ├── plugin/
│ │ └── pl_player/
│ │ ├── controller.dart
│ │ ├── models/
│ │ │ ├── audio_output_type.dart
│ │ │ ├── bottom_control_type.dart
│ │ │ ├── bottom_progress_behavior.dart
│ │ │ ├── data_source.dart
│ │ │ ├── data_status.dart
│ │ │ ├── double_tap_type.dart
│ │ │ ├── duration.dart
│ │ │ ├── fullscreen_mode.dart
│ │ │ ├── gesture_type.dart
│ │ │ ├── heart_beat_type.dart
│ │ │ ├── hwdec_type.dart
│ │ │ ├── play_repeat.dart
│ │ │ ├── play_speed.dart
│ │ │ ├── play_status.dart
│ │ │ └── video_fit_type.dart
│ │ ├── utils/
│ │ │ ├── danmaku_options.dart
│ │ │ └── fullscreen.dart
│ │ ├── view/
│ │ │ ├── view.dart
│ │ │ └── widgets.dart
│ │ └── widgets/
│ │ ├── app_bar_ani.dart
│ │ ├── backward_seek.dart
│ │ ├── bottom_control.dart
│ │ ├── common_btn.dart
│ │ ├── forward_seek.dart
│ │ ├── mpv_convert_webp.dart
│ │ └── play_pause_btn.dart
│ ├── router/
│ │ └── app_pages.dart
│ ├── scripts/
│ │ ├── bottom_sheet.patch
│ │ ├── build.ps1
│ │ ├── modal_barrier.patch
│ │ ├── mouse_cursor.patch
│ │ └── patch.ps1
│ ├── services/
│ │ ├── account_service.dart
│ │ ├── audio_handler.dart
│ │ ├── audio_session.dart
│ │ ├── download/
│ │ │ ├── download_manager.dart
│ │ │ └── download_service.dart
│ │ ├── logger.dart
│ │ ├── service_locator.dart
│ │ └── shutdown_timer_service.dart
│ ├── tcp/
│ │ └── live.dart
│ └── utils/
│ ├── accounts/
│ │ ├── account.dart
│ │ ├── account_adapter.dart
│ │ ├── account_manager/
│ │ │ ├── LICENSE
│ │ │ ├── README.md
│ │ │ └── account_mgr.dart
│ │ ├── account_type_adapter.dart
│ │ ├── api_type.dart
│ │ ├── cookie_jar_adapter.dart
│ │ └── grpc_headers.dart
│ ├── accounts.dart
│ ├── app_scheme.dart
│ ├── app_sign.dart
│ ├── asset_utils.dart
│ ├── cache_manager.dart
│ ├── calc_window_position.dart
│ ├── danmaku_utils.dart
│ ├── date_utils.dart
│ ├── duration_utils.dart
│ ├── em.dart
│ ├── extension/
│ │ ├── box_ext.dart
│ │ ├── context_ext.dart
│ │ ├── extension.dart
│ │ ├── file_ext.dart
│ │ ├── get_ext.dart
│ │ ├── iterable_ext.dart
│ │ ├── map_ext.dart
│ │ ├── num_ext.dart
│ │ ├── scroll_controller_ext.dart
│ │ ├── size_ext.dart
│ │ ├── string_ext.dart
│ │ ├── theme_ext.dart
│ │ ├── three_dot_ext.dart
│ │ └── widget_ext.dart
│ ├── fav_utils.dart
│ ├── feed_back.dart
│ ├── global_data.dart
│ ├── grid.dart
│ ├── id_utils.dart
│ ├── image_utils.dart
│ ├── json_file_handler.dart
│ ├── login_utils.dart
│ ├── num_utils.dart
│ ├── page_utils.dart
│ ├── parse_string.dart
│ ├── path_utils.dart
│ ├── permission_handler.dart
│ ├── platform_utils.dart
│ ├── recommend_filter.dart
│ ├── reply_utils.dart
│ ├── request_utils.dart
│ ├── set_int_adapter.dart
│ ├── storage.dart
│ ├── storage_key.dart
│ ├── storage_pref.dart
│ ├── theme_utils.dart
│ ├── update.dart
│ ├── url_utils.dart
│ ├── utils.dart
│ ├── video_utils.dart
│ ├── waterfall.dart
│ └── wbi_sign.dart
├── linux/
│ ├── .gitignore
│ ├── CMakeLists.txt
│ ├── flutter/
│ │ └── CMakeLists.txt
│ └── runner/
│ ├── CMakeLists.txt
│ ├── main.cc
│ ├── my_application.cc
│ └── my_application.h
├── macos/
│ ├── .gitignore
│ ├── Flutter/
│ │ ├── Flutter-Debug.xcconfig
│ │ └── Flutter-Release.xcconfig
│ ├── Podfile
│ ├── Runner/
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets/
│ │ │ └── AppIcon.appiconset/
│ │ │ └── Contents.json
│ │ ├── Base.lproj/
│ │ │ └── MainMenu.xib
│ │ ├── Configs/
│ │ │ ├── AppInfo.xcconfig
│ │ │ ├── Debug.xcconfig
│ │ │ ├── Release.xcconfig
│ │ │ └── Warnings.xcconfig
│ │ ├── DebugProfile.entitlements
│ │ ├── Info.plist
│ │ ├── MainFlutterWindow.swift
│ │ └── Release.entitlements
│ ├── Runner.xcodeproj/
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace/
│ │ │ └── xcshareddata/
│ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata/
│ │ └── xcschemes/
│ │ └── Runner.xcscheme
│ └── Runner.xcworkspace/
│ ├── contents.xcworkspacedata
│ └── xcshareddata/
│ └── IDEWorkspaceChecks.plist
├── pubspec.yaml
└── windows/
├── .gitignore
├── CMakeLists.txt
├── flutter/
│ └── CMakeLists.txt
├── packaging/
│ └── exe/
│ ├── ChineseSimplified.isl
│ ├── inno_setup.iss
│ └── make_config.yaml
└── runner/
├── CMakeLists.txt
├── Runner.rc
├── flutter_window.cpp
├── flutter_window.h
├── main.cpp
├── resource.h
├── runner.exe.manifest
├── utils.cpp
├── utils.h
├── win32_window.cpp
└── win32_window.h
Showing preview only (2,362K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (33922 symbols across 1278 files)
FILE: lib/build_config.dart
class BuildConfig (line 1) | abstract final class BuildConfig {
FILE: lib/common/skeleton/dynamic_card.dart
class DynamicCardSkeleton (line 5) | class DynamicCardSkeleton extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/common/skeleton/fav_pgc_item.dart
class FavPgcItemSkeleton (line 6) | class FavPgcItemSkeleton extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/common/skeleton/media_bangumi.dart
class MediaPgcSkeleton (line 5) | class MediaPgcSkeleton extends StatefulWidget {
method createState (line 9) | State<MediaPgcSkeleton> createState()
class _MediaPgcSkeletonState (line 12) | class _MediaPgcSkeletonState extends State<MediaPgcSkeleton> {
method build (line 14) | Widget build(BuildContext context)
FILE: lib/common/skeleton/msg_feed_sys_msg_.dart
class MsgFeedSysMsgSkeleton (line 4) | class MsgFeedSysMsgSkeleton extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
FILE: lib/common/skeleton/msg_feed_top.dart
class MsgFeedTopSkeleton (line 4) | class MsgFeedTopSkeleton extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
FILE: lib/common/skeleton/skeleton.dart
class Skeleton (line 3) | class Skeleton extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
class Shimmer (line 41) | class Shimmer extends StatefulWidget {
method of (line 42) | ShimmerState? of(BuildContext context)
method createState (line 56) | ShimmerState createState()
class ShimmerState (line 59) | class ShimmerState extends State<Shimmer> with SingleTickerProviderState...
method initState (line 63) | void initState()
method dispose (line 70) | void dispose()
method getDescendantOffset (line 90) | Offset getDescendantOffset({
method build (line 101) | Widget build(BuildContext context)
class _SlidingGradientTransform (line 106) | class _SlidingGradientTransform extends GradientTransform {
method transform (line 114) | Matrix4? transform(Rect bounds, {TextDirection? textDirection})
class ShimmerLoading (line 119) | class ShimmerLoading extends StatefulWidget {
method createState (line 130) | State<ShimmerLoading> createState()
class _ShimmerLoadingState (line 133) | class _ShimmerLoadingState extends State<ShimmerLoading> {
method didChangeDependencies (line 137) | void didChangeDependencies()
method dispose (line 149) | void dispose()
method _onShimmerChange (line 154) | void _onShimmerChange()
method build (line 161) | Widget build(BuildContext context)
FILE: lib/common/skeleton/space_opus.dart
class SpaceOpusSkeleton (line 6) | class SpaceOpusSkeleton extends StatelessWidget {
method build (line 10) | Widget build(BuildContext context)
FILE: lib/common/skeleton/video_card_h.dart
class VideoCardHSkeleton (line 5) | class VideoCardHSkeleton extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/common/skeleton/video_card_v.dart
class VideoCardVSkeleton (line 5) | class VideoCardVSkeleton extends StatelessWidget {
method build (line 9) | Widget build(BuildContext context)
FILE: lib/common/skeleton/video_reply.dart
class VideoReplySkeleton (line 4) | class VideoReplySkeleton extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
FILE: lib/common/skeleton/whisper_item.dart
class WhisperItemSkeleton (line 4) | class WhisperItemSkeleton extends StatelessWidget {
method build (line 8) | Widget build(BuildContext context)
FILE: lib/common/widgets/appbar/appbar.dart
class MultiSelectAppBarWidget (line 5) | class MultiSelectAppBarWidget extends StatelessWidget
method build (line 21) | Widget build(BuildContext context)
FILE: lib/common/widgets/avatars.dart
function avatars (line 5) | Widget avatars({
FILE: lib/common/widgets/back_detector.dart
class BackDetector (line 5) | class BackDetector extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
method _onKeyEvent (line 29) | KeyEventResult _onKeyEvent(FocusNode node, KeyEvent event)
method _onPointerDown (line 37) | void _onPointerDown(PointerDownEvent event)
FILE: lib/common/widgets/badge.dart
class PBadge (line 6) | class PBadge extends StatelessWidget {
method build (line 40) | Widget build(BuildContext context)
FILE: lib/common/widgets/button/icon_button.dart
function iconButton (line 3) | Widget iconButton({
FILE: lib/common/widgets/button/more_btn.dart
function moreTextButton (line 3) | Widget moreTextButton({
FILE: lib/common/widgets/button/toolbar_icon_button.dart
class ToolbarIconButton (line 3) | class ToolbarIconButton extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/common/widgets/color_palette.dart
class ColorPalette (line 4) | class ColorPalette extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
method _coloredBox (line 73) | Widget _coloredBox(Color color)
FILE: lib/common/widgets/colored_box_transition.dart
class ColoredBoxTransition (line 3) | class ColoredBoxTransition extends AnimatedWidget {
method build (line 15) | Widget build(BuildContext context)
FILE: lib/common/widgets/cropped_image.dart
class CroppedImage (line 22) | class CroppedImage extends LeafRenderObjectWidget {
method createRenderObject (line 43) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 56) | void updateRenderObject(
class RenderCroppedImage (line 71) | class RenderCroppedImage extends RenderBox {
method performLayout (line 145) | void performLayout()
method paint (line 150) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/custom_arc.dart
class Arc (line 5) | class Arc extends LeafRenderObjectWidget {
method createRenderObject (line 20) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 30) | void updateRenderObject(
class RenderArc (line 42) | class RenderArc extends RenderBox {
method performLayout (line 86) | void performLayout()
method paint (line 91) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/custom_height_widget.dart
class CustomHeightWidget (line 4) | class CustomHeightWidget extends SingleChildRenderObjectWidget {
method createRenderObject (line 17) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 25) | void updateRenderObject(
class RenderCustomHeightWidget (line 35) | class RenderCustomHeightWidget extends RenderProxyBox {
method performLayout (line 59) | void performLayout()
method paint (line 76) | void paint(PaintingContext context, Offset offset)
method hitTest (line 81) | bool hitTest(BoxHitTestResult result, {required Offset position})
method applyPaintTransform (line 93) | void applyPaintTransform(covariant RenderObject child, Matrix4 transform)
FILE: lib/common/widgets/custom_icon.dart
class CustomIcons (line 5) | class CustomIcons {
class _CustomIconData (line 33) | class _CustomIconData extends IconData {
FILE: lib/common/widgets/custom_toast.dart
class CustomToast (line 4) | class CustomToast extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
class LoadingWidget (line 36) | class LoadingWidget extends StatelessWidget {
method build (line 43) | Widget build(BuildContext context)
FILE: lib/common/widgets/custom_tooltip.dart
class CustomTooltip (line 10) | class CustomTooltip extends StatefulWidget {
method createState (line 23) | State<CustomTooltip> createState()
class _CustomTooltipState (line 26) | class _CustomTooltipState extends State<CustomTooltip> {
method _scheduleShowTooltip (line 34) | void _scheduleShowTooltip()
method _scheduleDismissTooltip (line 38) | void _scheduleDismissTooltip()
method _handlePointerDown (line 42) | void _handlePointerDown(PointerDownEvent event)
method _buildCustomTooltipOverlay (line 47) | Widget _buildCustomTooltipOverlay(
method dispose (line 68) | void dispose()
method build (line 78) | Widget build(BuildContext context)
class _CustomTooltipOverlay (line 102) | class _CustomTooltipOverlay extends StatelessWidget {
method build (line 116) | Widget build(BuildContext context)
class _ToolTip (line 129) | class _ToolTip extends MultiChildRenderObjectWidget {
method createRenderObject (line 142) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 151) | void updateRenderObject(BuildContext context, _RenderToolTip renderObj...
class _RenderToolTip (line 159) | class _RenderToolTip extends RenderBox
method dispose (line 182) | void dispose()
method hitTestSelf (line 192) | bool hitTestSelf(Offset position)
method handleEvent (line 195) | void handleEvent(PointerEvent event, HitTestEntry<HitTestTarget> entry)
method setupParentData (line 218) | void setupParentData(RenderBox child)
method performLayout (line 225) | void performLayout()
method paint (line 254) | void paint(PaintingContext context, Offset offset)
class Triangle (line 259) | class Triangle extends LeafRenderObjectWidget {
method createRenderObject (line 270) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 278) | void updateRenderObject(
class RenderTriangle (line 288) | class RenderTriangle extends RenderBox {
method performLayout (line 311) | void performLayout()
method paint (line 316) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/dialog/dialog.dart
function showConfirmDialog (line 4) | Future<bool> showConfirmDialog({
function showPgcFollowDialog (line 44) | void showPgcFollowDialog({
function statusItem (line 50) | Widget statusItem({
FILE: lib/common/widgets/dialog/export_import.dart
function exportToClipBoard (line 20) | void exportToClipBoard({
function exportToLocalFile (line 26) | void exportToLocalFile({
function importFromClipBoard (line 40) | Future<void> importFromClipBoard<T>(
function importFromLocalFile (line 120) | Future<void> importFromLocalFile<T>({
function importFromInput (line 145) | void importFromInput<T>(
function showImportExportDialog (line 211) | Future<void> showImportExportDialog<T>(
FILE: lib/common/widgets/dialog/report.dart
function autoWrapReportDialog (line 9) | Future<void> autoWrapReportDialog(
class CheckBoxText (line 133) | class CheckBoxText extends StatefulWidget {
method createState (line 146) | State<CheckBoxText> createState()
class _CheckBoxTextState (line 149) | class _CheckBoxTextState extends State<CheckBoxText> {
method initState (line 153) | void initState()
method build (line 159) | Widget build(BuildContext context)
class ReportOptions (line 193) | abstract final class ReportOptions {
FILE: lib/common/widgets/dialog/report_member.dart
function showMemberReportDialog (line 10) | Future<void> showMemberReportDialog(
FILE: lib/common/widgets/disabled_icon.dart
class DisabledIcon (line 6) | class DisabledIcon extends SingleChildRenderObjectWidget {
method createRenderObject (line 26) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 39) | void updateRenderObject(BuildContext context, RenderMaskedIcon renderO...
class RenderMaskedIcon (line 51) | class RenderMaskedIcon extends RenderProxyBox {
method paint (line 105) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/dynamic_sliver_app_bar/dynamic_sliver_app_bar.dart
class _SliverAppBarDelegate (line 32) | class _SliverAppBarDelegate extends SliverPersistentHeaderDelegate {
method build (line 107) | Widget build(
method shouldRebuild (line 169) | bool shouldRebuild(covariant _SliverAppBarDelegate oldDelegate)
method toString (line 200) | String toString()
class DynamicSliverAppBar (line 205) | class DynamicSliverAppBar extends StatelessWidget {
method build (line 301) | Widget build(BuildContext context)
class DynamicFlexibleSpaceBar (line 350) | class DynamicFlexibleSpaceBar extends StatelessWidget {
method _getCollapsePadding (line 361) | double _getCollapsePadding(
method build (line 378) | Widget build(BuildContext context)
class _FlexibleSpaceHeaderOpacity (line 433) | class _FlexibleSpaceHeaderOpacity extends SingleChildRenderObjectWidget {
method createRenderObject (line 444) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 452) | void updateRenderObject(
class _RenderFlexibleSpaceHeaderOpacity (line 462) | class _RenderFlexibleSpaceHeaderOpacity extends RenderOpacity {
method paint (line 472) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/dynamic_sliver_app_bar/rendering/sliver_persistent_header.dart
function _trim (line 29) | Rect? _trim(
class RenderSliverPersistentHeader (line 37) | abstract class RenderSliverPersistentHeader extends RenderSliver
method updateChild (line 57) | void updateChild(
method markNeedsLayout (line 67) | void markNeedsLayout()
method updateChildIfNeeded (line 73) | void updateChildIfNeeded(
method childMainAxisPosition (line 95) | double childMainAxisPosition(covariant RenderObject child)
method hitTestChildren (line 99) | bool hitTestChildren(
method applyPaintTransform (line 117) | void applyPaintTransform(RenderObject child, Matrix4 transform)
method triggerRebuild (line 122) | void triggerRebuild()
class SliverPinnedHeader (line 127) | class SliverPinnedHeader extends RenderObjectWidget {
method createElement (line 138) | SliverPersistentHeaderElement createElement()
method createRenderObject (line 142) | RenderSliverPinnedHeader createRenderObject(BuildContext context)
method updateRenderObject (line 147) | void updateRenderObject(
class RenderSliverPinnedHeader (line 155) | class RenderSliverPinnedHeader extends RenderSliverPersistentHeader {
method _rawLayout (line 166) | void _rawLayout()
method _layout (line 175) | void _layout()
method performLayout (line 189) | void performLayout()
method paint (line 253) | void paint(PaintingContext context, Offset offset)
method childMainAxisPosition (line 260) | double childMainAxisPosition(RenderBox child)
method showOnScreen (line 263) | void showOnScreen({
FILE: lib/common/widgets/dynamic_sliver_app_bar/sliver_persistent_header.dart
class SliverPersistentHeaderDelegate (line 23) | abstract class SliverPersistentHeaderDelegate {
method build (line 26) | Widget build(
method shouldRebuild (line 35) | bool shouldRebuild(covariant SliverPersistentHeaderDelegate oldDelegate)
class SliverPersistentHeaderElement (line 38) | class SliverPersistentHeaderElement extends RenderObjectElement {
method mount (line 48) | void mount(Element? parent, Object? newSlot)
method unmount (line 54) | void unmount()
method update (line 60) | void update(SliverPinnedHeader newWidget)
method performRebuild (line 80) | void performRebuild()
method _updateChild (line 87) | void _updateChild(
method build (line 102) | void build(double shrinkOffset, bool overlapsContent, double? maxExtent)
method forgetChild (line 116) | void forgetChild(Element child)
method insertRenderObjectChild (line 123) | void insertRenderObjectChild(covariant RenderBox child, Object? slot)
method moveRenderObjectChild (line 129) | void moveRenderObjectChild(
method removeRenderObjectChild (line 138) | void removeRenderObjectChild(covariant RenderObject child, Object? slot)
method visitChildren (line 143) | void visitChildren(ElementVisitor visitor)
FILE: lib/common/widgets/flutter/chat_list_view.dart
class ChatListView (line 11) | class ChatListView extends BoxScrollView {
method buildChildLayout (line 74) | Widget buildChildLayout(BuildContext context)
method _computeActualChildCount (line 78) | int _computeActualChildCount(int itemCount)
class SliverChatList (line 83) | class SliverChatList extends SliverMultiBoxAdaptorWidget {
method createElement (line 87) | SliverMultiBoxAdaptorElement createElement()
method createRenderObject (line 91) | RenderSliverChatList createRenderObject(BuildContext context)
class RenderSliverChatList (line 97) | class RenderSliverChatList extends RenderSliverMultiBoxAdaptor
method performLayout (line 102) | void performLayout()
method advance (line 240) | bool advance()
function handleCloseToTrailingBegin (line 366) | void handleCloseToTrailingBegin()
function handleCloseToTrailingEnd (line 370) | double handleCloseToTrailingEnd(double endScrollOffset)
function childScrollOffset (line 382) | double? childScrollOffset(RenderObject child)
FILE: lib/common/widgets/flutter/draggable_sheet/draggable_scrollable_sheet_dyn.dart
class DraggableScrollableController (line 43) | class DraggableScrollableController extends ChangeNotifier {
method sizeToPixels (line 68) | double sizeToPixels(double size)
method pixelsToSize (line 83) | double pixelsToSize(double pixels)
method animateTo (line 109) | Future<void> animateTo(
method jumpTo (line 163) | void jumpTo(double size)
method reset (line 178) | void reset()
method _assertAttached (line 183) | void _assertAttached()
method _attach (line 191) | void _attach(_DraggableScrollableSheetScrollController scrollController)
method _onExtentReplaced (line 201) | void _onExtentReplaced(_DraggableSheetExtent previousExtent)
method _detach (line 213) | void _detach({bool disposeExtent = false})
method _disposeAnimationControllers (line 223) | void _disposeAnimationControllers()
class DraggableScrollableSheet (line 287) | class DraggableScrollableSheet extends StatefulWidget {
method createState (line 398) | State<DraggableScrollableSheet> createState()
class _DraggableSheetExtent (line 413) | class _DraggableSheetExtent {
method startActivity (line 476) | void startActivity({required VoidCallback onCanceled})
method addPixelDelta (line 486) | void addPixelDelta(double delta, BuildContext context)
method updateSize (line 505) | void updateSize(double newSize, BuildContext context)
method pixelsToSize (line 521) | double pixelsToSize(double pixels)
method sizeToPixels (line 525) | double sizeToPixels(double size)
method dispose (line 529) | void dispose()
method copyWith (line 534) | _DraggableSheetExtent copyWith({
class _DraggableScrollableSheetState (line 564) | class _DraggableScrollableSheetState extends State<DraggableScrollableSh...
method initState (line 569) | void initState()
method _impliedSnapSizes (line 586) | List<double> _impliedSnapSizes()
method didUpdateWidget (line 610) | void didUpdateWidget(covariant DraggableScrollableSheet oldWidget)
method didChangeDependencies (line 620) | void didChangeDependencies()
method build (line 628) | Widget build(BuildContext context)
method dispose (line 649) | void dispose()
method _replaceExtent (line 659) | void _replaceExtent(covariant DraggableScrollableSheet oldWidget)
method _snapSizeErrorMessage (line 701) | String _snapSizeErrorMessage(int invalidIndex)
class _DraggableScrollableSheetScrollController (line 732) | class _DraggableScrollableSheetScrollController extends ScrollController {
method createScrollPosition (line 741) | _DraggableScrollableSheetScrollPosition createScrollPosition(
method debugFillDescription (line 755) | void debugFillDescription(List<String> description)
method reset (line 764) | void reset()
method detach (line 785) | void detach(ScrollPosition position)
class _DraggableScrollableSheetScrollPosition (line 803) | class _DraggableScrollableSheetScrollPosition
method absorb (line 823) | void absorb(ScrollPosition other)
method beginActivity (line 838) | void beginActivity(ScrollActivity? newActivity)
method applyUserOffset (line 848) | void applyUserOffset(double delta)
method _getCurrentSnapSize (line 863) | double? _getCurrentSnapSize()
method _isAtSnapSize (line 870) | bool _isAtSnapSize()
method _shouldSnap (line 872) | bool _shouldSnap()
method dispose (line 875) | void dispose()
method goBallistic (line 885) | void goBallistic(double velocity)
method tick (line 928) | void tick()
method drag (line 966) | Drag drag(DragStartDetails details, VoidCallback dragCancelCallback)
class DraggableScrollableActuator (line 988) | class DraggableScrollableActuator extends StatefulWidget {
method reset (line 1005) | bool reset(BuildContext context)
method createState (line 1012) | State<DraggableScrollableActuator> createState()
class _DraggableScrollableActuatorState (line 1016) | class _DraggableScrollableActuatorState
method build (line 1021) | Widget build(BuildContext context)
method dispose (line 1026) | void dispose()
class _ResetNotifier (line 1034) | class _ResetNotifier extends ChangeNotifier {
method sendReset (line 1049) | bool sendReset()
class _InheritedResetNotifier (line 1059) | class _InheritedResetNotifier extends InheritedNotifier<_ResetNotifier> {
method _sendReset (line 1067) | bool _sendReset()
method shouldReset (line 1073) | bool shouldReset(BuildContext context)
class _SnappingSimulation (line 1087) | class _SnappingSimulation extends Simulation {
method dx (line 1123) | double dx(double time)
method isDone (line 1131) | bool isDone(double time)
method x (line 1136) | double x(double time)
method _getSnapSize (line 1149) | double _getSnapSize(double initialVelocity, List<double> pixelSnapSizes)
FILE: lib/common/widgets/flutter/draggable_sheet/draggable_scrollable_sheet_topic.dart
class DraggableScrollableController (line 43) | class DraggableScrollableController extends ChangeNotifier {
method sizeToPixels (line 68) | double sizeToPixels(double size)
method pixelsToSize (line 83) | double pixelsToSize(double pixels)
method animateTo (line 109) | Future<void> animateTo(
method jumpTo (line 163) | void jumpTo(double size)
method reset (line 178) | void reset()
method _assertAttached (line 183) | void _assertAttached()
method _attach (line 191) | void _attach(_DraggableScrollableSheetScrollController scrollController)
method _onExtentReplaced (line 201) | void _onExtentReplaced(_DraggableSheetExtent previousExtent)
method _detach (line 213) | void _detach({bool disposeExtent = false})
method _disposeAnimationControllers (line 223) | void _disposeAnimationControllers()
class DraggableScrollableSheet (line 287) | class DraggableScrollableSheet extends StatefulWidget {
method createState (line 401) | State<DraggableScrollableSheet> createState()
class _DraggableSheetExtent (line 416) | class _DraggableSheetExtent {
method startActivity (line 479) | void startActivity({required VoidCallback onCanceled})
method addPixelDelta (line 489) | void addPixelDelta(double delta, BuildContext context)
method updateSize (line 508) | void updateSize(double newSize, BuildContext context)
method pixelsToSize (line 524) | double pixelsToSize(double pixels)
method sizeToPixels (line 528) | double sizeToPixels(double size)
method dispose (line 532) | void dispose()
method copyWith (line 537) | _DraggableSheetExtent copyWith({
class _DraggableScrollableSheetState (line 567) | class _DraggableScrollableSheetState extends State<DraggableScrollableSh...
method initState (line 572) | void initState()
method _impliedSnapSizes (line 590) | List<double> _impliedSnapSizes()
method didUpdateWidget (line 614) | void didUpdateWidget(covariant DraggableScrollableSheet oldWidget)
method didChangeDependencies (line 624) | void didChangeDependencies()
method build (line 632) | Widget build(BuildContext context)
method dispose (line 653) | void dispose()
method _replaceExtent (line 663) | void _replaceExtent(covariant DraggableScrollableSheet oldWidget)
method _snapSizeErrorMessage (line 705) | String _snapSizeErrorMessage(int invalidIndex)
class _DraggableScrollableSheetScrollController (line 736) | class _DraggableScrollableSheetScrollController extends ScrollController {
method createScrollPosition (line 750) | _DraggableScrollableSheetScrollPosition createScrollPosition(
method debugFillDescription (line 765) | void debugFillDescription(List<String> description)
method reset (line 774) | void reset()
method detach (line 795) | void detach(ScrollPosition position)
class _DraggableScrollableSheetScrollPosition (line 813) | class _DraggableScrollableSheetScrollPosition
method absorb (line 832) | void absorb(ScrollPosition other)
method beginActivity (line 847) | void beginActivity(ScrollActivity? newActivity)
method applyUserOffset (line 857) | void applyUserOffset(double delta)
method _getCurrentSnapSize (line 870) | double? _getCurrentSnapSize()
method _isAtSnapSize (line 877) | bool _isAtSnapSize()
method _shouldSnap (line 879) | bool _shouldSnap()
method dispose (line 882) | void dispose()
method goBallistic (line 892) | void goBallistic(double velocity)
method tick (line 931) | void tick()
method drag (line 969) | Drag drag(DragStartDetails details, VoidCallback dragCancelCallback)
class DraggableScrollableActuator (line 990) | class DraggableScrollableActuator extends StatefulWidget {
method reset (line 1007) | bool reset(BuildContext context)
method createState (line 1014) | State<DraggableScrollableActuator> createState()
class _DraggableScrollableActuatorState (line 1018) | class _DraggableScrollableActuatorState
method build (line 1023) | Widget build(BuildContext context)
method dispose (line 1028) | void dispose()
class _ResetNotifier (line 1036) | class _ResetNotifier extends ChangeNotifier {
method sendReset (line 1051) | bool sendReset()
class _InheritedResetNotifier (line 1061) | class _InheritedResetNotifier extends InheritedNotifier<_ResetNotifier> {
method _sendReset (line 1069) | bool _sendReset()
method shouldReset (line 1075) | bool shouldReset(BuildContext context)
class _SnappingSimulation (line 1089) | class _SnappingSimulation extends Simulation {
method dx (line 1125) | double dx(double time)
method isDone (line 1133) | bool isDone(double time)
method x (line 1138) | double x(double time)
method _getSnapSize (line 1151) | double _getSnapSize(double initialVelocity, List<double> pixelSnapSizes)
FILE: lib/common/widgets/flutter/layout_builder.dart
class AbstractLayoutBuilder (line 29) | abstract class AbstractLayoutBuilder<LayoutInfoType>
method createElement (line 40) | RenderObjectElement createElement()
method updateShouldRebuild (line 63) | bool updateShouldRebuild(
method createRenderObject (line 68) | RenderAbstractLayoutBuilderMixin<LayoutInfoType, RenderObject>
class ConstrainedLayoutBuilder (line 94) | abstract class ConstrainedLayoutBuilder<ConstraintType extends Constraints>
class _LayoutBuilderElement (line 104) | class _LayoutBuilderElement<LayoutInfoType> extends RenderObjectElement {
method visitChildren (line 157) | void visitChildren(ElementVisitor visitor)
method forgetChild (line 164) | void forgetChild(Element child)
method mount (line 171) | void mount(Element? parent, Object? newSlot)
method update (line 177) | void update(AbstractLayoutBuilder<LayoutInfoType> newWidget)
method markNeedsBuild (line 191) | void markNeedsBuild()
method performRebuild (line 201) | void performRebuild()
method unmount (line 215) | void unmount()
method _rebuildWithConstraints (line 226) | void _rebuildWithConstraints(Constraints _)
method updateChildCallback (line 229) | void updateChildCallback()
method insertRenderObjectChild (line 279) | void insertRenderObjectChild(RenderObject child, Object? slot)
method moveRenderObjectChild (line 289) | void moveRenderObjectChild(
method removeRenderObjectChild (line 298) | void removeRenderObjectChild(RenderObject child, Object? slot)
function _updateCallback (line 329) | void _updateCallback(LayoutCallback<Constraints> value)
function layoutCallback (line 348) | void layoutCallback()
type RenderConstrainedLayoutBuilder (line 363) | typedef RenderConstrainedLayoutBuilder<
class LayoutBuilder (line 398) | class LayoutBuilder extends ConstrainedLayoutBuilder<BoxConstraints> {
method createRenderObject (line 403) | RenderAbstractLayoutBuilderMixin<BoxConstraints, RenderBox>
class _RenderLayoutBuilder (line 409) | class _RenderLayoutBuilder extends RenderBox
method computeMinIntrinsicWidth (line 415) | double computeMinIntrinsicWidth(double height)
method computeMaxIntrinsicWidth (line 421) | double computeMaxIntrinsicWidth(double height)
method computeMinIntrinsicHeight (line 427) | double computeMinIntrinsicHeight(double width)
method computeMaxIntrinsicHeight (line 433) | double computeMaxIntrinsicHeight(double width)
method computeDryLayout (line 439) | Size computeDryLayout(BoxConstraints constraints)
method computeDryBaseline (line 451) | double? computeDryBaseline(
method performLayout (line 466) | void performLayout()
method computeDistanceToActualBaseline (line 478) | double? computeDistanceToActualBaseline(TextBaseline baseline)
method hitTestChildren (line 484) | bool hitTestChildren(BoxHitTestResult result, {required Offset position})
method paint (line 489) | void paint(PaintingContext context, Offset offset)
method _debugThrowIfNotCheckingIntrinsics (line 495) | bool _debugThrowIfNotCheckingIntrinsics()
function _reportException (line 511) | FlutterErrorDetails _reportException(
FILE: lib/common/widgets/flutter/list_tile.dart
type _Sizes (line 29) | typedef _Sizes = ({
type _PositionChild (line 34) | typedef _PositionChild = void Function(RenderBox child, Offset offset);
function _yOffsetFor (line 51) | double _yOffsetFor(
class ListTile (line 311) | class ListTile extends StatelessWidget {
method divideTiles (line 714) | Iterable<Widget> divideTiles({
method wrapTile (line 726) | Widget wrapTile(Widget tile)
method _isDenseLayout (line 741) | bool _isDenseLayout(ThemeData theme, ListTileThemeData tileTheme)
method _tileBackgroundColor (line 745) | Color _tileBackgroundColor(
method build (line 759) | Widget build(BuildContext context)
method resolveColor (line 777) | Color? resolveColor(
method debugFillProperties (line 1027) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class _IndividualOverrides (line 1194) | class _IndividualOverrides extends WidgetStateProperty<Color?> {
method resolve (line 1208) | Color? resolve(Set<WidgetState> states)
type _ListTileSlot (line 1223) | enum _ListTileSlot { leading, title, subtitle, trailing }
class _ListTile (line 1225) | class _ListTile
method childForSlot (line 1265) | Widget? childForSlot(_ListTileSlot slot)
method createRenderObject (line 1275) | _RenderListTile createRenderObject(BuildContext context)
method updateRenderObject (line 1292) | void updateRenderObject(BuildContext context, _RenderListTile renderOb...
class _RenderListTile (line 1308) | class _RenderListTile extends RenderBox
method _minWidth (line 1464) | double _minWidth(RenderBox? box, double height)
method _maxWidth (line 1468) | double _maxWidth(RenderBox? box, double height)
method computeMinIntrinsicWidth (line 1473) | double computeMinIntrinsicWidth(double height)
method computeMaxIntrinsicWidth (line 1484) | double computeMaxIntrinsicWidth(double height)
method computeMinIntrinsicHeight (line 1508) | double computeMinIntrinsicHeight(double width)
method computeMaxIntrinsicHeight (line 1522) | double computeMaxIntrinsicHeight(double width)
method computeDistanceToActualBaseline (line 1527) | double? computeDistanceToActualBaseline(TextBaseline baseline)
method _positionBox (line 1544) | void _positionBox(RenderBox box, Offset offset)
method _computeSizes (line 1554) | _Sizes _computeSizes(
method computeDryBaseline (line 1721) | double? computeDryBaseline(
method computeDryLayout (line 1737) | Size computeDryLayout(BoxConstraints constraints)
method performLayout (line 1748) | void performLayout()
method paint (line 1762) | void paint(PaintingContext context, Offset offset)
method doPaint (line 1763) | void doPaint(RenderBox? child)
method hitTestSelf (line 1777) | bool hitTestSelf(Offset position)
method hitTestChildren (line 1780) | bool hitTestChildren(BoxHitTestResult result, {required Offset position})
class _LisTileDefaultsM2 (line 1799) | class _LisTileDefaultsM2 extends ListTileThemeData {
class _LisTileDefaultsM3 (line 1850) | class _LisTileDefaultsM3 extends ListTileThemeData {
FILE: lib/common/widgets/flutter/page/page_view.dart
class _ForceImplicitScrollPhysics (line 12) | class _ForceImplicitScrollPhysics extends ScrollPhysics {
method applyTo (line 19) | _ForceImplicitScrollPhysics applyTo(ScrollPhysics? ancestor)
class PageView (line 71) | class PageView<T extends HorizontalDragGestureRecognizer>
method createState (line 298) | State<PageView<T>> createState()
class _PageViewState (line 301) | class _PageViewState<T extends HorizontalDragGestureRecognizer>
method initState (line 308) | void initState()
method dispose (line 315) | void dispose()
method _initController (line 322) | void _initController()
method didUpdateWidget (line 327) | void didUpdateWidget(PageView<T> oldWidget)
method _getDirection (line 337) | AxisDirection _getDirection(BuildContext context)
method build (line 354) | Widget build(BuildContext context)
method debugFillProperties (line 418) | void debugFillProperties(DiagnosticPropertiesBuilder description)
FILE: lib/common/widgets/flutter/page/scrollable.dart
type _EnsureVisibleResults (line 22) | typedef _EnsureVisibleResults = (List<Future<void>>, ScrollableState);
class Scrollable (line 74) | class Scrollable<T extends HorizontalDragGestureRecognizer>
method createState (line 299) | ScrollableState<T> createState()
method debugFillProperties (line 302) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
method maybeOf (line 337) | ScrollableState? maybeOf(BuildContext context, {Axis? axis})
method of (line 387) | ScrollableState of(BuildContext context, {Axis? axis})
method recommendDeferredLoadingForContext (line 435) | bool recommendDeferredLoadingForContext(
method ensureVisible (line 458) | Future<void> ensureVisible(
class _ScrollableScope (line 506) | class _ScrollableScope extends InheritedWidget {
method updateShouldNotify (line 517) | bool updateShouldNotify(_ScrollableScope old)
class ScrollableState (line 532) | class ScrollableState<T extends HorizontalDragGestureRecognizer>
method _updatePosition (line 591) | void _updatePosition()
method restoreState (line 618) | void restoreState(RestorationBucket? oldBucket, bool initialRestore)
method saveOffset (line 631) | void saveOffset(double offset)
method initState (line 641) | void initState()
method didChangeDependencies (line 650) | void didChangeDependencies()
method _shouldUpdatePosition (line 659) | bool _shouldUpdatePosition(Scrollable oldWidget)
method didUpdateWidget (line 686) | void didUpdateWidget(Scrollable<T> oldWidget)
method dispose (line 718) | void dispose()
method setSemanticsActions (line 737) | void setSemanticsActions(Set<SemanticsAction> actions)
method setCanDrag (line 759) | void setCanDrag(bool value)
method setIgnorePointer (line 838) | void setIgnorePointer(bool value)
method _handleDragDown (line 856) | void _handleDragDown(DragDownDetails details)
method _handleDragStart (line 862) | void _handleDragStart(DragStartDetails details)
method _handleDragUpdate (line 875) | void _handleDragUpdate(DragUpdateDetails details)
method _handleDragEnd (line 881) | void _handleDragEnd(DragEndDetails details)
method _handleDragCancel (line 888) | void _handleDragCancel()
method _disposeHold (line 904) | void _disposeHold()
method _disposeDrag (line 908) | void _disposeDrag()
method _targetScrollOffsetForPointerScroll (line 916) | double _targetScrollOffsetForPointerScroll(double delta)
method _pointerSignalEventDelta (line 926) | double _pointerSignalEventDelta(PointerScrollEvent event)
method _receivedPointerSignal (line 948) | void _receivedPointerSignal(PointerSignalEvent event)
method _handlePointerScroll (line 977) | void _handlePointerScroll(PointerEvent event)
method _handleScrollMetricsNotification (line 988) | bool _handleScrollMetricsNotification(
method _buildChrome (line 1002) | Widget _buildChrome(BuildContext context, Widget child)
method build (line 1020) | Widget build(BuildContext context)
method _performEnsureVisible (line 1085) | _EnsureVisibleResults _performEnsureVisible(
method debugFillProperties (line 1107) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class _ScrollableSelectionHandler (line 1119) | class _ScrollableSelectionHandler extends StatefulWidget {
method createState (line 1133) | _ScrollableSelectionHandlerState createState()
class _ScrollableSelectionHandlerState (line 1137) | class _ScrollableSelectionHandlerState
method initState (line 1142) | void initState()
method didUpdateWidget (line 1151) | void didUpdateWidget(_ScrollableSelectionHandler oldWidget)
method dispose (line 1159) | void dispose()
method build (line 1165) | Widget build(BuildContext context)
class _ScrollableSelectionContainerDelegate (line 1181) | class _ScrollableSelectionContainerDelegate
method _scheduleLayoutChange (line 1222) | void _scheduleLayoutChange()
method didChangeSelectables (line 1258) | void didChangeSelectables()
method handleClearSelection (line 1270) | SelectionResult handleClearSelection(ClearSelectionEvent event)
method handleSelectionEdgeUpdate (line 1280) | SelectionResult handleSelectionEdgeUpdate(SelectionEdgeUpdateEvent event)
method _inferPositionRelatedToOrigin (line 1332) | Offset _inferPositionRelatedToOrigin(Offset globalPosition)
method _updateDragLocationsFromGeometries (line 1361) | void _updateDragLocationsFromGeometries({
method handleSelectAll (line 1405) | SelectionResult handleSelectAll(SelectAllSelectionEvent event)
method handleSelectWord (line 1418) | SelectionResult handleSelectWord(SelectWordSelectionEvent event)
method handleGranularlyExtendSelection (line 1428) | SelectionResult handleGranularlyExtendSelection(
method handleDirectionallyExtendSelection (line 1446) | SelectionResult handleDirectionallyExtendSelection(
method _jumpToEdge (line 1465) | void _jumpToEdge(bool isExtent)
method _globalPositionInScrollable (line 1555) | bool _globalPositionInScrollable(Offset globalPosition)
method _dragTargetFromEvent (line 1562) | Rect _dragTargetFromEvent(SelectionEdgeUpdateEvent event)
method dispatchSelectionEventToChild (line 1571) | SelectionResult dispatchSelectionEventToChild(
method ensureChildUpdated (line 1600) | void ensureChildUpdated(Selectable selectable)
method dispose (line 1642) | void dispose()
function _getDeltaToScrollOrigin (line 1651) | Offset _getDeltaToScrollOrigin(ScrollableState scrollableState)
class _ScrollSemantics (line 1674) | class _ScrollSemantics extends SingleChildRenderObjectWidget {
method createRenderObject (line 1690) | _RenderScrollSemantics createRenderObject(BuildContext context)
method updateRenderObject (line 1700) | void updateRenderObject(
class _RenderScrollSemantics (line 1712) | class _RenderScrollSemantics extends RenderProxyBox {
method _onScrollToOffset (line 1762) | void _onScrollToOffset(Offset targetOffset)
method describeSemanticsConfiguration (line 1771) | void describeSemanticsConfiguration(SemanticsConfiguration config)
method assembleSemanticsNode (line 1791) | void assembleSemanticsNode(
method clearSemantics (line 1828) | void clearSemantics()
class _RestorableScrollOffset (line 1836) | class _RestorableScrollOffset extends RestorableValue<double?> {
method createDefaultValue (line 1838) | double? createDefaultValue()
method didUpdateValue (line 1841) | void didUpdateValue(double? oldValue)
method fromPrimitives (line 1846) | double fromPrimitives(Object? data)
method toPrimitives (line 1851) | Object? toPrimitives()
FILE: lib/common/widgets/flutter/page/scrollable_helpers.dart
class EdgeDraggingAutoScroller (line 25) | class EdgeDraggingAutoScroller {
method _offsetExtent (line 57) | double _offsetExtent(Offset offset, Axis scrollDirection)
method _sizeExtent (line 64) | double _sizeExtent(Size size, Axis scrollDirection)
method startAutoScrollIfNecessary (line 81) | void startAutoScrollIfNecessary(Rect dragTarget)
method stopAutoScroll (line 96) | void stopAutoScroll()
method _scroll (line 100) | Future<void> _scroll()
FILE: lib/common/widgets/flutter/page/tabs.dart
class TabBarView (line 25) | class TabBarView<T extends HorizontalDragGestureRecognizer>
method createState (line 78) | State<TabBarView<T>> createState()
class _TabBarViewState (line 81) | class _TabBarViewState<T extends HorizontalDragGestureRecognizer>
method _updateTabController (line 96) | void _updateTabController()
method _jumpToPage (line 125) | void _jumpToPage(int page)
method _animateToPage (line 131) | Future<void> _animateToPage(
method initState (line 146) | void initState()
method didChangeDependencies (line 152) | void didChangeDependencies()
method didUpdateWidget (line 167) | void didUpdateWidget(TabBarView<T> oldWidget)
method dispose (line 189) | void dispose()
method _updateChildren (line 199) | void _updateChildren()
method _handleTabControllerAnimationTick (line 207) | void _handleTabControllerAnimationTick()
method _warpToCurrentIndex (line 218) | void _warpToCurrentIndex()
method _warpToAdjacentTab (line 232) | Future<void> _warpToAdjacentTab(Duration duration)
method _warpToNonAdjacentTab (line 248) | Future<void> _warpToNonAdjacentTab(Duration duration)
method _syncControllerOffset (line 287) | void _syncControllerOffset()
method _handleScrollNotification (line 296) | bool _handleScrollNotification(ScrollNotification notification)
method _debugScheduleCheckHasValidChildrenCount (line 331) | bool _debugScheduleCheckHasValidChildrenCount()
method build (line 355) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/pop_scope.dart
class PopScopeState (line 9) | abstract class PopScopeState<T extends StatefulWidget> extends State<T>
method onPopInvoked (line 14) | void onPopInvoked(bool didPop)
method initState (line 22) | void initState()
method dispose (line 29) | void dispose()
type popScope (line 38) | typedef popScope = PopScope;
class PopScope (line 40) | class PopScope extends StatefulWidget {
method createState (line 55) | State<PopScope> createState()
class _PopScopeState (line 58) | class _PopScopeState<T extends PopScope> extends PopScopeState<T> {
method onPopInvokedWithResult (line 63) | void onPopInvokedWithResult(bool didPop, Object? result)
method didUpdateWidget (line 68) | void didUpdateWidget(T oldWidget)
method build (line 74) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/popup_menu.dart
class CustomPopupMenuItem (line 9) | class CustomPopupMenuItem<T> extends PopupMenuEntry<T> {
method represents (line 25) | bool represents(T? value)
method createState (line 28) | CustomPopupMenuItemState<T, CustomPopupMenuItem<T>> createState()
function build (line 36) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/refresh_indicator.dart
type RefreshIndicatorStatus (line 41) | enum RefreshIndicatorStatus {
class RefreshIndicator (line 122) | class RefreshIndicator extends StatefulWidget {
method createState (line 203) | RefreshIndicatorState createState()
class RefreshIndicatorState (line 208) | class RefreshIndicatorState extends State<RefreshIndicator>
method initState (line 240) | void initState()
method didChangeDependencies (line 254) | void didChangeDependencies()
method didUpdateWidget (line 261) | void didUpdateWidget(covariant RefreshIndicator oldWidget)
method dispose (line 270) | void dispose()
method _setupColorTween (line 276) | void _setupColorTween()
method _shouldStart (line 297) | bool _shouldStart(ScrollNotification notification)
method _handleScrollNotification (line 310) | bool _handleScrollNotification(ScrollNotification notification)
method _handleIndicatorNotification (line 358) | bool _handleIndicatorNotification(
method _start (line 371) | bool _start()
method _checkDragOffset (line 380) | void _checkDragOffset(double containerExtent)
method _dismiss (line 394) | Future<void> _dismiss(RefreshIndicatorStatus newMode)
method _show (line 430) | void _show()
method show (line 474) | Future<void> show()
method build (line 487) | Widget build(BuildContext context)
method _onDrag (line 560) | bool _onDrag(double offset, double viewportDimension)
type refreshIndicator (line 572) | typedef refreshIndicator = RefreshIndicator;
class RefreshScrollBehavior (line 574) | class RefreshScrollBehavior extends CustomScrollBehavior {
method getScrollPhysics (line 583) | ScrollPhysics getScrollPhysics(BuildContext context)
FILE: lib/common/widgets/flutter/selectable_text/selectable_region.dart
class SelectableRegion (line 212) | class SelectableRegion extends StatefulWidget {
method getSelectableButtonItems (line 274) | List<ContextMenuButtonItem> getSelectableButtonItems({
method createState (line 332) | State<StatefulWidget> createState()
class SelectableRegionState (line 336) | class SelectableRegionState extends State<SelectableRegion>
method initState (line 449) | void initState()
method _initProcessTextActions (line 467) | Future<void> _initProcessTextActions()
method didChangeDependencies (line 475) | void didChangeDependencies()
method didUpdateWidget (line 502) | void didUpdateWidget(SelectableRegion oldWidget)
method _makeOverridable (line 519) | Action<T> _makeOverridable<T extends Intent>(Action<T> defaultAction)
method _handleFocusChanged (line 526) | void _handleFocusChanged()
method _updateSelectionStatus (line 551) | void _updateSelectionStatus()
method _isPrecisePointerDevice (line 581) | bool _isPrecisePointerDevice(PointerDeviceKind pointerDeviceKind)
method _finalizeSelectableRegionStatus (line 594) | void _finalizeSelectableRegionStatus()
method _getEffectiveConsecutiveTapCount (line 610) | int _getEffectiveConsecutiveTapCount(int rawCount)
method _initMouseGestureRecognizer (line 656) | void _initMouseGestureRecognizer()
method _onTapTrackStart (line 678) | void _onTapTrackStart()
method _onTapTrackReset (line 687) | void _onTapTrackReset()
method _initTouchGestureRecognizer (line 691) | void _initTouchGestureRecognizer()
method _startNewMouseSelectionGesture (line 748) | void _startNewMouseSelectionGesture(TapDragDownDetails details)
method _handleMouseDragStart (line 832) | void _handleMouseDragStart(TapDragStartDetails details)
method _handleMouseDragUpdate (line 846) | void _handleMouseDragUpdate(TapDragUpdateDetails details)
method _handleMouseDragEnd (line 937) | void _handleMouseDragEnd(TapDragEndDetails details)
method _handleMouseTapUp (line 969) | void _handleMouseTapUp(TapDragUpDetails details)
method _updateSelectedContentIfNeeded (line 1031) | void _updateSelectedContentIfNeeded()
method _handleTouchLongPressStart (line 1042) | void _handleTouchLongPressStart(LongPressStartDetails details)
method _handleTouchLongPressMoveUpdate (line 1056) | void _handleTouchLongPressMoveUpdate(LongPressMoveUpdateDetails details)
method _handleTouchLongPressEnd (line 1065) | void _handleTouchLongPressEnd(LongPressEndDetails details)
method _positionIsOnActiveSelection (line 1075) | bool _positionIsOnActiveSelection({required Offset globalPosition})
method _handleRightClickDown (line 1089) | void _handleRightClickDown(TapDownDetails details)
method _triggerSelectionEndEdgeUpdate (line 1160) | void _triggerSelectionEndEdgeUpdate({TextGranularity? textGranularity})
method _onAnyDragEnd (line 1187) | void _onAnyDragEnd(DragEndDetails details)
method _stopSelectionEndEdgeUpdate (line 1201) | void _stopSelectionEndEdgeUpdate()
method _triggerSelectionStartEdgeUpdate (line 1215) | void _triggerSelectionStartEdgeUpdate({TextGranularity? textGranularity})
method _stopSelectionStartEdgeUpdate (line 1242) | void _stopSelectionStartEdgeUpdate()
method _handleSelectionStartHandleDragStart (line 1252) | void _handleSelectionStartHandleDragStart(DragStartDetails details)
method _handleSelectionStartHandleDragUpdate (line 1272) | void _handleSelectionStartHandleDragUpdate(DragUpdateDetails details)
method _handleSelectionEndHandleDragStart (line 1292) | void _handleSelectionEndHandleDragStart(DragStartDetails details)
method _handleSelectionEndHandleDragUpdate (line 1311) | void _handleSelectionEndHandleDragUpdate(DragUpdateDetails details)
method _buildInfoForMagnifier (line 1331) | MagnifierInfo _buildInfoForMagnifier(
method _createSelectionOverlay (line 1359) | void _createSelectionOverlay()
method _updateSelectionOverlay (line 1390) | void _updateSelectionOverlay()
method _showHandles (line 1409) | bool _showHandles()
method _showToolbar (line 1432) | bool _showToolbar({Offset? location})
method _selectEndTo (line 1500) | void _selectEndTo({
method _selectStartTo (line 1550) | void _selectStartTo({
method _collapseSelectionAt (line 1582) | void _collapseSelectionAt({required Offset offset})
method _selectWordAt (line 1608) | void _selectWordAt({required Offset offset})
method _selectParagraphAt (line 1634) | void _selectParagraphAt({required Offset offset})
method _finalizeSelection (line 1651) | void _finalizeSelection()
method clearSelection (line 1657) | void clearSelection()
method _copy (line 1665) | Future<void> _copy()
method _share (line 1673) | Future<void> _share()
method _determineIsAdjustingSelectionEnd (line 1707) | bool _determineIsAdjustingSelectionEnd(bool forward)
method _granularlyExtendSelection (line 1725) | void _granularlyExtendSelection(TextGranularity granularity, bool forw...
method _directionallyExtendSelection (line 1744) | void _directionallyExtendSelection(bool forward)
method hideToolbar (line 1928) | void hideToolbar([bool hideHandles = true])
method selectAll (line 1936) | void selectAll([SelectionChangedCause? cause])
method copySelection (line 1953) | void copySelection(SelectionChangedCause cause)
method bringIntoView (line 1972) | void bringIntoView(TextPosition position)
method cutSelection (line 1981) | void cutSelection(SelectionChangedCause cause)
method userUpdateTextEditingValue (line 1990) | void userUpdateTextEditingValue(
method pasteText (line 2002) | Future<void> pasteText(SelectionChangedCause cause)
method add (line 2009) | void add(Selectable selectable)
method remove (line 2017) | void remove(Selectable selectable)
method dispose (line 2026) | void dispose()
method build (line 2044) | Widget build(BuildContext context)
class _NonOverrideAction (line 2081) | abstract class _NonOverrideAction<T extends Intent> extends ContextActio...
method invokeAction (line 2082) | Object? invokeAction(T intent, [BuildContext? context])
method invoke (line 2085) | Object? invoke(T intent, [BuildContext? context])
class _SelectAllAction (line 2093) | class _SelectAllAction extends _NonOverrideAction<SelectAllTextIntent> {
method invokeAction (line 2099) | void invokeAction(SelectAllTextIntent intent, [BuildContext? context])
class _CopySelectionAction (line 2104) | class _CopySelectionAction extends _NonOverrideAction<CopySelectionTextI...
method invokeAction (line 2110) | void invokeAction(CopySelectionTextIntent intent, [BuildContext? conte...
class _GranularlyExtendSelectionAction (line 2115) | class _GranularlyExtendSelectionAction<T extends DirectionalTextEditingI...
method invokeAction (line 2123) | void invokeAction(T intent, [BuildContext? context])
class _GranularlyExtendCaretSelectionAction (line 2128) | class _GranularlyExtendCaretSelectionAction<
method invokeAction (line 2141) | void invokeAction(T intent, [BuildContext? context])
class _DirectionallyExtendCaretSelectionAction (line 2150) | class _DirectionallyExtendCaretSelectionAction<
method invokeAction (line 2159) | void invokeAction(T intent, [BuildContext? context])
type SelectableRegionContextMenuBuilder (line 2175) | typedef SelectableRegionContextMenuBuilder =
class _SelectableRegionSelectionStatusNotifier (line 2186) | final class _SelectableRegionSelectionStatusNotifier extends ChangeNotifier
class SelectableRegionSelectionStatusScope (line 2224) | final class SelectableRegionSelectionStatusScope extends InheritedWidget {
method maybeOf (line 2245) | ValueListenable<SelectableRegionSelectionStatus>? maybeOf(
method updateShouldNotify (line 2256) | bool updateShouldNotify(SelectableRegionSelectionStatusScope oldWidget)
FILE: lib/common/widgets/flutter/selectable_text/selectable_text.dart
class _TextSpanEditingController (line 16) | class _TextSpanEditingController extends TextEditingController {
method buildTextSpan (line 24) | TextSpan buildTextSpan({
class _SelectableTextSelectionGestureDetectorBuilder (line 40) | class _SelectableTextSelectionGestureDetectorBuilder
method onSingleTapUp (line 50) | void onSingleTapUp(TapDragUpDetails details)
class SelectableText (line 129) | class SelectableText extends StatefulWidget {
method _defaultContextMenuBuilder (line 427) | Widget _defaultContextMenuBuilder(
method createState (line 446) | State<SelectableText> createState()
method debugFillProperties (line 449) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class _SelectableTextState (line 570) | class _SelectableTextState extends State<SelectableText>
method initState (line 598) | void initState()
method didUpdateWidget (line 610) | void didUpdateWidget(SelectableText oldWidget)
method dispose (line 634) | void dispose()
method _onControllerChanged (line 641) | void _onControllerChanged()
method _handleFocusChanged (line 652) | void _handleFocusChanged()
method _handleSelectionChanged (line 666) | void _handleSelectionChanged(
method _handleSelectionHandleTapped (line 695) | void _handleSelectionHandleTapped()
method _shouldShowSelectionHandles (line 701) | bool _shouldShowSelectionHandles(SelectionChangedCause? cause)
method build (line 728) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/selectable_text/selection_area.dart
class SelectionArea (line 45) | class SelectionArea extends StatefulWidget {
method _defaultContextMenuBuilder (line 101) | Widget _defaultContextMenuBuilder(
method createState (line 110) | State<StatefulWidget> createState()
class SelectionAreaState (line 114) | class SelectionAreaState extends State<SelectionArea> {
method build (line 124) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/selectable_text/tap_and_drag.dart
function _getGlobalDistance (line 15) | double _getGlobalDistance(PointerEvent event, OffsetPair? originPosition)
type _DragState (line 41) | enum _DragState {
function addAllowedPointer (line 133) | void addAllowedPointer(PointerDownEvent event)
function handleEvent (line 157) | void handleEvent(PointerEvent event)
function rejectGesture (line 180) | void rejectGesture(int pointer)
function dispose (line 185) | void dispose()
function _trackTap (line 190) | void _trackTap(PointerDownEvent event)
function _hasSameButton (line 201) | bool _hasSameButton(int buttons)
function _isWithinConsecutiveTapTolerance (line 210) | bool _isWithinConsecutiveTapTolerance(Offset secondTapOffset)
function _representsSameSeries (line 219) | bool _representsSameSeries(PointerDownEvent event)
function _consecutiveTapTimerStart (line 225) | void _consecutiveTapTimerStart()
function _consecutiveTapTimerStop (line 232) | void _consecutiveTapTimerStop()
function _consecutiveTapTimerTimeout (line 239) | void _consecutiveTapTimerTimeout()
function _tapTrackerReset (line 246) | void _tapTrackerReset()
class BaseTapAndDragGestureRecognizer (line 384) | sealed class BaseTapAndDragGestureRecognizer
method _hasSufficientGlobalDistanceToAccept (line 558) | bool _hasSufficientGlobalDistanceToAccept(
method _handleDragUpdateThrottled (line 567) | void _handleDragUpdateThrottled()
method isPointerAllowed (line 580) | bool isPointerAllowed(PointerEvent event)
method addAllowedPointer (line 605) | void addAllowedPointer(PointerDownEvent event)
method handleNonAllowedPointer (line 625) | void handleNonAllowedPointer(PointerDownEvent event)
method acceptGesture (line 635) | void acceptGesture(int pointer)
method didStopTrackingLastPointer (line 676) | void didStopTrackingLastPointer(int pointer)
method handleEvent (line 721) | void handleEvent(PointerEvent event)
method rejectGesture (line 778) | void rejectGesture(int pointer)
method dispose (line 791) | void dispose()
method _acceptDrag (line 800) | void _acceptDrag(PointerEvent event)
method _checkDrag (line 836) | void _checkDrag(PointerMoveEvent event)
method _checkTapDown (line 869) | void _checkTapDown(PointerDownEvent event)
method _checkTapUp (line 888) | void _checkTapUp(PointerUpEvent event)
method _checkDragStart (line 910) | void _checkDragStart(PointerEvent event)
method _checkDragUpdate (line 926) | void _checkDragUpdate(PointerEvent event, {OffsetPair? corrected})
method _checkDragEnd (line 955) | void _checkDragEnd()
method _checkCancel (line 981) | void _checkCancel()
method _didExceedDeadlineWithEvent (line 993) | void _didExceedDeadlineWithEvent(PointerDownEvent event)
method _didExceedDeadline (line 997) | void _didExceedDeadline()
method _giveUpPointer (line 1010) | void _giveUpPointer(int pointer)
method _resetTaps (line 1019) | void _resetTaps()
method _resetDragUpdateThrottle (line 1025) | void _resetDragUpdateThrottle()
method _stopDeadlineTimer (line 1036) | void _stopDeadlineTimer()
class TapAndHorizontalDragGestureRecognizer (line 1059) | class TapAndHorizontalDragGestureRecognizer
method _hasSufficientGlobalDistanceToAccept (line 1070) | bool _hasSufficientGlobalDistanceToAccept(
class TapAndPanGestureRecognizer (line 1104) | class TapAndPanGestureRecognizer extends BaseTapAndDragGestureRecognizer {
method _hasSufficientGlobalDistanceToAccept (line 1109) | bool _hasSufficientGlobalDistanceToAccept(
FILE: lib/common/widgets/flutter/selectable_text/text.dart
function selectableText (line 6) | Widget selectableText(
function selectableRichText (line 25) | Widget selectableRichText(
FILE: lib/common/widgets/flutter/selectable_text/text_selection.dart
class CustomTextSelectionGestureDetectorBuilder (line 16) | class CustomTextSelectionGestureDetectorBuilder
method buildGestureDetector (line 21) | Widget buildGestureDetector({
class TextSelectionGestureDetector (line 66) | class TextSelectionGestureDetector extends StatefulWidget {
method createState (line 194) | State<StatefulWidget> createState()
class _TextSelectionGestureDetectorState (line 197) | class _TextSelectionGestureDetectorState
method _getEffectiveConsecutiveTapCount (line 206) | int _getEffectiveConsecutiveTapCount(int rawCount)
method _handleTapTrackStart (line 237) | void _handleTapTrackStart()
method _handleTapTrackReset (line 241) | void _handleTapTrackReset()
method _handleTapDown (line 247) | void _handleTapDown(TapDragDownDetails details)
method _handleTapUp (line 262) | void _handleTapUp(TapDragUpDetails details)
method _handleTapCancel (line 271) | void _handleTapCancel()
method _handleDragStart (line 275) | void _handleDragStart(TapDragStartDetails details)
method _handleDragUpdate (line 279) | void _handleDragUpdate(TapDragUpdateDetails details)
method _handleDragEnd (line 283) | void _handleDragEnd(TapDragEndDetails details)
method _forcePressStarted (line 287) | void _forcePressStarted(ForcePressDetails details)
method _forcePressEnded (line 291) | void _forcePressEnded(ForcePressDetails details)
method _handleLongPressStart (line 295) | void _handleLongPressStart(LongPressStartDetails details)
method _handleLongPressMoveUpdate (line 299) | void _handleLongPressMoveUpdate(LongPressMoveUpdateDetails details)
method _handleLongPressEnd (line 303) | void _handleLongPressEnd(LongPressEndDetails details)
method _handleLongPressCancel (line 307) | void _handleLongPressCancel()
method build (line 312) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/sliver_layout_builder.dart
class SliverLayoutBuilder (line 26) | class SliverLayoutBuilder extends ConstrainedLayoutBuilder<SliverConstra...
method createRenderObject (line 31) | RenderConstrainedLayoutBuilder<SliverConstraints, RenderSliver>
class _RenderSliverLayoutBuilder (line 37) | class _RenderSliverLayoutBuilder extends RenderSliver
method childMainAxisPosition (line 43) | double childMainAxisPosition(RenderObject child)
method performLayout (line 49) | void performLayout()
method applyPaintTransform (line 56) | void applyPaintTransform(RenderObject child, Matrix4 transform)
method paint (line 62) | void paint(PaintingContext context, Offset offset)
method hitTestChildren (line 70) | bool hitTestChildren(
FILE: lib/common/widgets/flutter/tabs.dart
class CustomTabBarView (line 25) | class CustomTabBarView extends StatefulWidget {
method createState (line 77) | State<CustomTabBarView> createState()
class _CustomTabBarViewState (line 80) | class _CustomTabBarViewState extends State<CustomTabBarView> {
method _updateTabController (line 94) | void _updateTabController()
method _jumpToPage (line 123) | void _jumpToPage(int page)
method _animateToPage (line 129) | Future<void> _animateToPage(
method initState (line 144) | void initState()
method didChangeDependencies (line 150) | void didChangeDependencies()
method didUpdateWidget (line 165) | void didUpdateWidget(CustomTabBarView oldWidget)
method dispose (line 187) | void dispose()
method _updateChildren (line 197) | void _updateChildren()
method _handleTabControllerAnimationTick (line 205) | void _handleTabControllerAnimationTick()
method _warpToCurrentIndex (line 216) | void _warpToCurrentIndex()
method _warpToAdjacentTab (line 230) | Future<void> _warpToAdjacentTab(Duration duration)
method _warpToNonAdjacentTab (line 246) | Future<void> _warpToNonAdjacentTab(Duration duration)
method _syncControllerOffset (line 285) | void _syncControllerOffset()
method _handleScrollNotification (line 294) | bool _handleScrollNotification(ScrollNotification notification)
method _debugScheduleCheckHasValidChildrenCount (line 329) | bool _debugScheduleCheckHasValidChildrenCount()
method build (line 353) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/text/paragraph.dart
type _TextBoundaryRecord (line 31) | typedef _TextBoundaryRecord = ({
type _TextBoundaryAtPosition (line 38) | typedef _TextBoundaryAtPosition =
type _TextBoundaryAtPositionInText (line 43) | typedef _TextBoundaryAtPositionInText =
class _UnspecifiedTextScaler (line 48) | class _UnspecifiedTextScaler extends TextScaler {
method scale (line 54) | Never scale(double fontSize)
class RenderParagraph (line 58) | class RenderParagraph extends RenderBox
method _updateSelectionRegistrarSubscription (line 236) | void _updateSelectionRegistrarSubscription()
method _removeSelectionRegistrarSubscription (line 247) | void _removeSelectionRegistrarSubscription()
method _getSelectableFragments (line 254) | List<_SelectableFragment> _getSelectableFragments()
method selectableBelongsToParagraph (line 283) | bool selectableBelongsToParagraph(Selectable selectable)
method _disposeSelectableFragments (line 290) | void _disposeSelectableFragments()
method markNeedsLayout (line 305) | void markNeedsLayout()
method dispose (line 313) | void dispose()
method _getOffsetForPosition (line 510) | Offset _getOffsetForPosition(TextPosition position)
method computeMinIntrinsicWidth (line 516) | double computeMinIntrinsicWidth(double height)
method computeMaxIntrinsicWidth (line 531) | double computeMaxIntrinsicWidth(double height)
method _computeIntrinsicHeight (line 553) | double _computeIntrinsicHeight(double width)
method computeMinIntrinsicHeight (line 567) | double computeMinIntrinsicHeight(double width)
method computeMaxIntrinsicHeight (line 572) | double computeMaxIntrinsicHeight(double width)
method hitTestSelf (line 577) | bool hitTestSelf(Offset position)
method hitTestChildren (line 581) | bool hitTestChildren(BoxHitTestResult result, {required Offset position})
method systemFontsDidChange (line 626) | void systemFontsDidChange()
method _adjustMaxWidth (line 638) | double _adjustMaxWidth(double maxWidth)
method _layoutTextWithConstraints (line 644) | void _layoutTextWithConstraints(BoxConstraints constraints)
method computeDryLayout (line 655) | Size computeDryLayout(covariant BoxConstraints constraints)
method computeDistanceToActualBaseline (line 674) | double computeDistanceToActualBaseline(TextBaseline baseline)
method computeDryBaseline (line 690) | double computeDryBaseline(
method _moreTextSpan (line 724) | TextSpan _moreTextSpan([TextStyle? style])
method performLayout (line 734) | void performLayout()
method applyPaintTransform (line 824) | void applyPaintTransform(RenderBox child, Matrix4 transform)
method paint (line 829) | void paint(PaintingContext context, Offset offset)
method getOffsetForCaret (line 891) | Offset getOffsetForCaret(TextPosition position, Rect caretPrototype)
method getFullHeightForCaret (line 900) | double getFullHeightForCaret(TextPosition position)
method getBoxesForSelection (line 922) | List<ui.TextBox> getBoxesForSelection(
method getPositionForOffset (line 939) | TextPosition getPositionForOffset(Offset offset)
method getWordBoundary (line 954) | TextRange getWordBoundary(TextPosition position)
method _getLineAtOffset (line 960) | TextRange _getLineAtOffset(TextPosition position)
method _getTextPositionAbove (line 963) | TextPosition _getTextPositionAbove(TextPosition position)
method _getTextPositionBelow (line 970) | TextPosition _getTextPositionBelow(TextPosition position)
method _getTextPositionVertical (line 977) | TextPosition _getTextPositionVertical(
method describeSemanticsConfiguration (line 1021) | void describeSemanticsConfiguration(SemanticsConfiguration config)
method _childSemanticsConfigurationsDelegate (line 1073) | ChildSemanticsConfigurationsResult _childSemanticsConfigurationsDelegate(
method _createSemanticsConfigForTextInfo (line 1121) | SemanticsConfiguration _createSemanticsConfigForTextInfo(
method assembleSemanticsNode (line 1154) | void assembleSemanticsNode(
method _createShowOnScreenFor (line 1284) | VoidCallback? _createShowOnScreenFor(Key key)
method clearSemantics (line 1292) | void clearSemantics()
method debugDescribeChildren (line 1298) | List<DiagnosticsNode> debugDescribeChildren()
method debugFillProperties (line 1308) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class _SelectableFragment (line 1344) | class _SelectableFragment
method _updateSelectionGeometry (line 1373) | void _updateSelectionGeometry()
method _getSelectionGeometry (line 1383) | SelectionGeometry _getSelectionGeometry()
method dispatchSelectionEvent (line 1451) | SelectionResult dispatchSelectionEvent(SelectionEvent event)
method getSelectedContent (line 1532) | SelectedContent? getSelectedContent()
method getSelection (line 1548) | SelectedContentRange? getSelection()
method _didChangeSelection (line 1558) | void _didChangeSelection()
method _updateSelectionStartEdgeByTextBoundary (line 1563) | TextPosition _updateSelectionStartEdgeByTextBoundary(
method _updateSelectionEndEdgeByTextBoundary (line 1673) | TextPosition _updateSelectionEndEdgeByTextBoundary(
method _updateSelectionEdgeByTextBoundary (line 1782) | SelectionResult _updateSelectionEdgeByTextBoundary(
method _updateSelectionEdge (line 1862) | SelectionResult _updateSelectionEdge(
method _updateSelectionStartEdgeByMultiSelectableTextBoundary (line 1909) | SelectionResult? _updateSelectionStartEdgeByMultiSelectableTextBoundary(
method _updateSelectionEndEdgeByMultiSelectableTextBoundary (line 2123) | SelectionResult? _updateSelectionEndEdgeByMultiSelectableTextBoundary(
method _updateSelectionStartEdgeAtPlaceholderByMultiSelectableTextBoundary (line 2343) | SelectionResult?
method _updateSelectionEndEdgeAtPlaceholderByMultiSelectableTextBoundary (line 2648) | SelectionResult?
method _updateSelectionEdgeByMultiSelectableTextBoundary (line 2941) | SelectionResult _updateSelectionEdgeByMultiSelectableTextBoundary(
method _closestTextBoundary (line 3073) | TextPosition _closestTextBoundary(
method _isPlaceholder (line 3086) | bool _isPlaceholder()
method _getOriginParagraph (line 3098) | RenderParagraph _getOriginParagraph()
method _getParagraphContainingPosition (line 3129) | ({RenderParagraph paragraph, Offset localPosition})?
method _boundingBoxesContains (line 3161) | bool _boundingBoxesContains(Offset position)
method _clampTextPosition (line 3170) | TextPosition _clampTextPosition(TextPosition position)
method _setSelectionPosition (line 3183) | void _setSelectionPosition(TextPosition? position, {required bool isEnd})
method _handleClearSelection (line 3191) | SelectionResult _handleClearSelection()
method _handleSelectAll (line 3198) | SelectionResult _handleSelectAll()
method _handleSelectTextBoundary (line 3207) | SelectionResult _handleSelectTextBoundary(_TextBoundaryRecord textBoun...
method _intersect (line 3231) | TextRange? _intersect(TextRange a, TextRange b)
method _handleSelectMultiFragmentTextBoundary (line 3243) | SelectionResult _handleSelectMultiFragmentTextBoundary(
method _adjustTextBoundaryAtPosition (line 3274) | _TextBoundaryRecord _adjustTextBoundaryAtPosition(
method _handleSelectWord (line 3292) | SelectionResult _handleSelectWord(Offset globalPosition)
method _getWordBoundaryAtPosition (line 3306) | _TextBoundaryRecord _getWordBoundaryAtPosition(TextPosition position)
method _handleSelectParagraph (line 3312) | SelectionResult _handleSelectParagraph(Offset globalPosition)
method _getPositionInParagraph (line 3323) | TextPosition _getPositionInParagraph(RenderParagraph targetParagraph)
method _getParagraphBoundaryAtPosition (line 3333) | _TextBoundaryRecord _getParagraphBoundaryAtPosition(
method _getClampedParagraphBoundaryAtPosition (line 3359) | _TextBoundaryRecord _getClampedParagraphBoundaryAtPosition(
method _handleDirectionallyExtendSelection (line 3394) | SelectionResult _handleDirectionallyExtendSelection(
method _handleGranularlyExtendSelection (line 3465) | SelectionResult _handleGranularlyExtendSelection(
method _moveBeyondTextBoundaryAtDirection (line 3546) | TextPosition _moveBeyondTextBoundaryAtDirection(
method _moveToTextBoundaryAtDirection (line 3560) | TextPosition _moveToTextBoundaryAtDirection(
method _handleVerticalMovement (line 3592) | MapEntry<TextPosition, SelectionResult> _handleVerticalMovement(
method _positionIsWithinCurrentSelection (line 3643) | bool _positionIsWithinCurrentSelection(TextPosition position)
method _compareTextPositions (line 3665) | int _compareTextPositions(
method getTransformTo (line 3681) | Matrix4 getTransformTo(RenderObject? ancestor)
method pushHandleLayers (line 3686) | void pushHandleLayers(LayerLink? startHandle, LayerLink? endHandle)
method didChangeParagraphLayout (line 3756) | void didChangeParagraphLayout()
method paint (line 3769) | void paint(PaintingContext context, Offset offset)
method getLineAtOffset (line 3808) | TextSelection getLineAtOffset(TextPosition position)
method getTextPositionAbove (line 3816) | TextPosition getTextPositionAbove(TextPosition position)
method getTextPositionBelow (line 3821) | TextPosition getTextPositionBelow(TextPosition position)
method getWordBoundary (line 3826) | TextRange getWordBoundary(TextPosition position)
method debugFillProperties (line 3830) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
FILE: lib/common/widgets/flutter/text/rich_text.dart
class RichText (line 92) | class RichText extends MultiChildRenderObjectWidget {
method _effectiveTextScalerFrom (line 137) | TextScaler _effectiveTextScalerFrom(
method createRenderObject (line 242) | RenderParagraph createRenderObject(BuildContext context)
method updateRenderObject (line 264) | void updateRenderObject(BuildContext context, RenderParagraph renderOb...
method debugFillProperties (line 284) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
FILE: lib/common/widgets/flutter/text/text.dart
class Text (line 150) | class Text extends StatelessWidget {
method build (line 377) | Widget build(BuildContext context)
method debugFillProperties (line 498) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class _SelectableTextContainer (line 565) | class _SelectableTextContainer extends StatefulWidget {
method createState (line 597) | State<_SelectableTextContainer> createState()
class _SelectableTextContainerState (line 601) | class _SelectableTextContainerState extends State<_SelectableTextContain...
method initState (line 606) | void initState()
method dispose (line 612) | void dispose()
method build (line 618) | Widget build(BuildContext context)
class _RichText (line 643) | class _RichText extends StatelessWidget {
method build (line 677) | Widget build(BuildContext context)
class _SelectableTextContainerDelegate (line 704) | class _SelectableTextContainerDelegate
method handleSelectParagraph (line 713) | SelectionResult handleSelectParagraph(SelectParagraphSelectionEvent ev...
method _handleSelectParagraph (line 719) | SelectionResult _handleSelectParagraph(SelectParagraphSelectionEvent e...
method _initSelection (line 855) | SelectionResult _initSelection(
method _adjustSelection (line 931) | SelectionResult _adjustSelection(
method _compareScreenOrder (line 1068) | int _compareScreenOrder(Selectable a, Selectable b)
method _compareVertically (line 1091) | int _compareVertically(Rect a, Rect b)
method _compareHorizontally (line 1109) | int _compareHorizontally(Rect a, Rect b)
method _calculateLocalRange (line 1131) | SelectedContentRange? _calculateLocalRange(List<_SelectionInfo> select...
method getSelection (line 1214) | SelectedContentRange? getSelection()
method _flushInactiveSelections (line 1234) | void _flushInactiveSelections()
method handleSelectionEdgeUpdate (line 1272) | SelectionResult handleSelectionEdgeUpdate(SelectionEdgeUpdateEvent event)
type _SelectionInfo (line 1293) | typedef _SelectionInfo = ({int contentLength, SelectedContentRange? rang...
class _OverridingTextStyleTextSpanUtils (line 1300) | class _OverridingTextStyleTextSpanUtils {
method applyTextSpacingOverrides (line 1301) | TextSpan applyTextSpacingOverrides({
method _applyTextStyleOverrides (line 1322) | TextSpan _applyTextStyleOverrides(
FILE: lib/common/widgets/flutter/text_field/adaptive_text_selection_toolbar.dart
class AdaptiveTextSelectionToolbar (line 43) | class AdaptiveTextSelectionToolbar extends StatelessWidget {
method getButtonLabel (line 204) | String getButtonLabel(
method getAdaptiveButtons (line 263) | Iterable<Widget> getAdaptiveButtons(
method build (line 312) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/text_field/controller.dart
type RichTextType (line 30) | enum RichTextType { text, composing, at, emoji, vote, common }
class Emote (line 32) | class Emote {
class RichTextEditingDeltaInsertion (line 76) | class RichTextEditingDeltaInsertion extends TextEditingDeltaInsertion
class RichTextEditingDeltaReplacement (line 105) | class RichTextEditingDeltaReplacement extends TextEditingDeltaReplacement
class RichTextItem (line 134) | class RichTextItem {
method onInsert (line 168) | List<RichTextItem>? onInsert(
method onDelete (line 272) | ({bool remove, bool cal})? onDelete(
method onReplace (line 353) | ({bool remove, List<RichTextItem>? toAdd})? onReplace(
method toString (line 550) | String toString()
class RichTextEditingController (line 558) | class RichTextEditingController extends TextEditingController {
method syncRichText (line 604) | void syncRichText(TextEditingDelta delta)
method buildTextSpan (line 713) | TextSpan buildTextSpan({
method clear (line 828) | void clear()
method dispose (line 834) | void dispose()
method dragOffset (line 839) | TextPosition dragOffset(TextPosition position)
method tapOffsetSimple (line 860) | int tapOffsetSimple(int offset)
method tapOffset (line 880) | int tapOffset(
method longPressOffset (line 921) | ({int startOffset, int endOffset}) longPressOffset(
method keyboardOffset (line 956) | TextSelection keyboardOffset(TextSelection newSelection)
method keyboardOffsets (line 985) | TextSelection keyboardOffsets(TextSelection newSelection)
method getSelectionText (line 1036) | String? getSelectionText(TextSelection selection)
FILE: lib/common/widgets/flutter/text_field/cupertino/adaptive_text_selection_toolbar.dart
class CupertinoAdaptiveTextSelectionToolbar (line 30) | class CupertinoAdaptiveTextSelectionToolbar extends StatelessWidget {
method getAdaptiveButtons (line 185) | Iterable<Widget> getAdaptiveButtons(
method build (line 210) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/text_field/cupertino/spell_check_suggestions_toolbar.dart
class CupertinoSpellCheckSuggestionsToolbar (line 25) | class CupertinoSpellCheckSuggestionsToolbar extends StatelessWidget {
method buildButtonItems (line 68) | List<ContextMenuButtonItem>? buildButtonItems(
method _replaceText (line 118) | void _replaceText(
method _buildToolbarButtons (line 153) | List<Widget> _buildToolbarButtons(BuildContext context)
method build (line 162) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/text_field/cupertino/text_field.dart
class _CupertinoTextFieldSelectionGestureDetectorBuilder (line 85) | class _CupertinoTextFieldSelectionGestureDetectorBuilder
method onSingleTapUp (line 96) | void onSingleTapUp(TapDragUpDetails details)
method onDragSelectionEnd (line 117) | void onDragSelectionEnd(TapDragEndDetails details)
class CupertinoRichTextField (line 176) | class CupertinoRichTextField extends StatefulWidget {
method _defaultContextMenuBuilder (line 814) | Widget _defaultContextMenuBuilder(
method defaultSpellCheckSuggestionsToolbarBuilder (line 880) | Widget defaultSpellCheckSuggestionsToolbarBuilder(
method createState (line 890) | State<CupertinoRichTextField> createState()
method debugFillProperties (line 893) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
method inferIOSSpellCheckConfiguration (line 1163) | SpellCheckConfiguration inferIOSSpellCheckConfiguration(
function initState (line 1218) | void initState()
function didUpdateWidget (line 1230) | void didUpdateWidget(CupertinoRichTextField oldWidget)
function restoreState (line 1241) | void restoreState(RestorationBucket? oldBucket, bool initialRestore)
function dispose (line 1247) | void dispose()
function _requestKeyboard (line 1255) | void _requestKeyboard()
function _handleFocusChanged (line 1259) | void _handleFocusChanged()
function _shouldShowSelectionHandles (line 1266) | bool _shouldShowSelectionHandles(SelectionChangedCause? cause)
function _handleSelectionChanged (line 1294) | void _handleSelectionChanged(
function _shouldShowAttachment (line 1334) | bool _shouldShowAttachment({
function _onClearButtonTapped (line 1364) | void _onClearButtonTapped()
function _buildClearButton (line 1375) | Widget _buildClearButton()
function _addTextDependentAttachments (line 1398) | Widget _addTextDependentAttachments(
FILE: lib/common/widgets/flutter/text_field/editable.dart
class VerticalCaretMovementRun (line 96) | class VerticalCaretMovementRun implements Iterator<TextPosition> {
method _getTextPositionForLine (line 138) | MapEntry<Offset, TextPosition> _getTextPositionForLine(int lineNumber)
method moveNext (line 166) | bool moveNext()
method movePrevious (line 183) | bool movePrevious()
method moveByOffset (line 203) | bool moveByOffset(double offset)
class RenderEditable (line 239) | class RenderEditable extends RenderBox
method dispose (line 384) | void dispose()
method _updateForegroundPainter (line 407) | void _updateForegroundPainter(RenderEditablePainter? newPainter)
method _updatePainter (line 444) | void _updatePainter(RenderEditablePainter? newPainter)
method _createBuiltInForegroundPainters (line 490) | _CompositeRenderEditablePainter _createBuiltInForegroundPainters()
method _createBuiltInPainters (line 501) | _CompositeRenderEditablePainter _createBuiltInPainters()
method _getTextPositionVertical (line 638) | TextPosition _getTextPositionVertical(
method getLineAtOffset (line 657) | TextSelection getLineAtOffset(TextPosition position)
method getWordBoundary (line 668) | TextRange getWordBoundary(TextPosition position)
method getTextPositionAbove (line 674) | TextPosition getTextPositionAbove(TextPosition position)
method getTextPositionBelow (line 685) | TextPosition getTextPositionBelow(TextPosition position)
method _updateSelectionExtentsVisibility (line 696) | void _updateSelectionExtentsVisibility(Offset effectiveOffset)
method _setTextEditingValue (line 729) | void _setTextEditingValue(
method _setSelection (line 736) | void _setSelection(TextSelection nextSelection, SelectionChangedCause ...
method markNeedsPaint (line 759) | void markNeedsPaint()
method systemFontsDidChange (line 767) | void systemFontsDidChange()
method _showHideCursor (line 922) | void _showHideCursor()
method setPromptRectRange (line 1269) | void setPromptRectRange(TextRange? newRange)
method getBoxesForSelection (line 1311) | List<TextBox> getBoxesForSelection(TextSelection selection)
method describeSemanticsConfiguration (line 1332) | void describeSemanticsConfiguration(SemanticsConfiguration config)
method _handleSetText (line 1420) | void _handleSetText(String text)
method assembleSemanticsNode (line 1431) | void assembleSemanticsNode(
method _createShowOnScreenFor (line 1555) | VoidCallback? _createShowOnScreenFor(Key key)
method _handleSetSelection (line 1566) | void _handleSetSelection(TextSelection selection)
method _handleMoveCursorForwardByCharacter (line 1570) | void _handleMoveCursorForwardByCharacter(bool extendSelection)
method _handleMoveCursorBackwardByCharacter (line 1587) | void _handleMoveCursorBackwardByCharacter(bool extendSelection)
method _handleMoveCursorForwardByWord (line 1604) | void _handleMoveCursorForwardByWord(bool extendSelection)
method _handleMoveCursorBackwardByWord (line 1622) | void _handleMoveCursorBackwardByWord(bool extendSelection)
method _getNextWord (line 1640) | TextRange? _getNextWord(int offset)
method _getPreviousWord (line 1655) | TextRange? _getPreviousWord(int offset)
method _onlyWhitespace (line 1677) | bool _onlyWhitespace(TextRange range)
method attach (line 1688) | void attach(PipelineOwner owner)
method detach (line 1704) | void detach()
method redepthChildren (line 1715) | void redepthChildren()
method visitChildren (line 1728) | void visitChildren(RenderObjectVisitor visitor)
method _getMaxScrollExtent (line 1757) | double _getMaxScrollExtent(Size contentSize)
method getEndpointsForSelection (line 1782) | List<TextSelectionPoint> getEndpointsForSelection(TextSelection select...
method getRectForComposingRange (line 1831) | Rect? getRectForComposingRange(TextRange range)
method getPositionForPoint (line 1860) | TextPosition getPositionForPoint(Offset globalPosition)
method getLocalRectForCaret (line 1878) | Rect getLocalRectForCaret(TextPosition caretPosition)
method computeMinIntrinsicWidth (line 1936) | double computeMinIntrinsicWidth(double height)
method computeMaxIntrinsicWidth (line 1952) | double computeMaxIntrinsicWidth(double height)
method _countHardLineBreaks (line 1975) | int _countHardLineBreaks(String text)
method _preferredHeight (line 1995) | double _preferredHeight(double width)
method computeMinIntrinsicHeight (line 2045) | double computeMinIntrinsicHeight(double width)
method computeMaxIntrinsicHeight (line 2049) | double computeMaxIntrinsicHeight(double width)
method computeDistanceToActualBaseline (line 2061) | double computeDistanceToActualBaseline(TextBaseline baseline)
method hitTestSelf (line 2067) | bool hitTestSelf(Offset position)
method hitTestChildren (line 2071) | bool hitTestChildren(BoxHitTestResult result, {required Offset position})
method handleEvent (line 2101) | void handleEvent(PointerEvent event, BoxHitTestEntry entry)
method handleSecondaryTapDown (line 2127) | void handleSecondaryTapDown(TapDownDetails details)
method handleTapDown (line 2138) | void handleTapDown(TapDownDetails details)
method _handleTapDown (line 2142) | void _handleTapDown(TapDownDetails details)
method handleTap (line 2153) | void handleTap()
method _handleTap (line 2157) | void _handleTap()
method handleDoubleTap (line 2168) | void handleDoubleTap()
method handleLongPress (line 2178) | void handleLongPress()
method _handleLongPress (line 2182) | void _handleLongPress()
method selectPosition (line 2197) | void selectPosition({required SelectionChangedCause cause})
method selectPositionAt (line 2205) | void selectPositionAt({
method selectWord (line 2257) | void selectWord({required SelectionChangedCause cause})
method selectWordsInRange (line 2269) | void selectWordsInRange({
method selectWordEdge (line 2311) | void selectWordEdge({required SelectionChangedCause cause})
method getWordAtOffset (line 2344) | TextSelection getWordAtOffset(TextPosition position)
method _adjustConstraints (line 2423) | (double minWidth, double maxWidth) _adjustConstraints({
method _computeTextMetricsIfNeeded (line 2454) | void _computeTextMetricsIfNeeded()
method _computeCaretPrototype (line 2469) | void _computeCaretPrototype()
method _snapToPhysicalPixel (line 2494) | Offset _snapToPhysicalPixel(Offset sourceOffset)
method computeDryLayout (line 2511) | Size computeDryLayout(covariant BoxConstraints constraints)
method computeDryBaseline (line 2535) | double computeDryBaseline(
method performLayout (line 2556) | void performLayout()
method _calculateAdjustedCursorOffset (line 2619) | Offset _calculateAdjustedCursorOffset(
method calculateBoundedFloatingCursorOffset (line 2642) | Offset calculateBoundedFloatingCursorOffset(
method setFloatingCursor (line 2734) | void setFloatingCursor(
method _lineNumberFor (line 2770) | MapEntry<int, Offset> _lineNumberFor(
method startVerticalCaretMovement (line 2815) | VerticalCaretMovementRun startVerticalCaretMovement(
method _paintContents (line 2832) | void _paintContents(PaintingContext context, Offset offset)
method _paintHandleLayers (line 2859) | void _paintHandleLayers(
method applyPaintTransform (line 2895) | void applyPaintTransform(RenderBox child, Matrix4 transform)
method paint (line 2903) | void paint(PaintingContext context, Offset offset)
method describeApproximatePaintClip (line 2928) | Rect? describeApproximatePaintClip(RenderObject child)
method debugFillProperties (line 2940) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
method debugDescribeChildren (line 2968) | List<DiagnosticsNode> debugDescribeChildren()
class _RenderEditableCustomPaint (line 2979) | class _RenderEditableCustomPaint extends RenderBox {
method paint (line 3014) | void paint(PaintingContext context, Offset offset)
method attach (line 3025) | void attach(PipelineOwner owner)
method detach (line 3031) | void detach()
method computeDryLayout (line 3038) | Size computeDryLayout(covariant BoxConstraints constraints)
class RenderEditablePainter (line 3065) | abstract class RenderEditablePainter extends ChangeNotifier {
method shouldRepaint (line 3078) | bool shouldRepaint(RenderEditablePainter? oldDelegate)
method paint (line 3089) | void paint(Canvas canvas, Size size, RenderEditable renderEditable)
class _TextHighlightPainter (line 3092) | class _TextHighlightPainter extends RenderEditablePainter {
method paint (line 3146) | void paint(Canvas canvas, Size size, RenderEditable renderEditable)
method shouldRepaint (line 3177) | bool shouldRepaint(RenderEditablePainter? oldDelegate)
class _CaretPainter (line 3192) | class _CaretPainter extends RenderEditablePainter {
method paintRegularCursor (line 3269) | void paintRegularCursor(
method paint (line 3297) | void paint(Canvas canvas, Size size, RenderEditable renderEditable)
method shouldRepaint (line 3336) | bool shouldRepaint(RenderEditablePainter? oldDelegate)
class _CompositeRenderEditablePainter (line 3355) | class _CompositeRenderEditablePainter extends RenderEditablePainter {
method addListener (line 3361) | void addListener(VoidCallback listener)
method removeListener (line 3368) | void removeListener(VoidCallback listener)
method paint (line 3375) | void paint(Canvas canvas, Size size, RenderEditable renderEditable)
method shouldRepaint (line 3382) | bool shouldRepaint(RenderEditablePainter? oldDelegate)
FILE: lib/common/widgets/flutter/text_field/editable_text.dart
type EditableTextContextMenuBuilder (line 49) | typedef EditableTextContextMenuBuilder =
type _ApplyTextBoundary (line 54) | typedef _ApplyTextBoundary =
class _CompositionCallback (line 66) | class _CompositionCallback extends SingleChildRenderObjectWidget {
method createRenderObject (line 76) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 81) | void updateRenderObject(
class _RenderCompositionCallback (line 92) | class _RenderCompositionCallback extends RenderProxyBox {
method paint (line 111) | void paint(PaintingContext context, ui.Offset offset)
class _KeyFrame (line 120) | class _KeyFrame {
class _DiscreteKeyFrameSimulation (line 142) | class _DiscreteKeyFrameSimulation extends Simulation {
method dx (line 162) | double dx(double time)
method isDone (line 165) | bool isDone(double time)
method x (line 171) | double x(double time)
class EditableText (line 425) | class EditableText extends StatefulWidget {
method getEditableButtonItems (line 1756) | List<ContextMenuButtonItem> getEditableButtonItems({
method _inferAutocorrect (line 1837) | bool _inferAutocorrect({required Iterable<String>? autofillHints})
method _inferKeyboardType (line 1869) | TextInputType _inferKeyboardType({
method createState (line 2021) | EditableTextState createState()
method debugFillProperties (line 2024) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class EditableTextState (line 2196) | class EditableTextState extends State<EditableText>
method _onChangedClipboardStatus (line 2466) | void _onChangedClipboardStatus()
method _onChangedLiveTextInputStatus (line 2472) | void _onChangedLiveTextInputStatus()
method copySelection (line 2488) | void copySelection(SelectionChangedCause cause)
method cutSelection (line 2527) | void cutSelection(SelectionChangedCause cause)
method pasteText (line 2559) | Future<void> pasteText(SelectionChangedCause cause)
method _pasteText (line 2572) | void _pasteText(SelectionChangedCause cause, String text)
method selectAll (line 2621) | void selectAll(SelectionChangedCause cause)
method lookUpSelection (line 2667) | Future<void> lookUpSelection(SelectionChangedCause cause)
method searchWebForSelection (line 2686) | Future<void> searchWebForSelection(SelectionChangedCause cause)
method shareSelection (line 2707) | Future<void> shareSelection(SelectionChangedCause cause)
method _startLiveTextInput (line 2721) | void _startLiveTextInput(SelectionChangedCause cause)
method findSuggestionSpanAtCursorIndex (line 2741) | SuggestionSpan? findSuggestionSpanAtCursorIndex(int cursorIndex)
method _inferSpellCheckConfiguration (line 2775) | SpellCheckConfiguration _inferSpellCheckConfiguration(
method buttonItemsForToolbarOptions (line 2825) | List<ContextMenuButtonItem>? buttonItemsForToolbarOptions([
method getGlyphHeights (line 2871) | ({double startGlyphHeight, double endGlyphHeight}) getGlyphHeights()
method initState (line 3037) | void initState()
method _onResume (line 3051) | void _onResume()
method _resetJustResumed (line 3059) | void _resetJustResumed()
method _initProcessTextActions (line 3066) | Future<void> _initProcessTextActions()
method didChangeDependencies (line 3078) | void didChangeDependencies()
method didUpdateWidget (line 3161) | void didUpdateWidget(EditableText oldWidget)
method _disposeScrollNotificationObserver (line 3265) | void _disposeScrollNotificationObserver()
method dispose (line 3277) | void dispose()
method updateEditingValue (line 3324) | void updateEditingValue(
method _checkNeedsAdjustAffinity (line 3412) | bool _checkNeedsAdjustAffinity(TextEditingValue value)
method performAction (line 3421) | void performAction(TextInputAction action)
method updateEditingValueWithDeltas (line 3463) | void updateEditingValueWithDeltas(List<TextEditingDelta> textEditingDe...
method performPrivateCommand (line 3490) | void performPrivateCommand(String action, Map<String, dynamic> data)
method insertContent (line 3495) | void insertContent(KeyboardInsertedContent content)
method updateFloatingCursor (line 3525) | void updateFloatingCursor(RawFloatingCursorPoint point)
method _onFloatingCursorResetTick (line 3609) | void _onFloatingCursorResetTick()
method _finalizeEditing (line 3669) | void _finalizeEditing(TextInputAction action, {required bool shouldUnf...
method beginBatchEdit (line 3755) | void beginBatchEdit()
method endBatchEdit (line 3764) | void endBatchEdit()
method _updateRemoteEditingValueIfNeeded (line 3773) | void _updateRemoteEditingValueIfNeeded()
method _getOffsetToRevealCaret (line 3810) | RevealedOffset _getOffsetToRevealCaret(Rect rect)
method _openInputConnection (line 3871) | void _openInputConnection()
method _closeInputConnectionIfNeeded (line 3918) | void _closeInputConnectionIfNeeded()
method _openOrCloseInputConnectionIfNeeded (line 3928) | void _openOrCloseInputConnectionIfNeeded()
method _scheduleRestartConnection (line 3938) | void _scheduleRestartConnection()
method _restartConnectionIfNeeded (line 3951) | void _restartConnectionIfNeeded()
method didChangeInputControl (line 3982) | void didChangeInputControl(
method connectionClosed (line 3993) | void connectionClosed()
method _flagInternalFocus (line 4009) | void _flagInternalFocus()
method _unflagInternalFocus (line 4014) | void _unflagInternalFocus()
method requestKeyboard (line 4026) | void requestKeyboard()
method _updateOrDisposeSelectionOverlayIfNeeded (line 4036) | void _updateOrDisposeSelectionOverlayIfNeeded()
method _isInternalScrollableNotification (line 4055) | bool _isInternalScrollableNotification(BuildContext? notificationContext)
method _scrollableNotificationIsFromSameSubtree (line 4061) | bool _scrollableNotificationIsFromSameSubtree(
method _handleContextMenuOnParentScroll (line 4087) | void _handleContextMenuOnParentScroll(ScrollNotification notification)
method _calculateDeviceRect (line 4108) | Rect _calculateDeviceRect()
method _handleContextMenuOnScroll (line 4129) | void _handleContextMenuOnScroll(ScrollNotification notification)
method _selectionInViewport (line 4220) | bool _selectionInViewport(Rect selectionBounds)
method _createSelectionOverlay (line 4241) | TextSelectionOverlay _createSelectionOverlay()
method _handleSelectionChanged (line 4270) | void _handleSelectionChanged(
method scheduleShowCaretOnScreen (line 4344) | void scheduleShowCaretOnScreen({required bool withAnimation})
method didChangeMetrics (line 4437) | void didChangeMetrics()
method _performSpellCheck (line 4455) | Future<void> _performSpellCheck(final String text)
method _formatAndSetValue (line 4506) | void _formatAndSetValue(
method _bringIntoViewBySelectionState (line 4587) | void _bringIntoViewBySelectionState(
method _onCursorColorTick (line 4613) | void _onCursorColorTick()
method _startCursorBlink (line 4652) | void _startCursorBlink()
method _onCursorTick (line 4679) | void _onCursorTick()
method _stopCursorBlink (line 4711) | void _stopCursorBlink({bool resetCharTicks = true})
method _startOrStopCursorTimerIfNeeded (line 4724) | void _startOrStopCursorTimerIfNeeded()
method _didChangeTextEditingValue (line 4732) | void _didChangeTextEditingValue()
method _handleFocusChanged (line 4753) | void _handleFocusChanged()
method _adjustedSelectionWhenFocused (line 4777) | TextSelection? _adjustedSelectionWhenFocused()
method _compositeCallback (line 4800) | void _compositeCallback(Layer layer)
method _updateSizeAndTransform (line 4814) | void _updateSizeAndTransform()
method _schedulePeriodicPostFrameCallbacks (line 4820) | void _schedulePeriodicPostFrameCallbacks([Duration? duration])
method _updateSelectionRects (line 4835) | void _updateSelectionRects({bool force = false})
method _updateComposingRectIfNeeded (line 4933) | void _updateComposingRectIfNeeded()
method _updateCaretRectIfNeeded (line 4961) | void _updateCaretRectIfNeeded()
method userUpdateTextEditingValue (line 4989) | void userUpdateTextEditingValue(
method bringIntoView (line 5018) | void bringIntoView(TextPosition position)
method showToolbar (line 5031) | bool showToolbar()
method hideToolbar (line 5066) | void hideToolbar([bool hideHandles = true])
method toggleToolbar (line 5079) | void toggleToolbar([bool hideHandles = true])
method showSpellCheckSuggestionsToolbar (line 5091) | bool showSpellCheckSuggestionsToolbar()
method showMagnifier (line 5134) | void showMagnifier(Offset positionToShow)
method hideMagnifier (line 5147) | void hideMagnifier()
method insertTextPlaceholder (line 5163) | void insertTextPlaceholder(Size size)
method removeTextPlaceholder (line 5179) | void removeTextPlaceholder()
method performSelector (line 5190) | void performSelector(String selectorName)
method autofill (line 5248) | void autofill(TextEditingValue value)
method showAutocorrectionPromptRect (line 5254) | void showAutocorrectionPromptRect(int start, int end)
method _semanticsOnCopy (line 5260) | VoidCallback? _semanticsOnCopy(TextSelectionControls? controls)
method _semanticsOnCut (line 5274) | VoidCallback? _semanticsOnCut(TextSelectionControls? controls)
method _semanticsOnPaste (line 5288) | VoidCallback? _semanticsOnPaste(TextSelectionControls? controls)
method _moveBeyondTextBoundary (line 5306) | TextPosition _moveBeyondTextBoundary(
method _moveToTextBoundary (line 5329) | TextPosition _moveToTextBoundary(
method _characterBoundary (line 5372) | TextBoundary _characterBoundary()
method _nextWordBoundary (line 5375) | TextBoundary _nextWordBoundary()
method _linebreak (line 5378) | TextBoundary _linebreak()
method _paragraphBoundary (line 5380) | TextBoundary _paragraphBoundary()
method _documentBoundary (line 5381) | TextBoundary _documentBoundary()
method _makeOverridable (line 5383) | Action<T> _makeOverridable<T extends Intent>(Action<T> defaultAction)
method _transposeCharacters (line 5397) | void _transposeCharacters(TransposeCharactersIntent intent)
method _replaceText (line 5435) | void _replaceText(ReplaceTextIntent intent)
method _scrollToDocumentBoundary (line 5482) | void _scrollToDocumentBoundary(ScrollToDocumentBoundaryIntent intent)
method _scroll (line 5492) | void _scroll(ScrollIntent intent)
method _extendSelectionByPage (line 5527) | void _extendSelectionByPage(ExtendSelectionByPageIntent intent)
method _updateSelection (line 5589) | void _updateSelection(UpdateSelectionIntent intent)
method _hideToolbarIfVisible (line 5626) | Object? _hideToolbarIfVisible(DismissIntent intent)
method _onTapOutside (line 5634) | void _onTapOutside(BuildContext context, PointerDownEvent event)
method _onTapUpOutside (line 5644) | void _onTapUpOutside(BuildContext context, PointerUpEvent event)
method _defaultOnTapOutside (line 5662) | void _defaultOnTapOutside(BuildContext context, PointerDownEvent event)
method _defaultOnTapUpOutside (line 5675) | void _defaultOnTapUpOutside(BuildContext context, PointerUpEvent event)
method build (line 5835) | Widget build(BuildContext context)
method buildTextSpan (line 6034) | TextSpan buildTextSpan()
class _Editable (line 6125) | class _Editable extends MultiChildRenderObjectWidget {
method createRenderObject (line 6216) | RenderEditable createRenderObject(BuildContext context)
method updateRenderObject (line 6261) | void updateRenderObject(BuildContext context, RenderEditable renderObj...
class _NeverUserScrollableScrollPhysics (line 6304) | class _NeverUserScrollableScrollPhysics extends ScrollPhysics {
method applyTo (line 6310) | _NeverUserScrollableScrollPhysics applyTo(ScrollPhysics? ancestor)
class _ScribbleCacheKey (line 6318) | @immutable
method compare (line 6342) | RenderComparison compare(_ScribbleCacheKey other)
class _ScribbleFocusable (line 6362) | class _ScribbleFocusable extends StatefulWidget {
method createState (line 6378) | _ScribbleFocusableState createState()
class _ScribbleFocusableState (line 6381) | class _ScribbleFocusableState extends State<_ScribbleFocusable>
method initState (line 6387) | void initState()
method didUpdateWidget (line 6395) | void didUpdateWidget(_ScribbleFocusable oldWidget)
method dispose (line 6407) | void dispose()
method onScribbleFocus (line 6422) | void onScribbleFocus(Offset offset)
method isInScribbleRect (line 6432) | bool isInScribbleRect(Rect rect)
method build (line 6469) | Widget build(BuildContext context)
class _ScribblePlaceholder (line 6474) | class _ScribblePlaceholder extends WidgetSpan {
method build (line 6481) | void build(
class _CodePointBoundary (line 6517) | class _CodePointBoundary extends TextBoundary {
method _breaksSurrogatePair (line 6523) | bool _breaksSurrogatePair(int position)
method getLeadingTextBoundaryAt (line 6530) | int? getLeadingTextBoundaryAt(int position)
method getTrailingTextBoundaryAt (line 6548) | int? getTrailingTextBoundaryAt(int position)
class _DeleteTextAction (line 6567) | class _DeleteTextAction<T extends DirectionalTextEditingIntent>
method _hideToolbarIfTextChanged (line 6575) | void _hideToolbarIfTextChanged(ReplaceTextIntent intent)
method invoke (line 6594) | Object? invoke(T intent, [BuildContext? context])
class _UpdateTextSelectionAction (line 6651) | class _UpdateTextSelectionAction<T extends DirectionalCaretMovementIntent>
method _isAtWordwrapUpstream (line 6673) | bool _isAtWordwrapUpstream(TextPosition position)
method _isAtWordwrapDownstream (line 6686) | bool _isAtWordwrapDownstream(TextPosition position)
method invoke (line 6697) | Object? invoke(T intent, [BuildContext? context])
class _UpdateTextSelectionVerticallyAction (line 6780) | class _UpdateTextSelectionVerticallyAction<
method stopCurrentVerticalRunIfSelectionChanges (line 6791) | void stopCurrentVerticalRunIfSelectionChanges()
method invoke (line 6811) | void invoke(T intent, [BuildContext? context])
class _WebComposingDisablingCallbackAction (line 6875) | class _WebComposingDisablingCallbackAction<T extends Intent>
class _SelectAllAction (line 6893) | class _SelectAllAction extends ContextAction<SelectAllTextIntent> {
method invoke (line 6899) | Object? invoke(SelectAllTextIntent intent, [BuildContext? context])
class _CopySelectionAction (line 6915) | class _CopySelectionAction extends ContextAction<CopySelectionTextIntent> {
method invoke (line 6921) | void invoke(CopySelectionTextIntent intent, [BuildContext? context])
class _PasteSelectionAction (line 6938) | class _PasteSelectionAction extends ContextAction<PasteTextIntent> {
method invoke (line 6944) | void invoke(PasteTextIntent intent, [BuildContext? context])
class _WebClipboardStatusNotifier (line 6958) | class _WebClipboardStatusNotifier extends ClipboardStatusNotifier {
method update (line 6963) | Future<void> update()
class _EditableTextTapOutsideAction (line 6968) | class _EditableTextTapOutsideAction
method invoke (line 6973) | void invoke(EditableTextTapOutsideIntent intent, [BuildContext? context])
class _EditableTextTapUpOutsideAction (line 7004) | class _EditableTextTapUpOutsideAction
method invoke (line 7009) | void invoke(EditableTextTapUpOutsideIntent intent, [BuildContext? cont...
class _OverridingTextStyleTextSpanUtils (line 7019) | class _OverridingTextStyleTextSpanUtils {
method applyTextSpacingOverrides (line 7020) | TextSpan applyTextSpacingOverrides({
method _applyTextStyleOverrides (line 7041) | TextSpan _applyTextStyleOverrides(
FILE: lib/common/widgets/flutter/text_field/spell_check.dart
class SpellCheckConfiguration (line 19) | @immutable
method copyWith (line 67) | SpellCheckConfiguration copyWith({
method toString (line 90) | String toString()
FILE: lib/common/widgets/flutter/text_field/spell_check_suggestions_toolbar.dart
class SpellCheckSuggestionsToolbar (line 31) | class SpellCheckSuggestionsToolbar extends StatelessWidget {
method buildButtonItems (line 78) | List<ContextMenuButtonItem>? buildButtonItems(
method _replaceText (line 133) | void _replaceText(
method getToolbarAnchor (line 166) | Offset getToolbarAnchor(TextSelectionToolbarAnchors anchors)
method _buildToolbarButtons (line 175) | List<Widget> _buildToolbarButtons(BuildContext context)
method build (line 202) | Widget build(BuildContext context)
class _SpellCheckSuggestionsToolbarContainer (line 251) | class _SpellCheckSuggestionsToolbarContainer extends StatelessWidget {
method build (line 261) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/text_field/system_context_menu.dart
class SystemContextMenu (line 50) | class SystemContextMenu extends StatefulWidget {
method isSupported (line 126) | bool isSupported(BuildContext context)
method isSupportedByField (line 142) | bool isSupportedByField(EditableTextState editableTextState)
method getDefaultItems (line 156) | List<IOSSystemContextMenuItem> getDefaultItems(
method createState (line 193) | State<SystemContextMenu> createState()
class _SystemContextMenuState (line 196) | class _SystemContextMenuState extends State<SystemContextMenu> {
method initState (line 200) | void initState()
method dispose (line 208) | void dispose()
method build (line 214) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/text_field/text_field.dart
class _TextFieldSelectionGestureDetectorBuilder (line 54) | class _TextFieldSelectionGestureDetectorBuilder
method onUserTap (line 68) | void onUserTap()
class RichTextField (line 203) | class RichTextField extends StatefulWidget {
method _defaultContextMenuBuilder (line 895) | Widget _defaultContextMenuBuilder(
method defaultSpellCheckSuggestionsToolbarBuilder (line 941) | Widget defaultSpellCheckSuggestionsToolbarBuilder(
method inferAndroidSpellCheckConfiguration (line 964) | SpellCheckConfiguration inferAndroidSpellCheckConfiguration(
method createState (line 982) | State<RichTextField> createState()
method debugFillProperties (line 985) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class RichTextFieldState (line 1242) | class RichTextFieldState extends State<RichTextField>
method _getEffectiveDecoration (line 1300) | InputDecoration _getEffectiveDecoration()
method initState (line 1389) | void initState()
method didChangeDependencies (line 1411) | void didChangeDependencies()
method didUpdateWidget (line 1417) | void didUpdateWidget(RichTextField oldWidget)
method restoreState (line 1452) | void restoreState(RestorationBucket? oldBucket, bool initialRestore)
method dispose (line 1458) | void dispose()
method _requestKeyboard (line 1468) | void _requestKeyboard()
method _shouldShowSelectionHandles (line 1472) | bool _shouldShowSelectionHandles(SelectionChangedCause? cause)
method _handleFocusChanged (line 1504) | void _handleFocusChanged()
method _handleSelectionChanged (line 1512) | void _handleSelectionChanged(
method _handleSelectionHandleTapped (line 1550) | void _handleSelectionHandleTapped()
method _handleHover (line 1556) | void _handleHover(bool hovering)
method _handleStatesControllerChange (line 1568) | void _handleStatesControllerChange()
method _initStatesController (line 1576) | void _initStatesController()
method autofill (line 1593) | void autofill(TextEditingValue newEditingValue)
method _getInputStyleForState (line 1616) | TextStyle _getInputStyleForState(TextStyle style)
method build (line 1632) | Widget build(BuildContext context)
method scheduleShowCaretOnScreen (line 2003) | void scheduleShowCaretOnScreen({required bool withAnimation})
function _m2StateInputStyle (line 2008) | TextStyle? _m2StateInputStyle(BuildContext context)
function _m2CounterErrorStyle (line 2017) | TextStyle _m2CounterErrorStyle(BuildContext context)
function _m3StateInputStyle (line 2029) | TextStyle? _m3StateInputStyle(BuildContext context)
function _m3InputStyle (line 2036) | TextStyle _m3InputStyle(BuildContext context)
function _m3CounterErrorStyle (line 2038) | TextStyle _m3CounterErrorStyle(BuildContext context)
FILE: lib/common/widgets/flutter/text_field/text_selection.dart
class TextSelectionGestureDetectorBuilderDelegate (line 35) | abstract class TextSelectionGestureDetectorBuilderDelegate {
class TextSelectionGestureDetectorBuilder (line 71) | class TextSelectionGestureDetectorBuilder {
method _showMagnifierIfSupportedByPlatform (line 93) | void _showMagnifierIfSupportedByPlatform(Offset positionToShow)
method _hideMagnifierIfSupportedByPlatform (line 106) | void _hideMagnifierIfSupportedByPlatform()
method _positionWasOnSelectionExclusive (line 137) | bool _positionWasOnSelectionExclusive(TextPosition textPosition)
method _positionWasOnSelectionInclusive (line 147) | bool _positionWasOnSelectionInclusive(TextPosition textPosition)
method _expandSelection (line 169) | void _expandSelection(
method _extendSelection (line 202) | void _extendSelection(Offset offset, SelectionChangedCause cause)
method onTapTrackStart (line 303) | void onTapTrackStart()
method onTapTrackReset (line 319) | void onTapTrackReset()
method onTapDown (line 332) | void onTapDown(TapDragDownDetails details)
method onForcePressStart (line 430) | void onForcePressStart(ForcePressDetails details)
method onForcePressEnd (line 455) | void onForcePressEnd(ForcePressDetails details)
method onUserTap (line 485) | void onUserTap()
method onSingleTapUp (line 498) | void onSingleTapUp(TapDragUpDetails details)
method onSingleTapCancel (line 627) | void onSingleTapCancel()
method onSingleLongTapStart (line 641) | void onSingleLongTapStart(LongPressStartDetails details)
method onSingleLongTapMoveUpdate (line 701) | void onSingleLongTapMoveUpdate(LongPressMoveUpdateDetails details)
method onSingleLongTapEnd (line 767) | void onSingleLongTapEnd(LongPressEndDetails details)
method onSingleLongTapCancel (line 783) | void onSingleLongTapCancel()
method onSecondaryTap (line 791) | void onSecondaryTap()
method onSecondaryTapDown (line 824) | void onSecondaryTapDown(TapDownDetails details)
method onDoubleTapDown (line 851) | void onDoubleTapDown(TapDragDownDetails details)
method _onSingleLongTapEndOrCancel (line 860) | void _onSingleLongTapEndOrCancel()
method _selectParagraphsInRange (line 879) | void _selectParagraphsInRange({
method _selectLinesInRange (line 897) | void _selectLinesInRange({
method _moveToTextBoundary (line 913) | TextRange _moveToTextBoundary(
method _selectTextBoundariesInRange (line 941) | void _selectTextBoundariesInRange({
method onTripleTapDown (line 978) | void onTripleTapDown(TapDragDownDetails details)
method onDragSelectionStart (line 1016) | void onDragSelectionStart(TapDragStartDetails details)
method onDragSelectionUpdate (line 1113) | void onDragSelectionUpdate(TapDragUpdateDetails details)
method onDragSelectionEnd (line 1330) | void onDragSelectionEnd(TapDragEndDetails details)
method buildGestureDetector (line 1352) | Widget buildGestureDetector({
class TextSelectionGestureDetector (line 1397) | class TextSelectionGestureDetector extends StatefulWidget {
method createState (line 1525) | State<StatefulWidget> createState()
class _TextSelectionGestureDetectorState (line 1528) | class _TextSelectionGestureDetectorState
method _getEffectiveConsecutiveTapCount (line 1537) | int _getEffectiveConsecutiveTapCount(int rawCount)
method _handleTapTrackStart (line 1568) | void _handleTapTrackStart()
method _handleTapTrackReset (line 1572) | void _handleTapTrackReset()
method _handleTapDown (line 1578) | void _handleTapDown(TapDragDownDetails details)
method _handleTapUp (line 1593) | void _handleTapUp(TapDragUpDetails details)
method _handleTapCancel (line 1602) | void _handleTapCancel()
method _handleDragStart (line 1606) | void _handleDragStart(TapDragStartDetails details)
method _handleDragUpdate (line 1610) | void _handleDragUpdate(TapDragUpdateDetails details)
method _handleDragEnd (line 1614) | void _handleDragEnd(TapDragEndDetails details)
method _forcePressStarted (line 1618) | void _forcePressStarted(ForcePressDetails details)
method _forcePressEnded (line 1622) | void _forcePressEnded(ForcePressDetails details)
method _handleLongPressStart (line 1626) | void _handleLongPressStart(LongPressStartDetails details)
method _handleLongPressMoveUpdate (line 1630) | void _handleLongPressMoveUpdate(LongPressMoveUpdateDetails details)
method _handleLongPressEnd (line 1634) | void _handleLongPressEnd(LongPressEndDetails details)
method _handleLongPressCancel (line 1638) | void _handleLongPressCancel()
method build (line 1643) | Widget build(BuildContext context)
class TextSelectionOverlay (line 1761) | class TextSelectionOverlay {
method _updateTextSelectionOverlayVisibilities (line 1868) | void _updateTextSelectionOverlayVisibilities()
method showHandles (line 1895) | void showHandles()
method hideHandles (line 1901) | void hideHandles()
method showToolbar (line 1904) | void showToolbar()
method showSpellCheckSuggestionsToolbar (line 1927) | void showSpellCheckSuggestionsToolbar(
method showMagnifier (line 1940) | void showMagnifier(Offset positionToShow)
method updateMagnifier (line 1955) | void updateMagnifier(Offset positionToShow)
method hideMagnifier (line 1970) | void hideMagnifier()
method update (line 1983) | void update(TextEditingValue newValue)
method _updateSelectionOverlay (line 1996) | void _updateSelectionOverlay()
method updateForScroll (line 2020) | void updateForScroll()
method hide (line 2055) | void hide()
method hideToolbar (line 2058) | void hideToolbar()
method dispose (line 2061) | void dispose()
method _getStartGlyphHeight (line 2076) | double _getStartGlyphHeight()
method _getEndGlyphHeight (line 2102) | double _getEndGlyphHeight()
method _buildMagnifier (line 2122) | MagnifierInfo _buildMagnifier({
method _handleSelectionEndHandleDragStart (line 2196) | void _handleSelectionEndHandleDragStart(DragStartDetails details)
method _getHandleDy (line 2252) | double _getHandleDy(double dragDy, double handleDy)
method _handleSelectionEndHandleDragUpdate (line 2261) | void _handleSelectionEndHandleDragUpdate(DragUpdateDetails details)
method _handleSelectionStartHandleDragStart (line 2371) | void _handleSelectionStartHandleDragStart(DragStartDetails details)
method _handleSelectionStartHandleDragUpdate (line 2410) | void _handleSelectionStartHandleDragUpdate(DragUpdateDetails details)
method _handleAnyDragEnd (line 2512) | void _handleAnyDragEnd(DragEndDetails details)
method _handleSelectionHandleChanged (line 2540) | void _handleSelectionHandleChanged(TextSelection newSelection)
method _chooseType (line 2547) | TextSelectionHandleType _chooseType(
class SelectionOverlay (line 2567) | class SelectionOverlay {
method showMagnifier (line 2672) | void showMagnifier(MagnifierInfo initialMagnifierInfo)
method hideMagnifier (line 2711) | void hideMagnifier()
method _handleStartHandleDragStart (line 2781) | void _handleStartHandleDragStart(DragStartDetails details)
method _handleStartHandleDragUpdate (line 2797) | void _handleStartHandleDragUpdate(DragUpdateDetails details)
method _handleStartHandleDragEnd (line 2830) | void _handleStartHandleDragEnd(DragEndDetails details)
method _handleEndHandleDragStart (line 2903) | void _handleEndHandleDragStart(DragStartDetails details)
method _handleEndHandleDragUpdate (line 2919) | void _handleEndHandleDragUpdate(DragUpdateDetails details)
method _handleEndHandleDragEnd (line 2952) | void _handleEndHandleDragEnd(DragEndDetails details)
method showHandles (line 3108) | void showHandles()
method hideHandles (line 3142) | void hideHandles()
method showToolbar (line 3155) | void showToolbar({BuildContext? context, WidgetBuilder? contextMenuBui...
method showSpellCheckSuggestionsToolbar (line 3189) | void showSpellCheckSuggestionsToolbar({
method markNeedsBuild (line 3213) | void markNeedsBuild()
method hide (line 3253) | void hide()
method hideToolbar (line 3268) | void hideToolbar()
method dispose (line 3282) | void dispose()
method _buildStartHandle (line 3288) | Widget _buildStartHandle(BuildContext context)
method _buildEndHandle (line 3314) | Widget _buildEndHandle(BuildContext context)
method _buildToolbar (line 3344) | Widget _buildToolbar(BuildContext context)
method updateMagnifier (line 3409) | void updateMagnifier(MagnifierInfo magnifierInfo)
class _SelectionToolbarWrapper (line 3424) | class _SelectionToolbarWrapper extends StatefulWidget {
method createState (line 3438) | State<_SelectionToolbarWrapper> createState()
class _SelectionToolbarWrapperState (line 3442) | class _SelectionToolbarWrapperState extends State<_SelectionToolbarWrapper>
method initState (line 3448) | void initState()
method didUpdateWidget (line 3461) | void didUpdateWidget(_SelectionToolbarWrapper oldWidget)
method dispose (line 3472) | void dispose()
method _toolbarVisibilityChanged (line 3478) | void _toolbarVisibilityChanged()
method build (line 3487) | Widget build(BuildContext context)
class _SelectionHandleOverlay (line 3506) | class _SelectionHandleOverlay extends StatefulWidget {
method createState (line 3533) | State<_SelectionHandleOverlay> createState()
class _SelectionHandleOverlayState (line 3537) | class _SelectionHandleOverlayState extends State<_SelectionHandleOverlay>
method initState (line 3543) | void initState()
method _handleVisibilityChanged (line 3555) | void _handleVisibilityChanged()
method _getHandleRect (line 3569) | Rect _getHandleRect(
method didUpdateWidget (line 3580) | void didUpdateWidget(_SelectionHandleOverlay oldWidget)
method dispose (line 3588) | void dispose()
method build (line 3595) | Widget build(BuildContext context)
FILE: lib/common/widgets/flutter/vertical_tabs.dart
class VerticalTab (line 34) | class VerticalTab extends StatelessWidget {
method _buildLabelText (line 107) | Widget _buildLabelText()
method build (line 112) | Widget build(BuildContext context)
method debugFillProperties (line 147) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class _TabStyle (line 153) | class _TabStyle extends AnimatedWidget {
method _resolveWithLabelColor (line 175) | WidgetStateColor _resolveWithLabelColor(
method build (line 223) | Widget build(BuildContext context)
type _LayoutCallback (line 275) | typedef _LayoutCallback =
class _TabLabelBarRenderer (line 282) | class _TabLabelBarRenderer extends RenderFlex {
method performLayout (line 296) | void performLayout()
method onPerformLayout (line 312) | onPerformLayout(yOffsets, .ltr, size.height);
method createRenderObject (line 334) | RenderFlex createRenderObject(BuildContext context)
method updateRenderObject (line 347) | void updateRenderObject(
method _indexChangeProgress (line 356) | double _indexChangeProgress(TabController controller)
method _DividerPainter (line 372) | class _DividerPainter extends CustomPainter {
method paint (line 379) | void paint(Canvas canvas, Size size)
method shouldRepaint (line 394) | bool shouldRepaint(_DividerPainter oldDelegate)
class _IndicatorPainter (line 400) | class _IndicatorPainter extends CustomPainter {
method markNeedsPaint (line 444) | void markNeedsPaint()
method dispose (line 448) | void dispose()
method saveTabOffsets (line 453) | void saveTabOffsets(List<double>? tabOffsets, TextDirection? textDirec...
method centerOf (line 462) | double centerOf(int tabIndex)
method indicatorRect (line 471) | Rect indicatorRect(Size tabBarSize, int tabIndex)
method paint (line 518) | void paint(Canvas canvas, Size size)
method _applyLinearEffect (line 556) | Rect? _applyLinearEffect({required Size size, required double value})
method decelerateInterpolation (line 567) | double decelerateInterpolation(double fraction)
method accelerateInterpolation (line 572) | double accelerateInterpolation(double fraction)
method _applyElasticEffect (line 578) | Rect? _applyElasticEffect({required Size size, required double value})
method shouldRepaint (line 666) | bool shouldRepaint(_IndicatorPainter old)
class _ChangeAnimation (line 676) | class _ChangeAnimation extends Animation<double>
method removeStatusListener (line 686) | void removeStatusListener(AnimationStatusListener listener)
method removeListener (line 693) | void removeListener(VoidCallback listener)
class _DragAnimation (line 703) | class _DragAnimation extends Animation<double>
method removeStatusListener (line 714) | void removeStatusListener(AnimationStatusListener listener)
method removeListener (line 721) | void removeListener(VoidCallback listener)
class _TabBarScrollPosition (line 744) | class _TabBarScrollPosition extends ScrollPositionWithSingleContext {
method applyContentDimensions (line 760) | bool applyContentDimensions(double minScrollExtent, double maxScrollEx...
method markNeedsPixelsCorrection (line 786) | void markNeedsPixelsCorrection()
class _TabBarScrollController (line 793) | class _TabBarScrollController extends ScrollController {
method createScrollPosition (line 799) | ScrollPosition createScrollPosition(
class VerticalTabBar (line 862) | class VerticalTabBar extends StatefulWidget {
method createState (line 1385) | State<VerticalTabBar> createState()
class _VerticalTabBarState (line 1388) | class _VerticalTabBarState extends State<VerticalTabBar> {
method initState (line 1399) | void initState()
method _getIndicator (line 1421) | Decoration _getIndicator(TabBarIndicatorSize indicatorSize)
method _updateTabController (line 1492) | void _updateTabController()
method _initIndicatorPainter (line 1524) | void _initIndicatorPainter()
method didChangeDependencies (line 1572) | void didChangeDependencies()
method didUpdateWidget (line 1579) | void didUpdateWidget(VerticalTabBar oldWidget)
method dispose (line 1615) | void dispose()
method _tabScrollOffset (line 1631) | double _tabScrollOffset(
method _tabCenteredScrollOffset (line 1668) | double _tabCenteredScrollOffset(int index)
method _initialScrollOffset (line 1678) | double _initialScrollOffset(
method _scrollToCurrentIndex (line 1691) | void _scrollToCurrentIndex()
method _scrollToControllerValue (line 1700) | void _scrollToControllerValue()
method _handleTabControllerAnimationTick (line 1728) | void _handleTabControllerAnimationTick()
method _handleTabControllerTick (line 1737) | void _handleTabControllerTick()
method _saveTabOffsets (line 1751) | void _saveTabOffsets(
method _handleTap (line 1760) | void _handleTap(int index)
method _buildStyledTab (line 1766) | Widget _buildStyledTab(
method _debugScheduleCheckHasValidTabsCount (line 1785) | bool _debugScheduleCheckHasValidTabsCount()
method _debugTabAlignmentIsValid (line 1808) | bool _debugTabAlignmentIsValid(TabAlignment tabAlignment)
method build (line 1828) | Widget build(BuildContext context)
class _TabsDefaultsM2 (line 2089) | class _TabsDefaultsM2 extends TabBarThemeData {
class _TabsPrimaryDefaultsM3 (line 2132) | class _TabsPrimaryDefaultsM3 extends TabBarThemeData {
method indicatorWeight (line 2198) | double indicatorWeight(TabBarIndicatorSize indicatorSize)
class _TabsSecondaryDefaultsM3 (line 2211) | class _TabsSecondaryDefaultsM3 extends TabBarThemeData {
class VerticalUnderlineTabIndicator (line 2292) | class VerticalUnderlineTabIndicator extends Decoration {
method lerpFrom (line 2318) | Decoration? lerpFrom(Decoration? a, double t)
method lerpTo (line 2329) | Decoration? lerpTo(Decoration? b, double t)
method createBoxPainter (line 2340) | BoxPainter createBoxPainter([VoidCallback? onChanged])
method _indicatorRectFor (line 2344) | Rect _indicatorRectFor(Rect rect, TextDirection textDirection)
method getClipPath (line 2356) | Path getClipPath(Rect rect, TextDirection textDirection)
class _VerticalUnderlinePainter (line 2366) | class _VerticalUnderlinePainter extends BoxPainter {
method paint (line 2377) | void paint(Canvas canvas, Offset offset, ImageConfiguration configurat...
FILE: lib/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart
class CustomHorizontalDragGestureRecognizer (line 4) | class CustomHorizontalDragGestureRecognizer
method addAllowedPointer (line 20) | void addAllowedPointer(PointerDownEvent event)
method hasSufficientGlobalDistanceToAccept (line 26) | bool hasSufficientGlobalDistanceToAccept(
function _computeHitSlop (line 42) | bool _computeHitSlop(
function _calc (line 63) | bool _calc(Offset initialPosition, Offset lastPosition)
FILE: lib/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart
function addPointer (line 8) | void addPointer(PointerDownEvent event)
type IsBoundaryAllowed (line 17) | typedef IsBoundaryAllowed =
class ImageHorizontalDragGestureRecognizer (line 20) | class ImageHorizontalDragGestureRecognizer
method hasSufficientGlobalDistanceToAccept (line 32) | bool hasSufficientGlobalDistanceToAccept(
method dispose (line 44) | void dispose()
FILE: lib/common/widgets/gesture/immediate_tap_gesture_recognizer.dart
class ImmediateTapGestureRecognizer (line 4) | class ImmediateTapGestureRecognizer extends OneSequenceGestureRecognizer {
method _defaultButtonAcceptBehavior (line 15) | bool _defaultButtonAcceptBehavior(int buttons)
method isPointerPanZoomAllowed (line 33) | bool isPointerPanZoomAllowed(PointerPanZoomStartEvent event)
method isPointerAllowed (line 36) | bool isPointerAllowed(PointerDownEvent event)
method addAllowedPointer (line 40) | void addAllowedPointer(PointerDownEvent event)
method handleEvent (line 48) | void handleEvent(PointerEvent event)
method _handleTapDown (line 67) | void _handleTapDown(PointerDownEvent event)
method _handlePointerMove (line 81) | void _handlePointerMove(PointerMoveEvent event)
method _handlePointerUp (line 88) | void _handlePointerUp(PointerUpEvent event)
method _handleTapUp (line 94) | void _handleTapUp(PointerUpEvent event)
method _cancelGesture (line 111) | void _cancelGesture(String reason)
method _reset (line 118) | void _reset([int? pointer])
method acceptGesture (line 126) | void acceptGesture(int pointer)
method rejectGesture (line 139) | void rejectGesture(int pointer)
method didStopTrackingLastPointer (line 149) | void didStopTrackingLastPointer(int pointer)
method debugFillProperties (line 157) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
FILE: lib/common/widgets/gesture/mouse_interactive_viewer.dart
class MouseInteractiveViewer (line 16) | class MouseInteractiveViewer extends StatefulWidget {
method createState (line 74) | State<MouseInteractiveViewer> createState()
class _MouseInteractiveViewerState (line 77) | class _MouseInteractiveViewerState extends State<MouseInteractiveViewer>
method _matrixTranslate (line 133) | Matrix4 _matrixTranslate(Matrix4 matrix, Offset translation)
method _matrixScale (line 218) | Matrix4 _matrixScale(Matrix4 matrix, double scale)
method _matrixRotate (line 242) | Matrix4 _matrixRotate(Matrix4 matrix, double rotation, Offset focalPoint)
method _gestureIsSupported (line 253) | bool _gestureIsSupported(_GestureType? gestureType)
method _getGestureType (line 261) | _GestureType _getGestureType(ScaleUpdateDetails details)
method _onScaleStart (line 275) | void _onScaleStart(ScaleStartDetails details)
method _onScaleUpdate (line 302) | void _onScaleUpdate(ScaleUpdateDetails details)
method _onScaleEnd (line 395) | void _onScaleEnd(ScaleEndDetails details)
method _receivedPointerSignal (line 478) | void _receivedPointerSignal(PointerSignalEvent event)
method _handlePointerScrollEvent (line 558) | void _handlePointerScrollEvent(PointerScrollEvent event)
method _handleMouseWheelScale (line 584) | void _handleMouseWheelScale(
method _handleMouseWheelPanAsScale (line 611) | void _handleMouseWheelPanAsScale(
method _handleInertiaAnimation (line 632) | void _handleInertiaAnimation()
method _handleScaleAnimation (line 649) | void _handleScaleAnimation()
method _handleTransformation (line 674) | void _handleTransformation()
method _onPointerDown (line 678) | void _onPointerDown(PointerDownEvent event)
method initState (line 684) | void initState()
method didUpdateWidget (line 705) | void didUpdateWidget(MouseInteractiveViewer oldWidget)
method dispose (line 722) | void dispose()
method build (line 734) | Widget build(BuildContext context)
class _InteractiveViewerBuilt (line 757) | class _InteractiveViewerBuilt extends StatelessWidget {
method build (line 775) | Widget build(BuildContext context)
type _GestureType (line 801) | enum _GestureType { pan, scale, rotate }
function _getFinalTime (line 803) | double _getFinalTime(
function _getMatrixTranslation (line 811) | Offset _getMatrixTranslation(Matrix4 matrix)
function _transformViewport (line 816) | Quad _transformViewport(Matrix4 matrix, Rect viewport)
function _getAxisAlignedBoundingBoxWithRotation (line 834) | Quad _getAxisAlignedBoundingBoxWithRotation(Rect rect, double rotation)
function _exceedsBy (line 849) | Offset _exceedsBy(Quad boundary, Quad viewport)
function _round (line 878) | Offset _round(Offset offset)
function _alignAxis (line 885) | Offset _alignAxis(Offset offset, Axis axis)
function _getPanAxis (line 892) | Axis? _getPanAxis(Offset point1, Offset point2)
FILE: lib/common/widgets/gesture/tap_gesture_recognizer.dart
class NoDeadlineTapGestureRecognizer (line 3) | class NoDeadlineTapGestureRecognizer extends TapGestureRecognizer {
FILE: lib/common/widgets/image/cached_network_svg_image.dart
class CachedNetworkSVGImage (line 11) | class CachedNetworkSVGImage extends StatefulWidget {
method createState (line 69) | State<CachedNetworkSVGImage> createState()
method _generateKeyFromUrl (line 71) | String _generateKeyFromUrl(String url)
class _CachedNetworkSVGImageState (line 74) | class _CachedNetworkSVGImageState extends State<CachedNetworkSVGImage> {
method initState (line 87) | void initState()
method didChangeDependencies (line 96) | void didChangeDependencies()
method _loadImage (line 101) | Future<void> _loadImage()
method _setState (line 144) | void _setState()
method build (line 157) | Widget build(BuildContext context)
method _buildImage (line 165) | Widget? _buildImage()
method _buildPlaceholderWidget (line 173) | Widget _buildPlaceholderWidget()
method _buildErrorWidget (line 175) | Widget _buildErrorWidget()
method _buildSVGImage (line 177) | Widget? _buildSVGImage()
FILE: lib/common/widgets/image/image_save.dart
function imageSaveDialog (line 11) | void imageSaveDialog({
FILE: lib/common/widgets/image/network_img_layer.dart
class NetworkImgLayer (line 9) | class NetworkImgLayer extends StatelessWidget {
method build (line 43) | Widget build(BuildContext context)
method _buildImage (line 61) | Widget _buildImage(
method _placeholder (line 93) | Widget _placeholder(
FILE: lib/common/widgets/image_grid/image_grid_builder.dart
type ImageGridInfo (line 45) | typedef ImageGridInfo = ({int column, int row, Size size});
class ImageGridBuilder (line 47) | class ImageGridBuilder extends RenderObjectWidget {
method updateShouldRebuild (line 65) | bool updateShouldRebuild(ImageGridBuilder oldWidget)
method createElement (line 68) | ImageGridRenderObjectElement createElement()
method createRenderObject (line 72) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 81) | void updateRenderObject(BuildContext context, RenderImageGrid renderOb...
type OnShowMenu (line 89) | typedef OnShowMenu = Function(int index, Offset offset);
class RenderImageGrid (line 91) | class RenderImageGrid extends RenderBox
method _handleOnTap (line 130) | void _handleOnTap()
method _handleSecondaryTapUp (line 134) | void _handleSecondaryTapUp(TapUpDetails details)
method _handleLongPressStart (line 138) | void _handleLongPressStart(LongPressStartDetails details)
method setupParentData (line 143) | void setupParentData(RenderBox child)
method _updateCallback (line 152) | void _updateCallback(LayoutCallback<Constraints> value)
method layoutCallback (line 161) | void layoutCallback()
method performLayout (line 167) | void performLayout()
method paint (line 197) | void paint(PaintingContext context, Offset offset)
method hitTestChildren (line 202) | bool hitTestChildren(BoxHitTestResult result, {required Offset position})
method handleEvent (line 229) | void handleEvent(PointerEvent event, BoxHitTestEntry entry)
method dispose (line 240) | void dispose()
class ImageGridRenderObjectElement (line 258) | class ImageGridRenderObjectElement extends RenderObjectElement {
method insertRenderObjectChild (line 314) | void insertRenderObjectChild(RenderObject child, IndexedSlot<Element?>...
method moveRenderObjectChild (line 326) | void moveRenderObjectChild(
method removeRenderObjectChild (line 342) | void removeRenderObjectChild(RenderObject child, Object? slot)
method visitChildren (line 354) | void visitChildren(ElementVisitor visitor)
method forgetChild (line 364) | void forgetChild(Element child)
method _debugCheckHasAssociatedRenderObject (line 372) | bool _debugCheckHasAssociatedRenderObject(Element newChild)
method inflateWidget (line 399) | Element inflateWidget(Widget newWidget, Object? newSlot)
method mount (line 406) | void mount(Element? parent, Object? newSlot)
method update (line 427) | void update(ImageGridBuilder newWidget)
method markNeedsBuild (line 445) | void markNeedsBuild()
method performRebuild (line 455) | void performRebuild()
method unmount (line 469) | void unmount()
method _calcGridInfo (line 480) | ImageGridInfo _calcGridInfo(
method _rebuildWithConstraints (line 522) | void _rebuildWithConstraints(Constraints _)
method updateChildCallback (line 525) | void updateChildCallback()
function _reportException (line 602) | FlutterErrorDetails _reportException(
class _NullElement (line 619) | class _NullElement extends Element {
class _NullWidget (line 628) | class _NullWidget extends Widget {
method createElement (line 632) | Element createElement()
FILE: lib/common/widgets/image_grid/image_grid_view.dart
class ImageModel (line 38) | class ImageModel {
function _onTap (line 79) | void _onTap(BuildContext context, int index)
function _borderRadius (line 115) | BorderRadius _borderRadius(
function _showMenu (line 142) | void _showMenu(BuildContext context, int index, Offset offset)
function build (line 192) | Widget build(BuildContext context)
FILE: lib/common/widgets/image_viewer/gallery_viewer.dart
class GalleryViewer (line 49) | class GalleryViewer extends StatefulWidget {
method createState (line 70) | State<GalleryViewer> createState()
function _getActualUrl (line 99) | String _getActualUrl(String url)
function _initPlayer (line 105) | Future<void> _initPlayer()
function initState (line 123) | void initState()
function _onTransform (line 173) | Matrix4 _onTransform(double val)
function _updateMoveAnimation (line 190) | void _updateMoveAnimation()
function _onDragStart (line 199) | void _onDragStart(ScaleStartDetails details)
function _onDragUpdate (line 211) | void _onDragUpdate(ScaleUpdateDetails details)
function _onDragEnd (line 224) | void _onDragEnd(ScaleEndDetails details)
function dispose (line 241) | void dispose()
function _onPointerDown (line 264) | void _onPointerDown(PointerDownEvent event)
function build (line 271) | Widget build(BuildContext context)
function _itemBuilder (line 373) | Widget _itemBuilder(BuildContext context, int index)
FILE: lib/common/widgets/image_viewer/hero.dart
function fromHero (line 3) | Widget fromHero({
function createEndRectTween (line 12) | RectTween createEndRectTween(Rect? begin, Rect? end)
FILE: lib/common/widgets/image_viewer/hero_dialog_route.dart
class HeroDialogRoute (line 9) | class HeroDialogRoute<T> extends PageRoute<T> {
method buildTransitions (line 35) | Widget buildTransitions(
method buildPage (line 48) | Widget buildPage(
FILE: lib/common/widgets/image_viewer/image.dart
class Image (line 17) | class Image extends StatefulWidget {
method createState (line 287) | State<Image> createState()
method debugFillProperties (line 290) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
class _ImageState (line 357) | class _ImageState extends State<Image> with WidgetsBindingObserver {
method initState (line 372) | void initState()
method dispose (line 379) | void dispose()
method didChangeDependencies (line 390) | void didChangeDependencies()
method didUpdateWidget (line 407) | void didUpdateWidget(Image oldWidget)
method reassemble (line 422) | void reassemble()
method _resolveImage (line 427) | void _resolveImage()
method _getListener (line 444) | ImageStreamListener _getListener({bool recreateListener = false})
method _handleImageFrame (line 470) | void _handleImageFrame(ImageInfo imageInfo, bool synchronousCall)
method _handleImageChunk (line 484) | void _handleImageChunk(ImageChunkEvent event)
method _replaceImage (line 493) | void _replaceImage({required ImageInfo? info})
method _updateSourceStream (line 504) | void _updateSourceStream(ImageStream newStream)
method _listenToStream (line 531) | void _listenToStream()
method _stopListeningToStream (line 542) | void _stopListeningToStream({bool keepStreamAlive = false})
method build (line 588) | Widget build(BuildContext context)
method debugFillProperties (line 659) | void debugFillProperties(DiagnosticPropertiesBuilder description)
FILE: lib/common/widgets/image_viewer/loading_indicator.dart
class LoadingIndicator (line 26) | class LoadingIndicator extends LeafRenderObjectWidget {
method createRenderObject (line 37) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 45) | void updateRenderObject(
class RenderLoadingIndicator (line 55) | class RenderLoadingIndicator extends RenderBox {
method performLayout (line 79) | void performLayout()
method paint (line 84) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/image_viewer/viewer.dart
class Viewer (line 35) | class Viewer extends StatefulWidget {
method createState (line 68) | State<StatefulWidget> createState()
function _listener (line 112) | void _listener()
function _reset (line 119) | void _reset()
function _initSize (line 124) | void _initSize()
function dispose (line 173) | void dispose()
function _toScene (line 181) | Offset _toScene(Offset localFocalPoint)
function _clampPosition (line 185) | Offset _clampPosition(Offset offset, double scale)
function _matrixTranslate (line 213) | Offset _matrixTranslate(Offset translation)
function _onDoubleTapDown (line 220) | void _onDoubleTapDown(TapDownDetails details)
function _onDoubleTap (line 224) | void _onDoubleTap()
function _handleDoubleTap (line 234) | void _handleDoubleTap()
function _calc (line 262) | static bool _calc(Offset initialPosition, Offset lastPosition)
function _onScaleStart (line 267) | void _onScaleStart(ScaleStartDetails details)
function _onScaleUpdate (line 303) | void _onScaleUpdate(ScaleUpdateDetails details)
function _onScaleEnd (line 333) | void _onScaleEnd(ScaleEndDetails details)
function build (line 400) | Widget build(BuildContext context)
FILE: lib/common/widgets/keep_alive_wrapper.dart
class KeepAliveWrapper (line 3) | class KeepAliveWrapper extends StatefulWidget {
method createState (line 14) | State<KeepAliveWrapper> createState()
class _KeepAliveWrapperState (line 17) | class _KeepAliveWrapperState extends State<KeepAliveWrapper>
method build (line 20) | Widget build(BuildContext context)
method didUpdateWidget (line 26) | void didUpdateWidget(KeepAliveWrapper oldWidget)
FILE: lib/common/widgets/loading_widget.dart
class LoadingWidget (line 5) | class LoadingWidget extends StatelessWidget {
method build (line 17) | Widget build(BuildContext context)
FILE: lib/common/widgets/loading_widget/http_error.dart
class HttpError (line 4) | class HttpError extends StatelessWidget {
method build (line 21) | Widget build(BuildContext context)
FILE: lib/common/widgets/loading_widget/loading_widget.dart
function scrollErrorWidget (line 15) | Widget scrollErrorWidget({
FILE: lib/common/widgets/loading_widget/m3e_loading_indicator.dart
class M3ELoadingIndicator (line 26) | class M3ELoadingIndicator extends StatefulWidget {
method createState (line 30) | State<M3ELoadingIndicator> createState()
class _M3ELoadingIndicatorState (line 33) | class _M3ELoadingIndicatorState extends State<M3ELoadingIndicator>
method _statusListener (line 73) | void _statusListener(AnimationStatus status)
method _startAnimation (line 79) | void _startAnimation()
method initState (line 89) | void initState()
method dispose (line 102) | void dispose()
method _calcAngle (line 109) | double _calcAngle(double progress)
method build (line 124) | Widget build(BuildContext context)
class _M3ELoadingIndicator (line 141) | class _M3ELoadingIndicator extends LeafRenderObjectWidget {
method createRenderObject (line 158) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 168) | void updateRenderObject(
class _RenderM3ELoadingIndicator (line 180) | class _RenderM3ELoadingIndicator extends RenderBox {
method performLayout (line 227) | void performLayout()
method paint (line 232) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/marquee.dart
class MarqueeText (line 6) | class MarqueeText extends StatelessWidget {
method build (line 23) | Widget build(BuildContext context)
class Marquee (line 38) | abstract class Marquee extends SingleChildRenderObjectWidget {
method updateRenderObject (line 56) | void updateRenderObject(
class NormalMarquee (line 72) | class NormalMarquee extends Marquee {
method createRenderObject (line 84) | RenderObject createRenderObject(BuildContext context)
class BounceMarquee (line 93) | class BounceMarquee extends Marquee {
method createRenderObject (line 105) | RenderObject createRenderObject(BuildContext context)
class MarqueeRender (line 114) | abstract class MarqueeRender extends RenderBox
method attach (line 185) | void attach(PipelineOwner owner)
method dispose (line 191) | void dispose()
method performLayout (line 201) | void performLayout()
method paintCenter (line 238) | void paintCenter(PaintingContext context, Offset offset)
method _onTick (line 246) | void _onTick(Duration elapsed)
method updateSize (line 252) | void updateSize()
class _BounceMarqueeRender (line 255) | class _BounceMarqueeRender extends MarqueeRender {
method updateSize (line 265) | void updateSize()
method paint (line 272) | void paint(PaintingContext context, Offset offset)
method paintChild (line 277) | void paintChild()
class _NormalMarqueeRender (line 297) | class _NormalMarqueeRender extends MarqueeRender {
method updateSize (line 307) | void updateSize()
method paint (line 318) | void paint(PaintingContext context, Offset offset)
method paintChild (line 323) | void paintChild()
class _MarqueeSimulation (line 357) | class _MarqueeSimulation extends Simulation {
method x (line 371) | double x(double timeInSeconds)
method dx (line 382) | double dx(double timeInSeconds)
method isDone (line 385) | bool isDone(double timeInSeconds)
method copyWith (line 387) | _MarqueeSimulation copyWith({
class ContextSingleTicker (line 400) | class ContextSingleTicker implements TickerProvider {
method initStart (line 407) | void initStart()
method startIfNeeded (line 413) | void startIfNeeded()
method initIfNeeded (line 421) | void initIfNeeded(TickerCallback onTick)
method createTicker (line 429) | Ticker createTicker(TickerCallback onTick)
method reset (line 458) | void reset()
method cancel (line 464) | void cancel()
method updateTicker (line 473) | void updateTicker()
FILE: lib/common/widgets/only_layout_widget.dart
type LayoutCallback (line 5) | typedef LayoutCallback = void Function(Size size);
class OnlyLayoutWidget (line 7) | class OnlyLayoutWidget extends SingleChildRenderObjectWidget {
method createRenderObject (line 17) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 21) | void updateRenderObject(
class NoRenderLayoutBox (line 30) | class NoRenderLayoutBox extends RenderProxyBox {
method performLayout (line 36) | void performLayout()
method paint (line 44) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/pair.dart
class Pair (line 1) | class Pair<T, R> {
class Triple (line 10) | class Triple<T, R, S> {
FILE: lib/common/widgets/pendant_avatar.dart
class PendantAvatar (line 10) | class PendantAvatar extends StatelessWidget {
method build (line 45) | Widget build(BuildContext context)
method _buildAvatar (line 115) | Widget _buildAvatar(ColorScheme colorScheme, bool isMemberAvatar)
method _buildBadge (line 142) | Widget _buildBadge(
FILE: lib/common/widgets/player_bar.dart
class PlayerBar (line 28) | class PlayerBar extends MultiChildRenderObjectWidget {
method createRenderObject (line 35) | RenderObject createRenderObject(BuildContext context)
class RenderBottomBar (line 40) | class RenderBottomBar extends RenderBox
method setupParentData (line 45) | void setupParentData(RenderBox child)
method performLayout (line 54) | void performLayout()
method paint (line 93) | void paint(PaintingContext context, Offset offset)
method hitTestChildren (line 107) | bool hitTestChildren(BoxHitTestResult result, {required Offset position})
method applyPaintTransform (line 118) | void applyPaintTransform(RenderBox child, Matrix4 transform)
FILE: lib/common/widgets/progress_bar/audio_video_progress_bar.dart
class ProgressBar (line 21) | class ProgressBar extends LeafRenderObjectWidget {
method createRenderObject (line 174) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 196) | void updateRenderObject(
method debugFillProperties (line 220) | void debugFillProperties(DiagnosticPropertiesBuilder properties)
type ThumbDragStartCallback (line 275) | typedef ThumbDragStartCallback = void Function(ThumbDragDetails details);
type ThumbDragUpdateCallback (line 279) | typedef ThumbDragUpdateCallback = void Function(ThumbDragDetails details);
class ThumbDragDetails (line 282) | class ThumbDragDetails {
method toString (line 299) | String toString()
class _EagerHorizontalDragGestureRecognizer (line 309) | class _EagerHorizontalDragGestureRecognizer
method addAllowedPointer (line 312) | void addAllowedPointer(PointerDownEvent event)
class RenderProgressBar (line 321) | class RenderProgressBar extends RenderBox implements MouseTrackerAnnotat...
method dispose (line 370) | void dispose()
method _onDragStart (line 389) | void _onDragStart(DragStartDetails details)
method _onDragUpdate (line 404) | void _onDragUpdate(DragUpdateDetails details)
method _onDragEnd (line 418) | void _onDragEnd(DragEndDetails details)
method _finishDrag (line 427) | void _finishDrag()
method _currentThumbDuration (line 432) | Duration _currentThumbDuration()
method _updateThumbPosition (line 441) | void _updateThumbPosition(Offset localPosition)
method _clampDuration (line 500) | Duration _clampDuration(Duration value)
method computeMinIntrinsicWidth (line 633) | double computeMinIntrinsicWidth(double height)
method computeMaxIntrinsicWidth (line 636) | double computeMaxIntrinsicWidth(double height)
method computeMinIntrinsicHeight (line 639) | double computeMinIntrinsicHeight(double width)
method computeMaxIntrinsicHeight (line 642) | double computeMaxIntrinsicHeight(double width)
method hitTestSelf (line 646) | bool hitTestSelf(Offset position)
method handleEvent (line 649) | void handleEvent(PointerEvent event, BoxHitTestEntry entry)
method performLayout (line 657) | void performLayout()
method computeDryLayout (line 662) | Size computeDryLayout(BoxConstraints constraints)
method _heightWhenNoLabels (line 668) | double _heightWhenNoLabels()
method paint (line 676) | void paint(PaintingContext context, Offset offset)
method _drawProgressBarWithoutLabels (line 690) | void _drawProgressBarWithoutLabels(Canvas canvas)
method _drawProgressBar (line 696) | void _drawProgressBar(Canvas canvas, Offset offset, Size localSize)
method _drawBaseBar (line 707) | void _drawBaseBar(Canvas canvas, Size localSize)
method _drawBufferedBar (line 716) | void _drawBufferedBar(Canvas canvas, Size localSize)
method _drawCurrentProgressBar (line 725) | void _drawCurrentProgressBar(Canvas canvas, Size localSize)
method _drawBar (line 734) | void _drawBar({
method _drawThumb (line 752) | void _drawThumb(Canvas canvas, Size localSize)
method _proportionOfTotal (line 768) | double _proportionOfTotal(Duration duration)
method describeSemanticsConfiguration (line 776) | void describeSemanticsConfiguration(SemanticsConfiguration config)
method increaseAction (line 800) | void increaseAction()
method decreaseAction (line 808) | void decreaseAction()
FILE: lib/common/widgets/progress_bar/segment_progress_bar.dart
class BaseSegment (line 27) | @immutable
class Segment (line 36) | @immutable
class ViewPointSegment (line 62) | @immutable
class SegmentProgressBar (line 96) | class SegmentProgressBar extends BaseSegmentProgressBar<Segment> {
method createRenderObject (line 104) | RenderObject createRenderObject(BuildContext context)
class RenderProgressBar (line 112) | class RenderProgressBar extends BaseRenderProgressBar<Segment> {
method paint (line 119) | void paint(PaintingContext context, Offset offset)
class ViewPointSegmentProgressBar (line 145) | class ViewPointSegmentProgressBar
method createRenderObject (line 157) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 166) | void updateRenderObject(
function performLayout (line 191) | void performLayout()
function _getParagraph (line 198) | ui.Paragraph _getParagraph(String title, double size)
FILE: lib/common/widgets/progress_bar/video_progress_indicator.dart
class VideoProgressIndicator (line 20) | class VideoProgressIndicator extends LeafRenderObjectWidget {
method createRenderObject (line 37) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 48) | void updateRenderObject(
function performLayout (line 115) | void performLayout()
function paint (line 120) | void paint(PaintingContext context, Offset offset)
FILE: lib/common/widgets/radio_widget.dart
class RadioWidget (line 4) | class RadioWidget<T> extends StatefulWidget {
method createState (line 21) | State<RadioWidget<T>> createState()
function dispose (line 42) | void dispose()
function didChangeDependencies (line 49) | void didChangeDependencies()
function _handleTap (line 55) | void _handleTap()
function build (line 64) | Widget build(BuildContext context)
FILE: lib/common/widgets/route_aware_mixin.dart
function initState (line 11) | void initState()
function dispose (line 17) | void dispose()
FILE: lib/common/widgets/scale_app.dart
class ScaledWidgetsFlutterBinding (line 13) | class ScaledWidgetsFlutterBinding extends WidgetsFlutterBinding {
method ensureInitialized (line 35) | WidgetsBinding ensureInitialized({double scaleFactor = 1.0})
method createViewConfigurationFor (line 45) | ViewConfiguration createViewConfigurationFor(RenderView renderView)
method initInstances (line 60) | void initInstances()
method unlocked (line 66) | void unlocked()
method _handlePointerDataPacket (line 78) | void _handlePointerDataPacket(PointerDataPacket packet)
method _devicePixelRatioForView (line 100) | double _devicePixelRatioForView(int viewId)
method cancelPointer (line 107) | void cancelPointer(int pointer)
method _flushPointerEventQueue (line 114) | void _flushPointerEventQueue()
FILE: lib/common/widgets/scroll_behavior.dart
class CustomScrollBehavior (line 4) | class CustomScrollBehavior extends MaterialScrollBehavior {
method buildScrollbar (line 8) | Widget buildScrollbar(
FILE: lib/common/widgets/scroll_physics.dart
function tabBarView (line 6) | Widget tabBarView({
function _customSpringDescription (line 16) | SpringDescription _customSpringDescription()
class CustomTabBarViewScrollPhysics (line 29) | class CustomTabBarViewScrollPhysics extends ScrollPhysics {
method applyTo (line 33) | CustomTabBarViewScrollPhysics applyTo(ScrollPhysics? ancestor)
class ReloadScrollPhysics (line 47) | class ReloadScrollPhysics extends AlwaysScrollableScrollPhysics {
method applyTo (line 53) | ReloadScrollPhysics applyTo(ScrollPhysics? ancestor)
method adjustPositionForNewDimensions (line 61) | double adjustPositionForNewDimensions({
FILE: lib/common/widgets/select_mask.dart
function selectMask (line 4) | Widget selectMask(
FILE: lib/common/widgets/self_sized_horizontal_list.dart
class SelfSizedHorizontalList (line 4) | class SelfSizedHorizontalList extends StatefulWidget {
method createState (line 21) | State<SelfSizedHorizontalList> createState()
class _SelfSizedHorizontalListState (line 25) | class _SelfSizedHorizontalListState extends State<SelfSizedHorizontalLis...
method build (line 29) | Widget build(BuildContext context)
FILE: lib/common/widgets/sliver/sliver_floating_header.dart
class SliverFloatingHeaderWidget (line 27) | class SliverFloatingHeaderWidget extends SingleChildRenderObjectWidget {
method createRenderObject (line 37) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 41) | void updateRenderObject(
class RenderSliverFloatingHeader (line 49) | class RenderSliverFloatingHeader extends RenderSliverSingleBoxAdapter {
method performLayout (line 74) | void performLayout()
method childMainAxisPosition (line 124) | double childMainAxisPosition(covariant RenderObject child)
method applyPaintTransform (line 129) | void applyPaintTransform(RenderObject child, Matrix4 transform)
method paint (line 135) | void paint(PaintingContext context, Offset offset)
method hitTestSelf (line 153) | bool hitTestSelf({
FILE: lib/common/widgets/sliver/sliver_pinned_dynamic_header.dart
class SliverPinnedDynamicHeader (line 26) | class SliverPinnedDynamicHeader extends SingleChildRenderObjectWidget {
method createRenderObject (line 38) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 46) | void updateRenderObject(
class RenderSliverPinnedDynamicHeader (line 56) | class RenderSliverPinnedDynamicHeader extends RenderSliverSingleBoxAdapt...
method performLayout (line 81) | void performLayout()
method paint (line 115) | void paint(PaintingContext context, Offset offset)
method childMainAxisPosition (line 122) | double childMainAxisPosition(RenderBox child)
FILE: lib/common/widgets/sliver/sliver_pinned_header.dart
class SliverPinnedHeader (line 26) | class SliverPinnedHeader extends SingleChildRenderObjectWidget {
method createRenderObject (line 36) | RenderObject createRenderObject(BuildContext context)
method updateRenderObject (line 40) | void updateRenderObject(
class RenderSliverPinnedHeader (line 48) | class RenderSliverPinnedHeader extends RenderSliverSingleBoxAdapter {
method performLayout (line 63) | void performLayout()
method paint (line 92) | void paint(PaintingContext context, Offset offset)
method childMainAxisPosition (line 111) | double childMainAxisPosition(RenderBox child)
method hitTestSelf (line 114) | bool hitTestSelf({
FILE: lib/common/widgets/sliver_wrap.dart
class SliverFixedWrap (line 6) | class SliverFixedWrap extends SliverMultiBoxAdaptorWidget {
method createElement (line 20) | SliverWrapElement createElement()
method createRenderObject (line 24) | RenderSliverFixedWrap createRenderObject(BuildContext context)
method updateRenderObject (line 34) | void updateRenderObject(
class SliverWrapParentData (line 45) | class SliverWrapParentData extends SliverMultiBoxAdaptorParentData {
method toString (line 49) | String toString()
class _Row (line 52) | class _Row {
class RenderSliverFixedWrap (line 64) | class RenderSliverFixedWrap extends RenderSliverMultiBoxAdaptor {
method markRowsDirty (line 104) | void markRowsDirty()
method setupParentData (line 109) | void setupParentData(RenderObject child)
method childCrossAxisPosition (line 116) | double childCrossAxisPosition(RenderBox child)
method _childCrossExtent (line 120) | double _childCrossExtent(RenderBox child)
method _getOrCreateChildAtIndex (line 128) | RenderBox _getOrCreateChildAtIndex(
method _buildNextRow (line 170) | bool _buildNextRow(int start, BoxConstraints constraints)
method performLayout (line 199) | void performLayout()
method dispose (line 308) | void dispose()
class SliverWrapElement (line 314) | class SliverWrapElement extends SliverMultiBoxAdaptorElement {
method performRebuild (line 318) | void performRebuild()
function toFixedConstraints (line 325) | BoxConstraints toFixedConstraints(double mainAxisExtent)
FILE: lib/common/widgets/stat/stat.dart
class StatWidget (line 5) | class StatWidget extends StatelessWidget {
method build (line 20) | Widget build(BuildContext context)
FILE: lib/common/widgets/stateful_builder.dart
class StatefulBuilder (line 3) | class StatefulBuilder extends StatefulWidget {
method createState (line 18) | State<StatefulBuilder> createState()
class _StatefulBuilderState (line 21) | class _StatefulBuilderState extends State<StatefulBuilder> {
method initState (line 23) | void initState()
method dispose (line 29) | void dispose()
method build (line 35) | Widget build(BuildContext context)
FILE: lib/common/widgets/time_picker.dart
function showTimePicker (line 3) | Future<material.TimeOfDay?> showTimePicker({
FILE: lib/common/widgets/video_card/video_card_h.dart
class VideoCardH (line 23) | class VideoCardH extends StatelessWidget {
method build (line 37) | Widget build(BuildContext context)
method onLongPress (line 62) | void onLongPress()
method content (line 216) | Widget content(BuildContext context)
FILE: lib/common/widgets/video_card/video_card_v.dart
function onPushDetail (line 34) | Future<void> onPushDetail(String heroTag)
function build (line 71) | Widget build(BuildContext context)
function onLongPress (line 72) | void onLongPress()
function content (line 140) | Widget content(BuildContext context)
function videoStat (line 218) | Widget videoStat(BuildContext context, ThemeData theme)
FILE: lib/common/widgets/video_popup_menu.dart
class _VideoCustomAction (line 19) | class _VideoCustomAction {
function build (line 41) | Widget build(BuildContext context)
function actionButton (line 150) | Widget actionButton(Reason? r, Reason? f)
FILE: lib/common/widgets/view_safe_area.dart
class ViewSafeArea (line 3) | class ViewSafeArea extends StatelessWidget {
method build (line 18) | Widget build(BuildContext context)
FILE: lib/common/widgets/view_sliver_safe_area.dart
class ViewSliverSafeArea (line 3) | class ViewSliverSafeArea extends StatelessWidget {
method build (line 12) | Widget build(BuildContext context)
FILE: lib/grpc/audio.dart
class AudioGrpc (line 9) | abstract final class AudioGrpc {
method audioPlayUrl (line 10) | Future<LoadingState<PlayURLResp>> audioPlayUrl({
method audioPlayList (line 36) | Future<LoadingState<PlaylistResp>> audioPlayList({
method audioThumbUp (line 74) | Future<LoadingState<ThumbUpResp>> audioThumbUp({
method audioTripleLike (line 94) | Future<LoadingState<TripleLikeResp>> audioTripleLike({
method audioCoinAdd (line 112) | Future<LoadingState<CoinAddResp>> audioCoinAdd({
FILE: lib/grpc/bilibili/account/service/v1.pb.dart
class Color (line 24) | class Color extends $pb.GeneratedMessage {
method clone (line 54) | Color clone()
method copyWith (line 56) | Color copyWith(void Function(Color) updates)
method create (line 63) | Color create()
method createEmptyInstance (line 65) | Color createEmptyInstance()
method getDefault (line 67) | Color getDefault()
method hasColorDay (line 76) | $core.bool hasColorDay()
method clearColorDay (line 78) | void clearColorDay()
method hasColorNight (line 85) | $core.bool hasColorNight()
method clearColorNight (line 87) | void clearColorNight()
class ColorsInfo (line 90) | class ColorsInfo extends $pb.GeneratedMessage {
method clone (line 120) | ColorsInfo clone()
method copyWith (line 122) | ColorsInfo copyWith(void Function(ColorsInfo) updates)
method create (line 129) | ColorsInfo create()
method createEmptyInstance (line 131) | ColorsInfo createEmptyInstance()
method getDefault (line 133) | ColorsInfo getDefault()
class NameRender (line 144) | class NameRender extends $pb.GeneratedMessage {
method clone (line 176) | NameRender clone()
method copyWith (line 178) | NameRender copyWith(void Function(NameRender) updates)
method create (line 185) | NameRender create()
method createEmptyInstance (line 187) | NameRender createEmptyInstance()
method getDefault (line 189) | NameRender getDefault()
method hasRenderScheme (line 198) | $core.bool hasRenderScheme()
method clearRenderScheme (line 200) | void clearRenderScheme()
method hasColorsInfo (line 207) | $core.bool hasColorsInfo()
method clearColorsInfo (line 209) | void clearColorsInfo()
method ensureColorsInfo (line 211) | ColorsInfo ensureColorsInfo()
FILE: lib/grpc/bilibili/account/service/v1.pbenum.dart
class RenderSchemeEnum (line 17) | class RenderSchemeEnum extends $pb.ProtobufEnum {
method valueOf (line 30) | RenderSchemeEnum? valueOf($core.int value)
FILE: lib/grpc/bilibili/app/archive/middleware/v1.pb.dart
class PlayerArgs (line 24) | class PlayerArgs extends $pb.GeneratedMessage {
method clone (line 67) | PlayerArgs clone()
method copyWith (line 69) | PlayerArgs copyWith(void Function(PlayerArgs) updates)
method create (line 76) | PlayerArgs create()
method createEmptyInstance (line 78) | PlayerArgs createEmptyInstance()
method getDefault (line 80) | PlayerArgs getDefault()
method hasQn (line 89) | $core.bool hasQn()
method clearQn (line 91) | void clearQn()
method hasFnver (line 98) | $core.bool hasFnver()
method clearFnver (line 100) | void clearFnver()
method hasFnval (line 107) | $core.bool hasFnval()
method clearFnval (line 109) | void clearFnval()
method hasForceHost (line 116) | $core.bool hasForceHost()
method clearForceHost (line 118) | void clearForceHost()
method hasVoiceBalance (line 125) | $core.bool hasVoiceBalance()
method clearVoiceBalance (line 127) | void clearVoiceBalance()
method hasQnPolicy (line 134) | $core.bool hasQnPolicy()
method clearQnPolicy (line 136) | void clearQnPolicy()
FILE: lib/grpc/bilibili/app/archive/middleware/v1.pbenum.dart
class QnPolicy (line 17) | class QnPolicy extends $pb.ProtobufEnum {
method valueOf (line 30) | QnPolicy? valueOf($core.int value)
FILE: lib/grpc/bilibili/app/archive/v1.pb.dart
class Arc (line 20) | class Arc extends $pb.GeneratedMessage {
method clone (line 151) | Arc clone()
method copyWith (line 153) | Arc copyWith(void Function(Arc) updates)
method create (line 160) | Arc create()
method createEmptyInstance (line 162) | Arc createEmptyInstance()
method getDefault (line 164) | Arc getDefault()
method hasAid (line 173) | $core.bool hasAid()
method clearAid (line 175) | void clearAid()
method hasVideos (line 183) | $core.bool hasVideos()
method clearVideos (line 185) | void clearVideos()
method hasTypeId (line 193) | $core.bool hasTypeId()
method clearTypeId (line 195) | void clearTypeId()
method hasTypeName (line 203) | $core.bool hasTypeName()
method clearTypeName (line 205) | void clearTypeName()
method hasCopyright (line 217) | $core.bool hasCopyright()
method clearCopyright (line 219) | void clearCopyright()
method hasPic (line 227) | $core.bool hasPic()
method clearPic (line 229) | void clearPic()
method hasTitle (line 237) | $core.bool hasTitle()
method clearTitle (line 239) | void clearTitle()
method hasPubdate (line 247) | $core.bool hasPubdate()
method clearPubdate (line 249) | void clearPubdate()
method hasCtime (line 257) | $core.bool hasCtime()
method clearCtime (line 259) | void clearCtime()
method hasDesc (line 267) | $core.bool hasDesc()
method clearDesc (line 269) | void clearDesc()
method hasState (line 277) | $core.bool hasState()
method clearState (line 279) | void clearState()
method hasAccess (line 290) | $core.bool hasAccess()
method clearAccess (line 292) | void clearAccess()
method hasAttribute (line 300) | $core.bool hasAttribute()
method clearAttribute (line 302) | void clearAttribute()
method hasTag (line 310) | $core.bool hasTag()
method clearTag (line 312) | void clearTag()
method hasDuration (line 324) | $core.bool hasDuration()
method clearDuration (line 326) | void clearDuration()
method hasMissionId (line 334) | $core.bool hasMissionId()
method clearMissionId (line 336) | void clearMissionId()
method hasOrderId (line 344) | $core.bool hasOrderId()
method clearOrderId (line 346) | void clearOrderId()
method hasRedirectUrl (line 354) | $core.bool hasRedirectUrl()
method clearRedirectUrl (line 356) | void clearRedirectUrl()
method hasForward (line 363) | $core.bool hasForward()
method clearForward (line 365) | void clearForward()
method hasRights (line 373) | $core.bool hasRights()
method clearRights (line 375) | void clearRights()
method ensureRights (line 377) | Rights ensureRights()
method hasAuthor (line 385) | $core.bool hasAuthor()
method clearAuthor (line 387) | void clearAuthor()
method ensureAuthor (line 389) | Author ensureAuthor()
method hasStat (line 397) | $core.bool hasStat()
method clearStat (line 399) | void clearStat()
method ensureStat (line 401) | Stat ensureStat()
method hasReportResult (line 408) | $core.bool hasReportResult()
method clearReportResult (line 410) | void clearReportResult()
method hasDynamic (line 418) | $core.bool hasDynamic()
method clearDynamic (line 420) | void clearDynamic()
method hasFirstCid (line 428) | $core.bool hasFirstCid()
method clearFirstCid (line 430) | void clearFirstCid()
method hasDimension (line 438) | $core.bool hasDimension()
method clearDimension (line 440) | void clearDimension()
method ensureDimension (line 442) | Dimension ensureDimension()
method hasSeasonId (line 454) | $core.bool hasSeasonId()
method clearSeasonId (line 456) | void clearSeasonId()
method hasAttributeV2 (line 464) | $core.bool hasAttributeV2()
method clearAttributeV2 (line 466) | void clearAttributeV2()
method hasSeasonTheme (line 474) | $core.bool hasSeasonTheme()
method clearSeasonTheme (line 476) | void clearSeasonTheme()
method ensureSeasonTheme (line 478) | SeasonTheme ensureSeasonTheme()
method hasShortLinkV2 (line 486) | $core.bool hasShortLinkV2()
method clearShortLinkV2 (line 488) | void clearShortLinkV2()
method hasUpFromV2 (line 495) | $core.bool hasUpFromV2()
method clearUpFromV2 (line 497) | void clearUpFromV2()
method hasFirstFrame (line 504) | $core.bool hasFirstFrame()
method clearFirstFrame (line 506) | void clearFirstFrame()
class Author (line 510) | class Author extends $pb.GeneratedMessage {
method clone (line 543) | Author clone()
method copyWith (line 545) | Author copyWith(void Function(Author) updates)
method create (line 552) | Author create()
method createEmptyInstance (line 554) | Author createEmptyInstance()
method getDefault (line 556) | Author getDefault()
method hasMid (line 566) | $core.bool hasMid()
method clearMid (line 568) | void clearMid()
method hasName (line 576) | $core.bool hasName()
method clearName (line 578) | void clearName()
method hasFace (line 586) | $core.bool hasFace()
method clearFace (line 588) | void clearFace()
class Dimension (line 592) | class Dimension extends $pb.GeneratedMessage {
method clone (line 625) | Dimension clone()
method copyWith (line 627) | Dimension copyWith(void Function(Dimension) updates)
method create (line 634) | Dimension create()
method createEmptyInstance (line 636) | Dimension createEmptyInstance()
method getDefault (line 638) | Dimension getDefault()
method hasWidth (line 648) | $core.bool hasWidth()
method clearWidth (line 650) | void clearWidth()
method hasHeight (line 658) | $core.bool hasHeight()
method clearHeight (line 660) | void clearHeight()
method hasRotate (line 668) | $core.bool hasRotate()
method clearRotate (line 670) | void clearRotate()
class Page (line 674) | class Page extends $pb.GeneratedMessage {
method clone (line 729) | Page clone()
method copyWith (line 731) | Page copyWith(void Function(Page) updates)
method create (line 738) | Page create()
method createEmptyInstance (line 740) | Page createEmptyInstance()
method getDefault (line 742) | Page getDefault()
method hasCid (line 752) | $core.bool hasCid()
method clearCid (line 754) | void clearCid()
method hasPage (line 762) | $core.bool hasPage()
method clearPage (line 764) | void clearPage()
method hasFrom (line 776) | $core.bool hasFrom()
method clearFrom (line 778) | void clearFrom()
method hasPart (line 786) | $core.bool hasPart()
method clearPart (line 788) | void clearPart()
method hasDuration (line 796) | $core.bool hasDuration()
method clearDuration (line 798) | void clearDuration()
method hasVid (line 806) | $core.bool hasVid()
method clearVid (line 808) | void clearVid()
method hasDesc (line 816) | $core.bool hasDesc()
method clearDesc (line 818) | void clearDesc()
method hasWebLink (line 826) | $core.bool hasWebLink()
method clearWebLink (line 828) | void clearWebLink()
method hasDimension (line 836) | $core.bool hasDimension()
method clearDimension (line 838) | void clearDimension()
method ensureDimension (line 840) | Dimension ensureDimension()
method hasFirstFrame (line 847) | $core.bool hasFirstFrame()
method clearFirstFrame (line 849) | void clearFirstFrame()
class Rights (line 853) | class Rights extends $pb.GeneratedMessage {
method clone (line 919) | Rights clone()
method copyWith (line 921) | Rights copyWith(void Function(Rights) updates)
method create (line 928) | Rights create()
method createEmptyInstance (line 930) | Rights createEmptyInstance()
method getDefault (line 932) | Rights getDefault()
method hasBp (line 942) | $core.bool hasBp()
method clearBp (line 944) | void clearBp()
method hasElec (line 952) | $core.bool hasElec()
method clearElec (line 954) | void clearElec()
method hasDownload (line 962) | $core.bool hasDownload()
method clearDownload (line 964) | void clearDownload()
method hasMovie (line 972) | $core.bool hasMovie()
method clearMovie (line 974) | void clearMovie()
method hasPay (line 982) | $core.bool hasPay()
method clearPay (line 984) | void clearPay()
method hasHd5 (line 992) | $core.bool hasHd5()
method clearHd5 (line 994) | void clearHd5()
method hasNoReprint (line 1002) | $core.bool hasNoReprint()
method clearNoReprint (line 1004) | void clearNoReprint()
method hasAutoplay (line 1012) | $core.bool hasAutoplay()
method clearAutoplay (line 1014) | void clearAutoplay()
method hasUgcPay (line 1022) | $core.bool hasUgcPay()
method clearUgcPay (line 1024) | void clearUgcPay()
method hasIsCooperation (line 1032) | $core.bool hasIsCooperation()
method clearIsCooperation (line 1034) | void clearIsCooperation()
method hasUgcPayPreview (line 1042) | $core.bool hasUgcPayPreview()
method clearUgcPayPreview (line 1044) | void clearUgcPayPreview()
method hasNoBackground (line 1052) | $core.bool hasNoBackground()
method clearNoBackground (line 1054) | void clearNoBackground()
method hasArcPay (line 1061) | $core.bool hasArcPay()
method clearArcPay (line 1063) | void clearArcPay()
method hasPayFreeWatch (line 1071) | $core.bool hasPayFreeWatch()
method clearPayFreeWatch (line 1073) | void clearPayFreeWatch()
class SeasonTheme (line 1076) | class SeasonTheme extends $pb.GeneratedMessage {
method clone (line 1109) | SeasonTheme clone()
method copyWith (line 1111) | SeasonTheme copyWith(void Function(SeasonTheme) updates)
method create (line 1119) | SeasonTheme create()
method createEmptyInstance (line 1121) | SeasonTheme createEmptyInstance()
method getDefault (line 1123) | SeasonTheme getDefault()
method hasBgColor (line 1132) | $core.bool hasBgColor()
method clearBgColor (line 1134) | void clearBgColor()
method hasSelectedBgColor (line 1141) | $core.bool hasSelectedBgColor()
method clearSelectedBgColor (line 1143) | void clearSelectedBgColor()
method hasTextColor (line 1150) | $core.bool hasTextColor()
method clearTextColor (line 1152) | void clearTextColor()
class StaffInfo (line 1156) | class StaffInfo extends $pb.GeneratedMessage {
method clone (line 1189) | StaffInfo clone()
method copyWith (line 1191) | StaffInfo copyWith(void Function(StaffInfo) updates)
method create (line 1198) | StaffInfo create()
method createEmptyInstance (line 1200) | StaffInfo createEmptyInstance()
method getDefault (line 1202) | StaffInfo getDefault()
method hasMid (line 1212) | $core.bool hasMid()
method clearMid (line 1214) | void clearMid()
method hasTitle (line 1222) | $core.bool hasTitle()
method clearTitle (line 1224) | void clearTitle()
method hasAttribute (line 1232) | $core.bool hasAttribute()
method clearAttribute (line 1234) | void clearAttribute()
class Stat (line 1238) | class Stat extends $pb.GeneratedMessage {
method clone (line 1295) | Stat clone()
method copyWith (line 1297) | Stat copyWith(void Function(Stat) updates)
method create (line 1304) | Stat create()
method createEmptyInstance (line 1306) | Stat createEmptyInstance()
method getDefault (line 1308) | Stat getDefault()
method hasAid (line 1318) | $core.bool hasAid()
method clearAid (line 1320) | void clearAid()
method hasView (line 1328) | $core.bool hasView()
method clearView (line 1330) | void clearView()
method hasDanmaku (line 1338) | $core.bool hasDanmaku()
method clearDanmaku (line 1340) | void clearDanmaku()
method hasReply (line 1348) | $core.bool hasReply()
method clearReply (line 1350) | void clearReply()
method hasFav (line 1358) | $core.bool hasFav()
method clearFav (line 1360) | void clearFav()
method hasCoin (line 1368) | $core.bool hasCoin()
method clearCoin (line 1370) | void clearCoin()
method hasShare (line 1378) | $core.bool hasShare()
method clearShare (line 1380) | void clearShare()
method hasNowRank (line 1388) | $core.bool hasNowRank()
method clearNowRank (line 1390) | void clearNowRank()
method hasHisRank (line 1398) | $core.bool hasHisRank()
method clearHisRank (line 1400) | void clearHisRank()
method hasLike (line 1408) | $core.bool hasLike()
method clearLike (line 1410) | void clearLike()
method hasDislike (line 1418) | $core.bool hasDislike()
method clearDislike (line 1420) | void clearDislike()
FILE: lib/grpc/bilibili/app/card/v1.pb.dart
class AdInfo (line 20) | class AdInfo extends $pb.GeneratedMessage {
method clone (line 100) | AdInfo clone()
method copyWith (line 102) | AdInfo copyWith(void Function(AdInfo) updates)
method create (line 109) | AdInfo create()
method createEmptyInstance (line 111) | AdInfo createEmptyInstance()
method getDefault (line 113) | AdInfo getDefault()
method hasCreativeId (line 122) | $core.bool hasCreativeId()
method clearCreativeId (line 124) | void clearCreativeId()
method hasCreativeType (line 131) | $core.bool hasCreativeType()
method clearCreativeType (line 133) | void clearCreativeType()
method hasCardType (line 140) | $core.bool hasCardType()
method clearCardType (line 142) | void clearCardType()
method hasCreativeContent (line 149) | $core.bool hasCreativeContent()
method clearCreativeContent (line 151) | void clearCreativeContent()
method ensureCreativeContent (line 153) | CreativeContent ensureCreativeContent()
method hasAdCb (line 160) | $core.bool hasAdCb()
method clearAdCb (line 162) | void clearAdCb()
method hasResource (line 169) | $core.bool hasResource()
method clearResource (line 171) | void clearResource()
method hasSource (line 178) | $core.bool hasSource()
method clearSource (line 180) | void clearSource()
method hasRequestId (line 187) | $core.bool hasRequestId()
method clearRequestId (line 189) | void clearRequestId()
method hasIsAd (line 196) | $core.bool hasIsAd()
method clearIsAd (line 198) | void clearIsAd()
method hasCmMark (line 205) | $core.bool hasCmMark()
method clearCmMark (line 207) | void clearCmMark()
method hasIndex (line 214) | $core.bool hasIndex()
method clearIndex (line 216) | void clearIndex()
method hasIsAdLoc (line 223) | $core.bool hasIsAdLoc()
method clearIsAdLoc (line 225) | void clearIsAdLoc()
method hasCardIndex (line 232) | $core.bool hasCardIndex()
method clearCardIndex (line 234) | void clearCardIndex()
method hasClientIp (line 241) | $core.bool hasClientIp()
method clearClientIp (line 243) | void clearClientIp()
method hasExtra (line 250) | $core.bool hasExtra()
method clearExtra (line 252) | void clearExtra()
method hasCreativeStyle (line 259) | $core.bool hasCreativeStyle()
method clearCreativeStyle (line 261) | void clearCreativeStyle()
method hasNatureAd (line 268) | $core.bool hasNatureAd()
method clearNatureAd (line 270) | void clearNatureAd()
method hasContentFastAccess (line 277) | $core.bool hasContentFastAccess()
method clearContentFastAccess (line 279) | void clearContentFastAccess()
class Args (line 282) | class Args extends $pb.GeneratedMessage {
method clone (line 339) | Args clone()
method copyWith (line 341) | Args copyWith(void Function(Args) updates)
method create (line 348) | Args create()
method createEmptyInstance (line 350) | Args createEmptyInstance()
method getDefault (line 352) | Args getDefault()
method hasType (line 361) | $core.bool hasType()
method clearType (line 363) | void clearType()
method hasUpId (line 370) | $core.bool hasUpId()
method clearUpId (line 372) | void clearUpId()
method hasUpName (line 379) | $core.bool hasUpName()
method clearUpName (line 381) | void clearUpName()
method hasRid (line 388) | $core.bool hasRid()
method clearRid (line 390) | void clearRid()
method hasRname (line 397) | $core.bool hasRname()
method clearRname (line 399) | void clearRname()
method hasTid (line 406) | $core.bool hasTid()
method clearTid (line 408) | void clearTid()
method hasTname (line 415) | $core.bool hasTname()
method clearTname (line 417) | void clearTname()
method hasTrackId (line 424) | $core.bool hasTrackId()
method clearTrackId (line 426) | void clearTrackId()
method hasState (line 433) | $core.bool hasState()
method clearState (line 435) | void clearState()
method hasConvergeType (line 442) | $core.bool hasConvergeType()
method clearConvergeType (line 444) | void clearConvergeType()
method hasAid (line 451) | $core.bool hasAid()
method clearAid (line 453) | void clearAid()
class Avatar (line 456) | class Avatar extends $pb.GeneratedMessage {
method clone (line 501) | Avatar clone()
method copyWith (line 503) | Avatar copyWith(void Function(Avatar) updates)
method create (line 510) | Avatar create()
method createEmptyInstance (line 512) | Avatar createEmptyInstance()
method getDefault (line 514) | Avatar getDefault()
method hasCover (line 523) | $core.bool hasCover()
method clearCover (line 525) | void clearCover()
method hasText (line 532) | $core.bool hasText()
method clearText (line 534) | void clearText()
method hasUri (line 541) | $core.bool hasUri()
method clearUri (line 543) | void clearUri()
method hasType (line 550) | $core.bool hasType()
method clearType (line 552) | void clearType()
method hasEvent (line 559) | $core.bool hasEvent()
method clearEvent (line 561) | void clearEvent()
method hasEventV2 (line 568) | $core.bool hasEventV2()
method clearEventV2 (line 570) | void clearEventV2()
method hasDefalutCover (line 577) | $core.bool hasDefalutCover()
method clearDefalutCover (line 579) | void clearDefalutCover()
class Base (line 582) | class Base extends $pb.GeneratedMessage {
method clone (line 674) | Base clone()
method copyWith (line 676) | Base copyWith(void Function(Base) updates)
method create (line 683) | Base create()
method createEmptyInstance (line 685) | Base createEmptyInstance()
method getDefault (line 687) | Base getDefault()
method hasCardType (line 696) | $core.bool hasCardType()
method clearCardType (line 698) | void clearCardType()
method hasCardGoto (line 705) | $core.bool hasCardGoto()
method clearCardGoto (line 707) | void clearCardGoto()
method hasGoto (line 714) | $core.bool hasGoto()
method clearGoto (line 716) | void clearGoto()
method hasParam (line 723) | $core.bool hasParam()
method clearParam (line 725) | void clearParam()
method hasCover (line 732) | $core.bool hasCover()
method clearCover (line 734) | void clearCover()
method hasTitle (line 741) | $core.bool hasTitle()
method clearTitle (line 743) | void clearTitle()
method hasUri (line 750) | $core.bool hasUri()
method clearUri (line 752) | void clearUri()
method hasThreePoint (line 759) | $core.bool hasThreePoint()
method clearThreePoint (line 761) | void clearThreePoint()
method ensureThreePoint (line 763) | ThreePoint ensureThreePoint()
method hasArgs (line 770) | $core.bool hasArgs()
method clearArgs (line 772) | void clearArgs()
method ensureArgs (line 774) | Args ensureArgs()
method hasPlayerArgs (line 781) | $core.bool hasPlayerArgs()
method clearPlayerArgs (line 783) | void clearPlayerArgs()
method ensurePlayerArgs (line 785) | PlayerArgs ensurePlayerArgs()
method hasIdx (line 792) | $core.bool hasIdx()
method clearIdx (line 794) | void clearIdx()
method hasAdInfo (line 801) | $core.bool hasAdInfo()
method clearAdInfo (line 803) | void clearAdInfo()
method ensureAdInfo (line 805) | AdInfo ensureAdInfo()
method hasMask (line 812) | $core.bool hasMask()
method clearMask (line 814) | void clearMask()
method ensureMask (line 816) | Mask ensureMask()
method hasFromType (line 823) | $core.bool hasFromType()
method clearFromType (line 825) | void clearFromType()
method hasDescButton (line 838) | $core.bool hasDescButton()
method clearDescButton (line 840) | void clearDescButton()
method ensureDescButton (line 842) | Button ensureDescButton()
method hasThreePointV4 (line 849) | $core.bool hasThreePointV4()
method clearThreePointV4 (line 851) | void clearThreePointV4()
method ensureThreePointV4 (line 853) | ThreePointV4 ensureThreePointV4()
method hasUpArgs (line 860) | $core.bool hasUpArgs()
method clearUpArgs (line 862) | void clearUpArgs()
method ensureUpArgs (line 864) | UpArgs ensureUpArgs()
method hasTrackId (line 871) | $core.bool hasTrackId()
method clearTrackId (line 873) | void clearTrackId()
class Bubble (line 876) | class Bubble extends $pb.GeneratedMessage {
method clone (line 909) | Bubble clone()
method copyWith (line 911) | Bubble copyWith(void Function(Bubble) updates)
method create (line 918) | Bubble create()
method createEmptyInstance (line 920) | Bubble createEmptyInstance()
method getDefault (line 922) | Bubble getDefault()
method hasBubbleContent (line 931) | $core.bool hasBubbleContent()
method clearBubbleContent (line 933) | void clearBubbleContent()
method hasVersion (line 940) | $core.bool hasVersion()
method clearVersion (line 942) | void clearVersion()
method hasStime (line 949) | $core.bool hasStime()
method clearStime (line 951) | void clearStime()
class Button (line 954) | class Button extends $pb.GeneratedMessage {
method clone (line 1003) | Button clone()
method copyWith (line 1005) | Button copyWith(void Function(Button) updates)
method create (line 1012) | Button create()
method createEmptyInstance (line 1014) | Button createEmptyInstance()
method getDefault (line 1016) | Button getDefault()
method hasText (line 1025) | $core.bool hasText()
method clearText (line 1027) | void clearText()
method hasParam (line 1034) | $core.bool hasParam()
method clearParam (line 1036) | void clearParam()
method hasUri (line 1043) | $core.bool hasUri()
method clearUri (line 1045) | void clearUri()
method hasEvent (line 1052) | $core.bool hasEvent()
method clearEvent (line 1054) | void clearEvent()
method hasSelected (line 1061) | $core.bool hasSelected()
method clearSelected (line 1063) | void clearSelected()
method hasType (line 1070) | $core.bool hasType()
method clearType (line 1072) | void clearType()
method hasEventV2 (line 1079) | $core.bool hasEventV2()
method clearEventV2 (line 1081) | void clearEventV2()
method hasRelation (line 1088) | $core.bool hasRelation()
method clearRelation (line 1090) | void clearRelation()
method ensureRelation (line 1092) | Relation ensureRelation()
type Card_Item (line 1095) | enum Card_Item {
class Card (line 1111) | class Card extends $pb.GeneratedMessage {
method clone (line 1200) | Card clone()
method copyWith (line 1202) | Card copyWith(void Function(Card) updates)
method create (line 1209) | Card create()
method createEmptyInstance (line 1211) | Card createEmptyInstance()
method getDefault (line 1213) | Card getDefault()
method whichItem (line 1229) | Card_Item whichItem()
method clearItem (line 1242) | void clearItem()
method hasSmallCoverV5 (line 1249) | $core.bool hasSmallCoverV5()
method clearSmallCoverV5 (line 1251) | void clearSmallCoverV5()
method ensureSmallCoverV5 (line 1253) | SmallCoverV5 ensureSmallCoverV5()
method hasLargeCoverV1 (line 1260) | $core.bool hasLargeCoverV1()
method clearLargeCoverV1 (line 1262) | void clearLargeCoverV1()
method ensureLargeCoverV1 (line 1264) | LargeCoverV1 ensureLargeCoverV1()
method hasThreeItemAllV2 (line 1271) | $core.bool hasThreeItemAllV2()
method clearThreeItemAllV2 (line 1273) | void clearThreeItemAllV2()
method ensureThreeItemAllV2 (line 1275) | ThreeItemAllV2 ensureThreeItemAllV2()
method hasThreeItemV1 (line 1282) | $core.bool hasThreeItemV1()
method clearThreeItemV1 (line 1284) | void clearThreeItemV1()
method ensureThreeItemV1 (line 1286) | ThreeItemV1 ensureThreeItemV1()
method hasHotTopic (line 1293) | $core.bool hasHotTopic()
method clearHotTopic (line 1295) | void clearHotTopic()
method ensureHotTopic (line 1297) | HotTopic ensureHotTopic()
method hasThreeItemHV5 (line 1304) | $core.bool hasThreeItemHV5()
method clearThreeItemHV5 (line 1306) | void clearThreeItemHV5()
method ensureThreeItemHV5 (line 1308) | DynamicHot ensureThreeItemHV5()
method hasMiddleCoverV3 (line 1315) | $core.bool hasMiddleCoverV3()
method clearMiddleCoverV3 (line 1317) | void clearMiddleCoverV3()
method ensureMiddleCoverV3 (line 1319) | MiddleCoverV3 ensureMiddleCoverV3()
method hasLargeCoverV4 (line 1326) | $core.bool hasLargeCoverV4()
method clearLargeCoverV4 (line 1328) | void clearLargeCoverV4()
method ensureLargeCoverV4 (line 1330) | LargeCoverV4 ensureLargeCoverV4()
method hasPopularTopEntrance (line 1337) | $core.bool hasPopularTopEntrance()
method clearPopularTopEntrance (line 1339) | void clearPopularTopEntrance()
method ensurePopularTopEntrance (line 1341) | PopularTopEntrance ensurePopularTopEntrance()
method hasRcmdOneItem (line 1348) | $core.bool hasRcmdOneItem()
method clearRcmdOneItem (line 1350) | void clearRcmdOneItem()
method ensureRcmdOneItem (line 1352) | RcmdOneItem ensureRcmdOneItem()
method hasSmallCoverV5Ad (line 1359) | $core.bool hasSmallCoverV5Ad()
method clearSmallCoverV5Ad (line 1361) | void clearSmallCoverV5Ad()
method ensureSmallCoverV5Ad (line 1363) | SmallCoverV5Ad ensureSmallCoverV5Ad()
method hasTopicList (line 1370) | $core.bool hasTopicList()
method clearTopicList (line 1372) | void clearTopicList()
method ensureTopicList (line 1374) | TopicList ensureTopicList()
class CreativeContent (line 1377) | class CreativeContent extends $pb.GeneratedMessage {
method clone (line 1434) | CreativeContent clone()
method copyWith (line 1436) | CreativeContent copyWith(void Function(CreativeContent) updates)
method create (line 1444) | CreativeContent create()
method createEmptyInstance (line 1446) | CreativeContent createEmptyInstance()
method getDefault (line 1448) | CreativeContent getDefault()
method hasTitle (line 1457) | $core.bool hasTitle()
method clearTitle (line 1459) | void clearTitle()
method hasDescription (line 1466) | $core.bool hasDescription()
method clearDescription (line 1468) | void clearDescription()
method hasVideoId (line 1475) | $core.bool hasVideoId()
method clearVideoId (line 1477) | void clearVideoId()
method hasUsername (line 1484) | $core.bool hasUsername()
method clearUsername (line 1486) | void clearUsername()
method hasImageUrl (line 1493) | $core.bool hasImageUrl()
method clearImageUrl (line 1495) | void clearImageUrl()
method hasImageMd5 (line 1502) | $core.bool hasImageMd5()
method clearImageMd5 (line 1504) | void clearImageMd5()
method hasLogUrl (line 1511) | $core.bool hasLogUrl()
method clearLogUrl (line 1513) | void clearLogUrl()
method hasLogMd5 (line 1520) | $core.bool hasLogMd5()
method clearLogMd5 (line 1522) | void clearLogMd5()
method hasUrl (line 1529) | $core.bool hasUrl()
method clearUrl (line 1531) | void clearUrl()
method hasClickUrl (line 1538) | $core.bool hasClickUrl()
method clearClickUrl (line 1540) | void clearClickUrl()
method hasShowUrl (line 1547) | $core.bool hasShowUrl()
method clearShowUrl (line 1549) | void clearShowUrl()
class DislikeReason (line 1552) | class DislikeReason extends $pb.GeneratedMessage {
method clone (line 1582) | DislikeReason clone()
method copyWith (line 1584) | DislikeReason copyWith(void Function(DislikeReason) updates)
method create (line 1592) | DislikeReason create()
method createEmptyInstance (line 1594) | DislikeReason createEmptyInstance()
method getDefault (line 1596) | DislikeReason getDefault()
method hasId (line 1605) | $core.bool hasId()
method clearId (line 1607) | void clearId()
method hasName (line 1614) | $core.bool hasName()
method clearName (line 1616) | void clearName()
type DoubleCards_Card (line 1619) | enum DoubleCards_Card { smallCoverV2, onePicV2, threePicV2, notSet }
class DoubleCards (line 1621) | class DoubleCards extends $pb.GeneratedMessage {
method clone (line 1664) | DoubleCards clone()
method copyWith (line 1666) | DoubleCards copyWith(void Function(DoubleCards) updates)
method create (line 1674) | DoubleCards create()
method createEmptyInstance (line 1676) | DoubleCards createEmptyInstance()
method getDefault (line 1678) | DoubleCards getDefault()
method whichCard (line 1685) | DoubleCards_Card whichCard()
method clearCard (line 1689) | void clearCard()
method hasSmallCoverV2 (line 1696) | $core.bool hasSmallCoverV2()
method clearSmallCoverV2 (line 1698) | void clearSmallCoverV2()
method ensureSmallCoverV2 (line 1700) | SmallCoverV2 ensureSmallCoverV2()
method hasOnePicV2 (line 1707) | $core.bool hasOnePicV2()
method clearOnePicV2 (line 1709) | void clearOnePicV2()
method ensureOnePicV2 (line 1711) | OnePicV2 ensureOnePicV2()
method hasThreePicV2 (line 1718) | $core.bool hasThreePicV2()
method clearThreePicV2 (line 1720) | void clearThreePicV2()
method ensureThreePicV2 (line 1722) | ThreePicV2 ensureThreePicV2()
class DynamicHot (line 1725) | class DynamicHot extends $pb.GeneratedMessage {
method clone (line 1778) | DynamicHot clone()
method copyWith (line 1780) | DynamicHot copyWith(void Function(DynamicHot) updates)
method create (line 1787) | DynamicHot create()
method createEmptyInstance (line 1789) | DynamicHot createEmptyInstance()
method getDefault (line 1791) | DynamicHot getDefault()
method hasBase (line 1800) | $core.bool hasBase()
method clearBase (line 1802) | void clearBase()
method ensureBase (line 1804) | Base ensureBase()
method hasTopLeftTitle (line 1811) | $core.bool hasTopLeftTitle()
method clearTopLeftTitle (line 1813) | void clearTopLeftTitle()
method hasDesc1 (line 1820) | $core.bool hasDesc1()
method clearDesc1 (line 1822) | void clearDesc1()
method hasDesc2 (line 1829) | $core.bool hasDesc2()
method clearDesc2 (line 1831) | void clearDesc2()
method hasMoreUri (line 1838) | $core.bool hasMoreUri()
method clearMoreUri (line 1840) | void clearMoreUri()
method hasMoreText (line 1847) | $core.bool hasMoreText()
method clearMoreText (line 1849) | void clearMoreText()
method hasCoverRightText (line 1859) | $core.bool hasCoverRightText()
method clearCoverRightText (line 1861) | void clearCoverRightText()
method hasTopRcmdReasonStyle (line 1868) | $core.bool hasTopRcmdReasonStyle()
method clearTopRcmdReasonStyle (line 1870) | void clearTopRcmdReasonStyle()
method ensureTopRcmdReasonStyle (line 1872) | ReasonStyle ensureTopRcmdReasonStyle()
class EntranceItem (line 1875) | class EntranceItem extends $pb.GeneratedMessage {
method clone (line 1923) | EntranceItem clone()
method copyWith (line 1925) | EntranceItem copyWith(void Function(EntranceItem) updates)
method create (line 1933) | EntranceItem create()
method createEmptyInstance (line 1935) | EntranceItem createEmptyInstance()
method getDefaul
Copy disabled (too large)
Download .json
Condensed preview — 1463 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (15,971K chars).
[
{
"path": ".fvmrc",
"chars": 25,
"preview": "{\n \"flutter\": \"3.41.5\"\n}"
},
{
"path": ".github/ISSUE_TEMPLATE/bug-反馈.yml",
"chars": 1436,
"preview": "name: Bug 反馈\ndescription: 描述你所遇到的bug\nlabels: [ \"bug\" ]\ntitle: \"[Bug] \"\nbody:\n\n - type: checkboxes\n id: checklist\n "
},
{
"path": ".github/ISSUE_TEMPLATE/功能请求.yml",
"chars": 917,
"preview": "name: 功能请求\ndescription: 对于功能的一些建议\nlabels: [ \"enhancement\" ]\ntitle: \"[FR] \"\nbody:\n\n - type: checkboxes\n id: checklist"
},
{
"path": ".github/workflows/build.yml",
"chars": 6209,
"preview": "name: Build\n\non:\n pull_request:\n types:\n - opened\n - synchronize\n - reopened\n"
},
{
"path": ".github/workflows/ios.yml",
"chars": 1627,
"preview": "name: Build for iOS\n\non:\n workflow_call:\n inputs:\n tag:\n description: \"tag\"\n required: false\n "
},
{
"path": ".github/workflows/linux_x64.yml",
"chars": 10583,
"preview": "name: Build for Linux x64\n\non:\n workflow_call:\n inputs:\n tag:\n description: \"tag\"\n required: fals"
},
{
"path": ".github/workflows/mac.yml",
"chars": 1595,
"preview": "name: Build for Mac\n\non:\n workflow_call:\n inputs:\n tag:\n description: \"tag\"\n required: false\n "
},
{
"path": ".github/workflows/win_x64.yml",
"chars": 2579,
"preview": "name: Build for Windows x64\n\non:\n workflow_call:\n inputs:\n tag:\n description: \"tag\"\n required: fa"
},
{
"path": ".gitignore",
"chars": 2933,
"preview": "# Miscellaneous\n*.class\n*.log\n*.pyc\n*.swp\n.DS_Store\n.atom/\n.buildlog/\n.history\n.svn/\nmigrate_working_dir/\n\n# IntelliJ re"
},
{
"path": ".metadata",
"chars": 1668,
"preview": "# This file tracks properties of this Flutter project.\n# Used by Flutter tool to assess capabilities and perform upgrade"
},
{
"path": ".vscode/launch.json",
"chars": 620,
"preview": "{\n // 使用 IntelliSense 了解相关属性。\n // 悬停以查看现有属性的描述。\n // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387"
},
{
"path": ".vscode/settings.json",
"chars": 221,
"preview": "{\n \"editor.formatOnSave\": true,\n \"[dart]\": {\n \"editor.formatOnType\": true\n },\n \"editor.codeActionsOnS"
},
{
"path": "LICENSE",
"chars": 35149,
"preview": " GNU GENERAL PUBLIC LICENSE\n Version 3, 29 June 2007\n\n Copyright (C) 2007 Free "
},
{
"path": "README.md",
"chars": 4903,
"preview": "<div align=\"center\">\n <img width=\"200\" height=\"200\" src=\"assets/images/logo/logo.png\">\n</div>\n\n\n\n<div align=\"center\">"
},
{
"path": "analysis_options.yaml",
"chars": 3060,
"preview": "# This file configures the analyzer, which statically analyzes Dart code to\n# check for errors, warnings, and lints.\n#\n#"
},
{
"path": "android/.gitignore",
"chars": 302,
"preview": "gradle-wrapper.jar\n/.gradle\n/captures/\n/gradlew\n/gradlew.bat\n/local.properties\nGeneratedPluginRegistrant.java\n\n# Remembe"
},
{
"path": "android/app/.gitignore",
"chars": 13,
"preview": "/.cxx\n/build\n"
},
{
"path": "android/app/build.gradle.kts",
"chars": 2457,
"preview": "import com.android.build.gradle.internal.api.ApkVariantOutputImpl\nimport org.jetbrains.kotlin.konan.properties.Propertie"
},
{
"path": "android/app/proguard-rules.pro",
"chars": 109,
"preview": "-dontwarn javax.annotation.Nullable\n-dontwarn org.conscrypt.Conscrypt\n-dontwarn org.conscrypt.OpenSSLProvider"
},
{
"path": "android/app/src/debug/res/values/string.xml",
"chars": 76,
"preview": "<resources>\n <string name=\"app_name\">PiliPlus debug</string>\n</resources>"
},
{
"path": "android/app/src/main/AndroidManifest.xml",
"chars": 10512,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.piliplus\">\n <queries>\n "
},
{
"path": "android/app/src/main/kotlin/com/example/piliplus/MainActivity.kt",
"chars": 7896,
"preview": "package com.example.piliplus\n\nimport android.app.PictureInPictureParams\nimport android.app.SearchManager\nimport android."
},
{
"path": "android/app/src/main/res/drawable/ic_baseline_forward_10_24.xml",
"chars": 909,
"preview": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n andr"
},
{
"path": "android/app/src/main/res/drawable/ic_baseline_replay_10_24.xml",
"chars": 1380,
"preview": "<vector android:height=\"24dp\" android:tint=\"#FFFFFF\"\n android:viewportHeight=\"24\" android:viewportWidth=\"24\"\n andr"
},
{
"path": "android/app/src/main/res/drawable/ic_launcher_background.xml",
"chars": 438,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!-- Modify this file to customize your launch splash screen -->\n<layer-list xmln"
},
{
"path": "android/app/src/main/res/drawable/ic_launcher_foreground.xml",
"chars": 576,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:he"
},
{
"path": "android/app/src/main/res/drawable/ic_notification_icon.xml",
"chars": 613,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<vector xmlns:android=\"http://schemas.android.com/apk/res/android\"\n android:he"
},
{
"path": "android/app/src/main/res/drawable/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-night/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-night-v21/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/drawable-v21/launch_background.xml",
"chars": 321,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<layer-list xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <item"
},
{
"path": "android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml",
"chars": 338,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<adaptive-icon xmlns:android=\"http://schemas.android.com/apk/res/android\">\n <b"
},
{
"path": "android/app/src/main/res/raw/keep.xml",
"chars": 126,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\"\n tools:keep=\"@drawable"
},
{
"path": "android/app/src/main/res/values/colors.xml",
"chars": 181,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_foreground\">#FF5CB67B</color>\n <color"
},
{
"path": "android/app/src/main/res/values/string.xml",
"chars": 70,
"preview": "<resources>\n <string name=\"app_name\">PiliPlus</string>\n</resources>"
},
{
"path": "android/app/src/main/res/values/styles.xml",
"chars": 1568,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources xmlns:tools=\"http://schemas.android.com/tools\">\n <!-- Theme applied"
},
{
"path": "android/app/src/main/res/values-night/styles.xml",
"chars": 1337,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-night-v31/colors.xml",
"chars": 230,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_foreground\">@android:color/system_accent"
},
{
"path": "android/app/src/main/res/values-night-v31/styles.xml",
"chars": 1202,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/main/res/values-v31/colors.xml",
"chars": 230,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <color name=\"ic_launcher_foreground\">@android:color/system_neutra"
},
{
"path": "android/app/src/main/res/values-v31/styles.xml",
"chars": 1203,
"preview": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<resources>\n <!-- Theme applied to the Android Window while the process is sta"
},
{
"path": "android/app/src/profile/AndroidManifest.xml",
"chars": 413,
"preview": "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\"\n package=\"com.example.piliplus\">\n <!-- The IN"
},
{
"path": "android/build.gradle.kts",
"chars": 2337,
"preview": "import org.jetbrains.kotlin.gradle.tasks.KotlinCompile\n\nallprojects {\n repositories {\n google()\n mavenC"
},
{
"path": "android/gradle/wrapper/gradle-wrapper.properties",
"chars": 250,
"preview": "distributionBase=GRADLE_USER_HOME\ndistributionPath=wrapper/dists\ndistributionUrl=https\\://services.gradle.org/distributi"
},
{
"path": "android/gradle.properties",
"chars": 134,
"preview": "org.gradle.jvmargs=-Xmx4G -XX:MaxMetaspaceSize=2G -XX:+HeapDumpOnOutOfMemoryError\nandroid.useAndroidX=true\nandroid.enabl"
},
{
"path": "android/settings.gradle.kts",
"chars": 772,
"preview": "pluginManagement {\n val flutterSdkPath =\n run {\n val properties = java.util.Properties()\n "
},
{
"path": "assets/linux/DEBIAN/control",
"chars": 500,
"preview": "Package: PiliPlus\nVersion: version_need_change\nMaintainer: gh-MzA4Nzk <githubaccount2333@proton.me>\nOriginal-Maintainer:"
},
{
"path": "assets/linux/DEBIAN/postinst",
"chars": 626,
"preview": "#!/usr/bin/env bash\n\nln -sf /opt/PiliPlus/piliplus /usr/bin/piliplus\nchmod +x /usr/bin/piliplus\n\nif [ $1 == \"configure\" "
},
{
"path": "assets/linux/DEBIAN/postrm",
"chars": 775,
"preview": "#!/usr/bin/env bash\nrm /usr/bin/piliplus\nif [ \"$1\" = \"remove\" ] || [ \"$1\" = \"purge\" ]; then\n if [ -x /usr/bin/update-"
},
{
"path": "assets/linux/DEBIAN/prerm",
"chars": 162,
"preview": "#!/usr/bin/env bash\n\nif [ \"$1\" = \"remove\" ] || [ \"$1\" = \"deconfigure\" ]; then\n echo \"Stopping PiliPlus if running...\""
},
{
"path": "assets/linux/com.example.piliplus.desktop",
"chars": 267,
"preview": "[Desktop Entry]\nType=Application\nName=PiliPlus\nComment=A third-party Bilibili Client developed in Flutter\nComment[zh_CN]"
},
{
"path": "assets/shaders/Anime4K_AutoDownscalePre_x2.glsl",
"chars": 1560,
"preview": "// This is free and unencumbered software released into the public domain.\n\n// Anyone is free to copy, modify, publish, "
},
{
"path": "assets/shaders/Anime4K_AutoDownscalePre_x4.glsl",
"chars": 1568,
"preview": "// This is free and unencumbered software released into the public domain.\n\n// Anyone is free to copy, modify, publish, "
},
{
"path": "assets/shaders/Anime4K_Clamp_Highlights.glsl",
"chars": 2795,
"preview": "// MIT License\n\n// Copyright (c) 2019-2021 bloc97\n// All rights reserved.\n\n// Permission is hereby granted, free of char"
},
{
"path": "assets/shaders/Anime4K_Restore_CNN_M.glsl",
"chars": 35916,
"preview": "// MIT License\n\n// Copyright (c) 2019-2021 bloc97\n// All rights reserved.\n\n// Permission is hereby granted, free of char"
},
{
"path": "assets/shaders/Anime4K_Restore_CNN_S.glsl",
"chars": 17136,
"preview": "// MIT License\n\n// Copyright (c) 2019-2021 bloc97\n// All rights reserved.\n\n// Permission is hereby granted, free of char"
},
{
"path": "assets/shaders/Anime4K_Restore_CNN_VL.glsl",
"chars": 144075,
"preview": "// MIT License\n\n// Copyright (c) 2019-2021 bloc97\n// All rights reserved.\n\n// Permission is hereby granted, free of char"
},
{
"path": "assets/shaders/Anime4K_Upscale_CNN_x2_M.glsl",
"chars": 37685,
"preview": "// MIT License\n\n// Copyright (c) 2019-2021 bloc97\n// All rights reserved.\n\n// Permission is hereby granted, free of char"
},
{
"path": "assets/shaders/Anime4K_Upscale_CNN_x2_S.glsl",
"chars": 18638,
"preview": "// MIT License\n\n// Copyright (c) 2019-2021 bloc97\n// All rights reserved.\n\n// Permission is hereby granted, free of char"
},
{
"path": "assets/shaders/Anime4K_Upscale_CNN_x2_VL.glsl",
"chars": 146743,
"preview": "// MIT License\n\n// Copyright (c) 2019-2021 bloc97\n// All rights reserved.\n\n// Permission is hereby granted, free of char"
},
{
"path": "assets/shaders/LICENSE",
"chars": 1062,
"preview": "MIT License\n\nCopyright (c) 2019 bloc97\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof "
},
{
"path": "distribute_options.yaml",
"chars": 13,
"preview": "output: dist/"
},
{
"path": "ios/.gitignore",
"chars": 569,
"preview": "**/dgph\n*.mode1v3\n*.mode2v3\n*.moved-aside\n*.pbxuser\n*.perspectivev3\n**/*sync/\n.sconsign.dblite\n.tags*\n**/.vagrant/\n**/De"
},
{
"path": "ios/Flutter/AppFrameworkInfo.plist",
"chars": 774,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Flutter/Debug.xcconfig",
"chars": 107,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "ios/Flutter/Release.xcconfig",
"chars": 109,
"preview": "#include? \"Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig\"\n#include \"Generated.xcconfig\"\n"
},
{
"path": "ios/Podfile",
"chars": 3528,
"preview": "# Uncomment this line to define a global platform for your project\nplatform :ios, '13.0'\n\n# CocoaPods analytics sends ne"
},
{
"path": "ios/Runner/AppDelegate.swift",
"chars": 619,
"preview": "import Flutter\nimport UIKit\n\n@main\n@objc class AppDelegate: FlutterAppDelegate, FlutterImplicitEngineDelegate {\n overri"
},
{
"path": "ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json",
"chars": 2097,
"preview": "{\"images\":[{\"size\":\"20x20\",\"idiom\":\"iphone\",\"filename\":\"Icon-App-20x20@2x.png\",\"scale\":\"2x\"},{\"size\":\"20x20\",\"idiom\":\"ip"
},
{
"path": "ios/Runner/Assets.xcassets/LaunchBackground.imageset/Contents.json",
"chars": 361,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"background.png\",\n \"idiom\" : \"universal\"\n },\n {\n \"appearances\""
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json",
"chars": 1069,
"preview": "{\n \"images\" : [\n {\n \"filename\" : \"LaunchImage.png\",\n \"idiom\" : \"universal\",\n \"scale\" : \"1x\"\n },\n "
},
{
"path": "ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md",
"chars": 336,
"preview": "# Launch Screen Assets\n\nYou can customize the launch screen with your own desired assets by replacing the image files in"
},
{
"path": "ios/Runner/Base.lproj/LaunchScreen.storyboard",
"chars": 3487,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard"
},
{
"path": "ios/Runner/Base.lproj/Main.storyboard",
"chars": 1811,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<document type=\"com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB\" version=\"3"
},
{
"path": "ios/Runner/Info.plist",
"chars": 4023,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner/Runner-Bridging-Header.h",
"chars": 38,
"preview": "#import \"GeneratedPluginRegistrant.h\"\n"
},
{
"path": "ios/Runner.xcodeproj/project.pbxproj",
"chars": 23142,
"preview": "// !$*UTF8*$!\n{\n\tarchiveVersion = 1;\n\tclasses = {\n\t};\n\tobjectVersion = 54;\n\tobjects = {\n\n/* Begin PBXBuildFile section *"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata",
"chars": 135,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"self:\">\n </FileRef"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme",
"chars": 3221,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Scheme\n LastUpgradeVersion = \"1510\"\n version = \"1.3\">\n <BuildAction\n "
},
{
"path": "ios/Runner.xcworkspace/contents.xcworkspacedata",
"chars": 224,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<Workspace\n version = \"1.0\">\n <FileRef\n location = \"group:Runner.xcodepr"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist",
"chars": 238,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings",
"chars": 226,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE plist PUBLIC \"-//Apple//DTD PLIST 1.0//EN\" \"http://www.apple.com/DTDs/P"
},
{
"path": "lib/build_config.dart",
"chars": 418,
"preview": "abstract final class BuildConfig {\n static const int versionCode = int.fromEnvironment(\n 'pili.code',\n defaultVal"
},
{
"path": "lib/common/constants.dart",
"chars": 13190,
"preview": "import 'package:flutter/material.dart';\n\nabstract final class StyleString {\n static const double cardSpace = 8;\n stati"
},
{
"path": "lib/common/skeleton/dynamic_card.dart",
"chars": 3608,
"preview": "import 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'package:PiliPlus/utils/global_data.dart';\nimport 'packa"
},
{
"path": "lib/common/skeleton/fav_pgc_item.dart",
"chars": 2117,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'packag"
},
{
"path": "lib/common/skeleton/media_bangumi.dart",
"chars": 2592,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'packag"
},
{
"path": "lib/common/skeleton/msg_feed_sys_msg_.dart",
"chars": 1448,
"preview": "import 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'package:flutter/material.dart';\n\nclass MsgFeedSysMsgSke"
},
{
"path": "lib/common/skeleton/msg_feed_top.dart",
"chars": 878,
"preview": "import 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'package:flutter/material.dart';\n\nclass MsgFeedTopSkelet"
},
{
"path": "lib/common/skeleton/skeleton.dart",
"chars": 4512,
"preview": "import 'package:flutter/material.dart';\n\nclass Skeleton extends StatelessWidget {\n final Widget child;\n\n const Skeleto"
},
{
"path": "lib/common/skeleton/space_opus.dart",
"chars": 1652,
"preview": "import 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'package:PiliPlus/common/widgets/flutter/layout_builder."
},
{
"path": "lib/common/skeleton/video_card_h.dart",
"chars": 2440,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'packag"
},
{
"path": "lib/common/skeleton/video_card_v.dart",
"chars": 1961,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'packag"
},
{
"path": "lib/common/skeleton/video_reply.dart",
"chars": 2583,
"preview": "import 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'package:flutter/material.dart';\n\nclass VideoReplySkelet"
},
{
"path": "lib/common/skeleton/whisper_item.dart",
"chars": 987,
"preview": "import 'package:PiliPlus/common/skeleton/skeleton.dart';\nimport 'package:flutter/material.dart';\n\nclass WhisperItemSkele"
},
{
"path": "lib/common/widgets/appbar/appbar.dart",
"chars": 1653,
"preview": "import 'package:PiliPlus/pages/common/multi_select/base.dart';\nimport 'package:flutter/material.dart';\nimport 'package:g"
},
{
"path": "lib/common/widgets/avatars.dart",
"chars": 1504,
"preview": "import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';\nimport 'package:PiliPlus/models/model_owner.dart'"
},
{
"path": "lib/common/widgets/back_detector.dart",
"chars": 941,
"preview": "import 'package:flutter/gestures.dart' show kBackMouseButton;\nimport 'package:flutter/material.dart';\nimport 'package:fl"
},
{
"path": "lib/common/widgets/badge.dart",
"chars": 3425,
"preview": "import 'package:PiliPlus/models/common/badge_type.dart';\nimport 'package:PiliPlus/utils/extension/string_ext.dart';\nimpo"
},
{
"path": "lib/common/widgets/button/icon_button.dart",
"chars": 873,
"preview": "import 'package:flutter/material.dart';\n\nWidget iconButton({\n BuildContext? context,\n String? tooltip,\n required Widg"
},
{
"path": "lib/common/widgets/button/more_btn.dart",
"chars": 773,
"preview": "import 'package:flutter/material.dart';\n\nWidget moreTextButton({\n String text = '查看更多',\n required VoidCallback onTap,\n"
},
{
"path": "lib/common/widgets/button/toolbar_icon_button.dart",
"chars": 1026,
"preview": "import 'package:flutter/material.dart';\n\nclass ToolbarIconButton extends StatelessWidget {\n final VoidCallback? onPress"
},
{
"path": "lib/common/widgets/color_palette.dart",
"chars": 1878,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:flutter/material.dart';\n\nclass ColorPalette extends Sta"
},
{
"path": "lib/common/widgets/colored_box_transition.dart",
"chars": 406,
"preview": "import 'package:flutter/material.dart';\n\nclass ColoredBoxTransition extends AnimatedWidget {\n const ColoredBoxTransitio"
},
{
"path": "lib/common/widgets/cropped_image.dart",
"chars": 3793,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/custom_arc.dart",
"chars": 2471,
"preview": "import 'dart:math' show pi;\n\nimport 'package:flutter/widgets.dart';\n\nclass Arc extends LeafRenderObjectWidget {\n const "
},
{
"path": "lib/common/widgets/custom_height_widget.dart",
"chars": 2325,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter/rendering.dart' show RenderProxyBox, BoxHitTestResult;\n\n"
},
{
"path": "lib/common/widgets/custom_icon.dart",
"chars": 1838,
"preview": "// ignore_for_file: constant_identifier_names\n\nimport 'package:flutter/widgets.dart';\n\nclass CustomIcons {\n static cons"
},
{
"path": "lib/common/widgets/custom_toast.dart",
"chars": 1891,
"preview": "import 'package:PiliPlus/utils/storage_pref.dart';\nimport 'package:flutter/material.dart';\n\nclass CustomToast extends St"
},
{
"path": "lib/common/widgets/custom_tooltip.dart",
"chars": 8120,
"preview": "import 'package:PiliPlus/utils/platform_utils.dart';\nimport 'package:flutter/gestures.dart';\nimport 'package:flutter/ren"
},
{
"path": "lib/common/widgets/dialog/dialog.dart",
"chars": 2896,
"preview": "import 'package:flutter/material.dart';\nimport 'package:get/get.dart';\n\nFuture<bool> showConfirmDialog({\n required Buil"
},
{
"path": "lib/common/widgets/dialog/export_import.dart",
"chars": 7630,
"preview": "import 'dart:async' show FutureOr;\nimport 'dart:convert' show utf8, jsonDecode;\nimport 'dart:io' show File;\n\nimport 'pac"
},
{
"path": "lib/common/widgets/dialog/report.dart",
"chars": 7803,
"preview": "import 'package:PiliPlus/common/widgets/radio_widget.dart';\nimport 'package:PiliPlus/http/loading_state.dart';\nimport 'p"
},
{
"path": "lib/common/widgets/dialog/report_member.dart",
"chars": 5658,
"preview": "import 'package:PiliPlus/http/member.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter_smart_dialog"
},
{
"path": "lib/common/widgets/disabled_icon.dart",
"chars": 4388,
"preview": "import 'dart:math';\n\nimport 'package:flutter/material.dart';\nimport 'package:flutter/rendering.dart';\n\nclass DisabledIco"
},
{
"path": "lib/common/widgets/dynamic_sliver_app_bar/dynamic_sliver_app_bar.dart",
"chars": 15205,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/dynamic_sliver_app_bar/rendering/sliver_persistent_header.dart",
"chars": 7963,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/dynamic_sliver_app_bar/sliver_persistent_header.dart",
"chars": 3908,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/flutter/chat_list_view.dart",
"chars": 12610,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/draggable_sheet/draggable_scrollable_sheet_dyn.dart",
"chars": 43154,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/draggable_sheet/draggable_scrollable_sheet_topic.dart",
"chars": 43364,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/layout_builder.dart",
"chars": 18229,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/list_tile.dart",
"chars": 62525,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/page/page_view.dart",
"chars": 16476,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/page/scrollable.dart",
"chars": 68308,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/page/scrollable_helpers.dart",
"chars": 6946,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/page/tabs.dart",
"chars": 11663,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/pop_scope.dart",
"chars": 1816,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/popup_menu.dart",
"chars": 4493,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/refresh_indicator.dart",
"chars": 20105,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/selectable_text/selectable_region.dart",
"chars": 85971,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/selectable_text/selectable_text.dart",
"chars": 30168,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/selectable_text/selection_area.dart",
"chars": 5344,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/selectable_text/tap_and_drag.dart",
"chars": 41087,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/selectable_text/text.dart",
"chars": 963,
"preview": "import 'package:PiliPlus/common/widgets/flutter/selectable_text/selectable_text.dart';\nimport 'package:PiliPlus/common/w"
},
{
"path": "lib/common/widgets/flutter/selectable_text/text_selection.dart",
"chars": 16593,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/sliver_layout_builder.dart",
"chars": 2754,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/tabs.dart",
"chars": 11446,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text/paragraph.dart",
"chars": 143229,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text/rich_text.dart",
"chars": 12106,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text/text.dart",
"chars": 48774,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/adaptive_text_selection_toolbar.dart",
"chars": 13931,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/controller.dart",
"chars": 31077,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/flutter/text_field/cupertino/adaptive_text_selection_toolbar.dart",
"chars": 9990,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/cupertino/spell_check_suggestions_toolbar.dart",
"chars": 5917,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/cupertino/text_field.dart",
"chars": 73371,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/editable.dart",
"chars": 117551,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/editable_text.dart",
"chars": 264154,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/spell_check.dart",
"chars": 4321,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/spell_check_suggestions_toolbar.dart",
"chars": 9627,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/system_context_menu.dart",
"chars": 8660,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/text_field.dart",
"chars": 75060,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/text_field/text_selection.dart",
"chars": 135066,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/flutter/vertical_tabs.dart",
"chars": 84481,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart",
"chars": 1828,
"preview": "import 'package:PiliPlus/utils/storage_pref.dart';\nimport 'package:flutter/gestures.dart';\n\nclass CustomHorizontalDragGe"
},
{
"path": "lib/common/widgets/gesture/image_horizontal_drag_gesture_recognizer.dart",
"chars": 1208,
"preview": "import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart';\nimport 'package:flutter/gestur"
},
{
"path": "lib/common/widgets/gesture/immediate_tap_gesture_recognizer.dart",
"chars": 4267,
"preview": "import 'package:flutter/foundation.dart';\nimport 'package:flutter/gestures.dart';\n\nclass ImmediateTapGestureRecognizer e"
},
{
"path": "lib/common/widgets/gesture/mouse_interactive_viewer.dart",
"chars": 29298,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/gesture/tap_gesture_recognizer.dart",
"chars": 376,
"preview": "import 'package:flutter/gestures.dart' show TapGestureRecognizer;\n\nclass NoDeadlineTapGestureRecognizer extends TapGestu"
},
{
"path": "lib/common/widgets/image/cached_network_svg_image.dart",
"chars": 5485,
"preview": "// code from cached_network_svg_image;\n\nimport 'dart:developer';\n\nimport 'package:flutter/foundation.dart' show kDebugMo"
},
{
"path": "lib/common/widgets/image/image_save.dart",
"chars": 4303,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:PiliPlus/common/widgets/button/icon_button.dart';\nimpor"
},
{
"path": "lib/common/widgets/image/network_img_layer.dart",
"chars": 3777,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:PiliPlus/models/common/image_type.dart';\nimport 'packag"
},
{
"path": "lib/common/widgets/image_grid/image_grid_builder.dart",
"chars": 19118,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/image_grid/image_grid_view.dart",
"chars": 8796,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/image_viewer/gallery_viewer.dart",
"chars": 20114,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/image_viewer/hero.dart",
"chars": 657,
"preview": "import 'package:flutter/widgets.dart';\n\nWidget fromHero({\n required Object tag,\n required Widget child,\n}) => Hero(\n "
},
{
"path": "lib/common/widgets/image_viewer/hero_dialog_route.dart",
"chars": 1325,
"preview": "import 'package:flutter/material.dart';\n\n/// https://github.com/qq326646683/interactiveviewer_gallery\n\n/// A [PageRoute]"
},
{
"path": "lib/common/widgets/image_viewer/image.dart",
"chars": 18998,
"preview": "// Copyright 2014 The Flutter Authors. All rights reserved.\n// Use of this source code is governed by a BSD-style licens"
},
{
"path": "lib/common/widgets/image_viewer/loading_indicator.dart",
"chars": 3007,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/image_viewer/viewer.dart",
"chars": 14367,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/keep_alive_wrapper.dart",
"chars": 800,
"preview": "import 'package:flutter/material.dart';\n\nclass KeepAliveWrapper extends StatefulWidget {\n const KeepAliveWrapper({\n "
},
{
"path": "lib/common/widgets/loading_widget/http_error.dart",
"chars": 1883,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter_svg/flutter_svg.dart';\n\nclass HttpError extends Stateles"
},
{
"path": "lib/common/widgets/loading_widget/loading_widget.dart",
"chars": 746,
"preview": "import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';\nimport 'package:PiliPlus/common/widgets/loading"
},
{
"path": "lib/common/widgets/loading_widget/m3e_loading_indicator.dart",
"chars": 6490,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/loading_widget.dart",
"chars": 1195,
"preview": "import 'package:PiliPlus/common/widgets/custom_arc.dart';\nimport 'package:flutter/material.dart';\nimport 'package:get/ge"
},
{
"path": "lib/common/widgets/marquee.dart",
"chars": 11940,
"preview": "import 'package:flutter/foundation.dart';\nimport 'package:flutter/material.dart';\nimport 'package:flutter/rendering.dart"
},
{
"path": "lib/common/widgets/only_layout_widget.dart",
"chars": 1122,
"preview": "import 'package:flutter/material.dart';\nimport 'package:flutter/rendering.dart' show RenderProxyBox;\nimport 'package:flu"
},
{
"path": "lib/common/widgets/pair.dart",
"chars": 264,
"preview": "class Pair<T, R> {\n Pair({\n required this.first,\n required this.second,\n });\n T first;\n R second;\n}\n\nclass Tri"
},
{
"path": "lib/common/widgets/pendant_avatar.dart",
"chars": 5307,
"preview": "import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';\nimport 'package:PiliPlus/models/common/avatar_bad"
},
{
"path": "lib/common/widgets/player_bar.dart",
"chars": 4000,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/progress_bar/audio_video_progress_bar.dart",
"chars": 26367,
"preview": "import 'dart:math';\n\nimport 'package:flutter/foundation.dart';\nimport 'package:flutter/gestures.dart';\nimport 'package:f"
},
{
"path": "lib/common/widgets/progress_bar/segment_progress_bar.dart",
"chars": 9494,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/progress_bar/video_progress_indicator.dart",
"chars": 4063,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/radio_widget.dart",
"chars": 3799,
"preview": "import 'package:PiliPlus/utils/platform_utils.dart';\nimport 'package:flutter/material.dart';\n\nclass RadioWidget<T> exten"
},
{
"path": "lib/common/widgets/route_aware_mixin.dart",
"chars": 599,
"preview": "import 'package:flutter/widgets.dart';\nimport 'package:get/get_core/src/get_main.dart';\nimport 'package:get/get_navigati"
},
{
"path": "lib/common/widgets/scale_app.dart",
"chars": 4030,
"preview": "import 'dart:async' show scheduleMicrotask;\nimport 'dart:collection' show Queue;\nimport 'dart:ui' show PointerDataPacket"
},
{
"path": "lib/common/widgets/scroll_behavior.dart",
"chars": 650,
"preview": "import 'package:flutter/gestures.dart' show PointerDeviceKind;\nimport 'package:flutter/material.dart';\n\nclass CustomScro"
},
{
"path": "lib/common/widgets/scroll_physics.dart",
"chars": 2198,
"preview": "import 'package:PiliPlus/common/widgets/flutter/page/tabs.dart';\nimport 'package:PiliPlus/common/widgets/gesture/horizon"
},
{
"path": "lib/common/widgets/select_mask.dart",
"chars": 1061,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:flutter/material.dart';\n\nWidget selectMask(\n ThemeData"
},
{
"path": "lib/common/widgets/self_sized_horizontal_list.dart",
"chars": 1467,
"preview": "import 'package:PiliPlus/common/widgets/only_layout_widget.dart';\nimport 'package:flutter/material.dart';\n\nclass SelfSiz"
},
{
"path": "lib/common/widgets/sliver/sliver_floating_header.dart",
"chars": 4707,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/sliver/sliver_pinned_dynamic_header.dart",
"chars": 3588,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/sliver/sliver_pinned_header.dart",
"chars": 3542,
"preview": "/*\n * This file is part of PiliPlus\n *\n * PiliPlus is free software: you can redistribute it and/or modify\n * it under t"
},
{
"path": "lib/common/widgets/sliver_wrap.dart",
"chars": 9159,
"preview": "import 'dart:math' as math;\n\nimport 'package:flutter/rendering.dart';\nimport 'package:flutter/widgets.dart';\n\nclass Sliv"
},
{
"path": "lib/common/widgets/stat/stat.dart",
"chars": 942,
"preview": "import 'package:PiliPlus/models/common/stat_type.dart';\nimport 'package:PiliPlus/utils/num_utils.dart';\nimport 'package:"
},
{
"path": "lib/common/widgets/stateful_builder.dart",
"chars": 712,
"preview": "import 'package:flutter/material.dart';\n\nclass StatefulBuilder extends StatefulWidget {\n const StatefulBuilder({\n su"
},
{
"path": "lib/common/widgets/time_picker.dart",
"chars": 466,
"preview": "import 'package:flutter/material.dart' as material;\n\nFuture<material.TimeOfDay?> showTimePicker({\n required material.Bu"
},
{
"path": "lib/common/widgets/video_card/video_card_h.dart",
"chars": 10679,
"preview": "import 'package:PiliPlus/common/constants.dart';\nimport 'package:PiliPlus/common/widgets/badge.dart';\nimport 'package:Pi"
}
]
// ... and 1263 more files (download for full content)
About this extraction
This page contains the full source code of the bggRGjQaUbCoE/PiliPlus GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1463 files (14.7 MB), approximately 3.9M tokens, and a symbol index with 33922 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.