168 lines
3.8 KiB
Dart
168 lines
3.8 KiB
Dart
// Author: fruit.com.cn
|
|
|
|
import 'dart:ui';
|
|
|
|
import 'package:flutter/foundation.dart';
|
|
import 'package:video_player/video_player.dart';
|
|
|
|
import '../../../core/data/models/drama.dart';
|
|
import '../../../core/data/services/playback_thumbnail_service.dart';
|
|
import '../../../core/data/services/sprite_thumbnail_axis.dart';
|
|
import '../../../l10n/app_localizations.dart';
|
|
|
|
/// 播放浮层展示数据。
|
|
class PlayerOverlayData {
|
|
/// 创建播放浮层数据。
|
|
const PlayerOverlayData({
|
|
required this.l10n,
|
|
required this.drama,
|
|
required this.episode,
|
|
required this.controller,
|
|
required this.liked,
|
|
required this.likeCount,
|
|
required this.commentCount,
|
|
required this.favoriteCount,
|
|
required this.saved,
|
|
required this.playing,
|
|
required this.playbackSpeed,
|
|
required this.totalEpisodes,
|
|
required this.boosting,
|
|
required this.locked,
|
|
this.thumbnailService,
|
|
this.spriteAxisService,
|
|
this.authorNote = '',
|
|
});
|
|
|
|
/// 当前语言包。
|
|
final AppLocalizations l10n;
|
|
|
|
/// 当前短剧。
|
|
final Drama drama;
|
|
|
|
/// 当前剧集。
|
|
final Episode episode;
|
|
|
|
/// 当前播放器进度。
|
|
final ValueListenable<VideoPlayerValue>? controller;
|
|
|
|
/// 是否已点赞。
|
|
final bool liked;
|
|
|
|
/// 点赞数;未知时隐藏。
|
|
final int? likeCount;
|
|
|
|
/// 评论数;未知时隐藏。
|
|
final int? commentCount;
|
|
|
|
/// 收藏数;未知时隐藏。
|
|
final int? favoriteCount;
|
|
|
|
/// 是否已收藏。
|
|
final bool saved;
|
|
|
|
/// 是否处于播放状态。
|
|
final bool playing;
|
|
|
|
/// 当前倍速。
|
|
final double playbackSpeed;
|
|
|
|
/// 可见集数量。
|
|
final int totalEpisodes;
|
|
|
|
/// 是否处于长按加速态。
|
|
final bool boosting;
|
|
|
|
/// 当前剧集是否锁定。
|
|
final bool locked;
|
|
|
|
/// 拖动进度时按当前集和时间点取帧。
|
|
final PlaybackThumbnailService? thumbnailService;
|
|
final SpriteThumbnailAxisService? spriteAxisService;
|
|
|
|
/// 作者声明;没有后端字段时为空。
|
|
final String authorNote;
|
|
}
|
|
|
|
/// 播放浮层动作集合。
|
|
class PlayerOverlayActions {
|
|
/// 创建动作集合。
|
|
const PlayerOverlayActions({
|
|
required this.onBack,
|
|
required this.onTogglePlay,
|
|
this.onDoubleTapLike,
|
|
required this.onClear,
|
|
required this.onExitClear,
|
|
required this.onDetail,
|
|
required this.onSpeed,
|
|
required this.onEpisodes,
|
|
required this.onComments,
|
|
required this.onLike,
|
|
required this.onSave,
|
|
required this.onShare,
|
|
required this.onMore,
|
|
required this.onScrubStart,
|
|
required this.onScrubEnd,
|
|
required this.onSeek,
|
|
required this.onLongPressCenter,
|
|
required this.onBoostStart,
|
|
required this.onBoostEnd,
|
|
});
|
|
|
|
/// 返回上一页。
|
|
final VoidCallback? onBack;
|
|
|
|
/// 切换播放状态。
|
|
final VoidCallback onTogglePlay;
|
|
|
|
/// 双击画面点赞;位置用于飘心。
|
|
final ValueChanged<Offset>? onDoubleTapLike;
|
|
|
|
/// 进入清屏。
|
|
final VoidCallback onClear;
|
|
|
|
/// 退出清屏。
|
|
final VoidCallback onExitClear;
|
|
|
|
/// 打开详情。
|
|
final VoidCallback onDetail;
|
|
|
|
/// 打开顶部倍速入口。
|
|
final VoidCallback onSpeed;
|
|
|
|
/// 打开选集。
|
|
final VoidCallback onEpisodes;
|
|
|
|
/// 打开评论。
|
|
final VoidCallback onComments;
|
|
|
|
/// 切换点赞。
|
|
final VoidCallback onLike;
|
|
|
|
/// 切换收藏。
|
|
final VoidCallback onSave;
|
|
|
|
/// 分享。
|
|
final VoidCallback onShare;
|
|
|
|
/// 打开更多面板。
|
|
final VoidCallback onMore;
|
|
|
|
/// 开始拖动进度。
|
|
final VoidCallback? onScrubStart;
|
|
|
|
/// 结束拖动进度。
|
|
final VoidCallback? onScrubEnd;
|
|
|
|
/// 提交进度跳转。
|
|
final Future<void> Function(Duration)? onSeek;
|
|
|
|
/// 长按画面中间:弹出更多面板。
|
|
final VoidCallback onLongPressCenter;
|
|
|
|
/// 长按画面两侧:开始加速。
|
|
final VoidCallback onBoostStart;
|
|
|
|
/// 长按结束或取消:结束加速。
|
|
final VoidCallback onBoostEnd;
|
|
}
|