diff --git a/lib/widgets/viewer/visual/entry_page_view.dart b/lib/widgets/viewer/visual/entry_page_view.dart index 854b01390..78ad051eb 100644 --- a/lib/widgets/viewer/visual/entry_page_view.dart +++ b/lib/widgets/viewer/visual/entry_page_view.dart @@ -2,10 +2,13 @@ import 'dart:async'; import 'package:aves/image_providers/uri_picture_provider.dart'; import 'package:aves/model/entry.dart'; +import 'package:aves/model/entry_images.dart'; import 'package:aves/model/multipage.dart'; import 'package:aves/model/settings/entry_background.dart'; import 'package:aves/model/settings/enums.dart'; import 'package:aves/model/settings/settings.dart'; +import 'package:aves/theme/durations.dart'; +import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/common/magnifier/controller/controller.dart'; import 'package:aves/widgets/common/magnifier/controller/state.dart'; import 'package:aves/widgets/common/magnifier/magnifier.dart'; @@ -194,11 +197,38 @@ class _EntryPageViewState extends State { Widget _buildVideoView() { final videoController = widget.videoControllers.firstWhere((kv) => kv.item1 == entry.uri, orElse: () => null)?.item2; if (videoController == null) return SizedBox(); - return _buildMagnifier( - child: VideoView( - entry: entry, - controller: videoController, - ), + return Stack( + fit: StackFit.expand, + children: [ + _buildMagnifier( + child: VideoView( + entry: entry, + controller: videoController, + ), + ), + // fade out image to ease transition with the player + StreamBuilder( + stream: videoController.statusStream, + builder: (context, snapshot) { + final showCover = videoController.isPlayable; + return IgnorePointer( + ignoring: showCover, + child: AnimatedOpacity( + opacity: showCover ? 0 : 1, + curve: Curves.easeInCirc, + duration: Durations.viewerVideoPlayerTransition, + child: GestureDetector( + onTap: _onTap, + child: Image( + image: entry.getBestThumbnail(settings.getTileExtent(CollectionPage.routeName)), + fit: BoxFit.contain, + ), + ), + ), + ); + }, + ), + ], ); } diff --git a/lib/widgets/viewer/visual/video.dart b/lib/widgets/viewer/visual/video.dart index 5c809c6ce..779015295 100644 --- a/lib/widgets/viewer/visual/video.dart +++ b/lib/widgets/viewer/visual/video.dart @@ -1,10 +1,4 @@ -import 'dart:ui'; - import 'package:aves/model/entry.dart'; -import 'package:aves/model/entry_images.dart'; -import 'package:aves/model/settings/settings.dart'; -import 'package:aves/theme/durations.dart'; -import 'package:aves/widgets/collection/collection_page.dart'; import 'package:aves/widgets/common/video/controller.dart'; import 'package:flutter/material.dart'; @@ -60,22 +54,7 @@ class _VideoViewState extends State { return StreamBuilder( stream: controller.statusStream, builder: (context, snapshot) { - return Stack( - fit: StackFit.expand, - children: [ - if (controller.isPlayable) controller.buildPlayerWidget(context, entry), - // fade out image to ease transition with the player as it starts with a black texture - AnimatedOpacity( - opacity: controller.isPlayable ? 0 : 1, - curve: Curves.easeInCirc, - duration: Durations.viewerVideoPlayerTransition, - child: Image( - image: entry.getBestThumbnail(settings.getTileExtent(CollectionPage.routeName)), - fit: BoxFit.fill, - ), - ), - ], - ); + return controller.isPlayable ? controller.buildPlayerWidget(context, entry) : SizedBox(); }); }