mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 03:06:59 +08:00
refa player (#1848)
* tweak
* Reapply "opt: audio uri" (#1833)
This reverts commit 8e726f49b2.
* opt: player
* opt: player
* refa: create player
* refa: player
* opt: UaType
* fix: sb seek preview
* opt: setSub
* fix: screenshot
* opt: unnecessary final player state
* opt: player track
* opt FileSource constructor [skip ci]
* fixes
* fix: dispose player
* fix: quote
* update
* fix: multi ua & remove unused loop
* remove unneeded check [skip ci]
---------
Co-authored-by: dom <githubaccount56556@proton.me>
This commit is contained in:
committed by
GitHub
parent
6782bee11a
commit
7276cde48a
@@ -72,11 +72,9 @@ class _GalleryViewerState extends State<GalleryViewer>
|
||||
late final RxInt _currIndex;
|
||||
GlobalKey? _key;
|
||||
|
||||
late bool _hasInit = false;
|
||||
Player? _player;
|
||||
Player get _effectivePlayer => _player ??= Player();
|
||||
VideoController? _videoController;
|
||||
VideoController get _effectiveVideoController =>
|
||||
_videoController ??= VideoController(_effectivePlayer);
|
||||
|
||||
late final PageController _pageController;
|
||||
|
||||
@@ -99,6 +97,23 @@ class _GalleryViewerState extends State<GalleryViewer>
|
||||
: url.http2https;
|
||||
}
|
||||
|
||||
Future<void> _initPlayer() async {
|
||||
assert(_player == null);
|
||||
final player = await Player.create();
|
||||
_videoController = await VideoController.create(player);
|
||||
if (!mounted) {
|
||||
player.dispose();
|
||||
_videoController = null;
|
||||
return;
|
||||
}
|
||||
_player = player;
|
||||
final currItem = widget.sources[_currIndex.value];
|
||||
if (currItem.sourceType == .livePhoto) {
|
||||
player.open(Media(currItem.liveUrl!));
|
||||
_currIndex.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
@@ -230,7 +245,6 @@ class _GalleryViewerState extends State<GalleryViewer>
|
||||
..onDoubleTap = null
|
||||
..dispose();
|
||||
_longPressGestureRecognizer.dispose();
|
||||
_currIndex.close();
|
||||
if (widget.quality != _quality) {
|
||||
for (final item in widget.sources) {
|
||||
if (item.sourceType == SourceType.networkImage) {
|
||||
@@ -238,6 +252,7 @@ class _GalleryViewerState extends State<GalleryViewer>
|
||||
}
|
||||
}
|
||||
}
|
||||
Future.delayed(const Duration(milliseconds: 200), _currIndex.close);
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@@ -317,7 +332,12 @@ class _GalleryViewerState extends State<GalleryViewer>
|
||||
|
||||
void _playIfNeeded(SourceModel item) {
|
||||
if (item.sourceType == .livePhoto) {
|
||||
_effectivePlayer.open(Media(item.liveUrl!));
|
||||
if (_player != null) {
|
||||
_player!.open(Media(item.liveUrl!));
|
||||
} else if (!_hasInit) {
|
||||
_hasInit = true;
|
||||
_initPlayer();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -421,7 +441,7 @@ class _GalleryViewerState extends State<GalleryViewer>
|
||||
case SourceType.livePhoto:
|
||||
child = Obx(
|
||||
key: _key,
|
||||
() => _currIndex.value == index
|
||||
() => _currIndex.value == index && _videoController != null
|
||||
? Viewer(
|
||||
minScale: widget.minScale,
|
||||
maxScale: widget.maxScale,
|
||||
@@ -434,9 +454,9 @@ class _GalleryViewerState extends State<GalleryViewer>
|
||||
horizontalDragGestureRecognizer:
|
||||
_horizontalDragGestureRecognizer,
|
||||
onChangePage: _onChangePage,
|
||||
child: AbsorbPointer(
|
||||
child: Video(
|
||||
controller: _effectiveVideoController,
|
||||
child: FittedBox(
|
||||
child: SimpleVideo(
|
||||
controller: _videoController!,
|
||||
fill: Colors.transparent,
|
||||
),
|
||||
),
|
||||
|
||||
Reference in New Issue
Block a user