feat(flutter): 重构播放页并增加语言切换

This commit is contained in:
Zhou Weidong committed 2026-10-20 11:01:38 +08:00
1 parent f1efbc5be8
commit 8c43e9e385
34 files changed
+1331 -879

No files matched your search

+13 -7
View File
@@ -32,9 +32,7 @@ import 'widgets/player_more_sheet.dart';
import 'widgets/player_overlay.dart';
import 'widgets/player_overlay_models.dart';
import 'widgets/player_speed_sheet.dart';
import 'widgets/player_text_size_sheet.dart';
import 'widgets/player_unlock_sheet.dart';
import 'widgets/quality_sheet.dart';
import '../../core/data/repositories/watch_history_repository.dart';
import '../../core/data/repositories/playback_repository.dart';
@@ -86,7 +84,7 @@ class _PlayerPageState extends State<PlayerPage> with WidgetsBindingObserver {
late final PlayerLogic logic;
bool _chromeVisible = true;
double _playbackSpeed = 1.0;
double _textScale = playerTextSizeStandard;
double _textScale = 1.0;
@override
void initState() {
@@ -132,6 +130,10 @@ class _PlayerPageState extends State<PlayerPage> with WidgetsBindingObserver {
setState(() => _textScale = value);
}
void _hideChrome() {
setState(() => _chromeVisible = false);
}
@override
Widget build(BuildContext context) {
return ListenableBuilder(
@@ -403,10 +405,12 @@ class _PlayerPageState extends State<PlayerPage> with WidgetsBindingObserver {
controller: ready ? videoPort!.controller : null,
liked: interactions.isLiked(drama.id),
likeCount: interactions.likeCount(drama.id),
commentCount: null,
favoriteCount: null,
saved: context.watch<FavoriteController>().isSaved(drama.id),
playing: logic.session.userWantsPlay,
playbackSpeed: _playbackSpeed,
textScale: _textScale,
currentIndex: logic.session.currentIndex,
totalEpisodes: logic.visibleIndices.length,
),
actions: PlayerOverlayActions(
@@ -417,16 +421,18 @@ class _PlayerPageState extends State<PlayerPage> with WidgetsBindingObserver {
logic.session.setUserWantsPlay(!logic.session.userWantsPlay),
onClear: () => setState(() => _chromeVisible = false),
onExitClear: () => setState(() => _chromeVisible = true),
onDetail: () => unawaited(logic.openDetail(context)),
onSpeed: () => unawaited(_openSpeedSheet(context)),
onEpisodes: () => logic.showEpisodes(context),
onNext: logic.hasNextEpisode
? () => unawaited(logic.playNextEpisode())
: null,
onComments: () => logic.showComments(context, drama),
onLike: () =>
unawaited(_toggleLike(context, interactions, drama)),
onSave: () => unawaited(_toggleSave(context, drama)),
onShare: () => logic.shareDrama(context, drama),
onMore: () => _openMore(context, drama, episode),
onPip: logic.pictureInPicture.isPlatformSupported
? () => unawaited(logic.enterPip(context))
: null,
onScrubStart: ready ? () => logic.beginScrub(videoPort!) : null,
onSeek: ready
? (position) => logic.seekTo(context, videoPort!, position)