diff --git a/lib/pages/hot/controller.dart b/lib/pages/hot/controller.dart index de1d27d0..5d426e50 100644 --- a/lib/pages/hot/controller.dart +++ b/lib/pages/hot/controller.dart @@ -11,7 +11,7 @@ class HotController extends GetxController { RxList videoList = [].obs; bool isLoadingMore = false; bool flag = false; - OverlayEntry? popupDialog; + List popupDialog = []; // 获取推荐 Future queryHotFeed(type) async { diff --git a/lib/pages/hot/view.dart b/lib/pages/hot/view.dart index 0263a739..547aed6d 100644 --- a/lib/pages/hot/view.dart +++ b/lib/pages/hot/view.dart @@ -102,14 +102,12 @@ class _HotPageState extends State with AutomaticKeepAliveClientMixin { videoItem: _hotController.videoList[index], showPubdate: true, longPress: () { - _hotController.popupDialog = _createPopupDialog( - _hotController.videoList[index]); + _hotController.popupDialog + .add(_createPopupDialog(videoList[index])); Overlay.of(context) - .insert(_hotController.popupDialog!); - }, - longPressEnd: () { - _hotController.popupDialog?.remove(); + .insert(_hotController.popupDialog.last!); }, + longPressEnd: _removePopupDialog, ); }, childCount: _hotController.videoList.length), ), @@ -151,12 +149,19 @@ class _HotPageState extends State with AutomaticKeepAliveClientMixin { ); } + void _removePopupDialog() { + _hotController.popupDialog.last?.remove(); + _hotController.popupDialog.removeLast(); + } + OverlayEntry _createPopupDialog(videoItem) { return OverlayEntry( builder: (context) => AnimatedDialog( - closeFn: _hotController.popupDialog?.remove, + closeFn: _removePopupDialog, child: OverlayPop( - videoItem: videoItem, closeFn: _hotController.popupDialog?.remove), + videoItem: videoItem, + closeFn: _removePopupDialog, + ), ), ); } diff --git a/lib/pages/live/controller.dart b/lib/pages/live/controller.dart index af72c58a..252202f9 100644 --- a/lib/pages/live/controller.dart +++ b/lib/pages/live/controller.dart @@ -13,7 +13,7 @@ class LiveController extends GetxController { RxInt crossAxisCount = 2.obs; RxList liveList = [].obs; bool flag = false; - OverlayEntry? popupDialog; + List popupDialog = []; Box setting = GStorage.setting; @override diff --git a/lib/pages/live/view.dart b/lib/pages/live/view.dart index 35fe0d96..e67c26a9 100644 --- a/lib/pages/live/view.dart +++ b/lib/pages/live/view.dart @@ -128,12 +128,19 @@ class _LivePageState extends State ); } + void _removePopupDialog() { + _liveController.popupDialog.last?.remove(); + _liveController.popupDialog.removeLast(); + } + OverlayEntry _createPopupDialog(liveItem) { return OverlayEntry( builder: (context) => AnimatedDialog( - closeFn: _liveController.popupDialog?.remove, + closeFn: _removePopupDialog, child: OverlayPop( - videoItem: liveItem, closeFn: _liveController.popupDialog?.remove), + videoItem: liveItem, + closeFn: _removePopupDialog, + ), ), ); } @@ -153,13 +160,12 @@ class _LivePageState extends State ? LiveCardV( liveItem: liveList[index], longPress: () { - _liveController.popupDialog = - _createPopupDialog(liveList[index]); - Overlay.of(context).insert(_liveController.popupDialog!); - }, - longPressEnd: () { - _liveController.popupDialog?.remove(); + _liveController.popupDialog + .add(_createPopupDialog(liveList[index])); + Overlay.of(context) + .insert(_liveController.popupDialog.last!); }, + longPressEnd: _removePopupDialog, ) : const VideoCardVSkeleton(); }, diff --git a/lib/pages/rank/zone/controller.dart b/lib/pages/rank/zone/controller.dart index cc72d814..83b276a8 100644 --- a/lib/pages/rank/zone/controller.dart +++ b/lib/pages/rank/zone/controller.dart @@ -9,7 +9,7 @@ class ZoneController extends GetxController { RxList videoList = [].obs; bool isLoadingMore = false; bool flag = false; - OverlayEntry? popupDialog; + List popupDialog = []; int zoneID = 0; // 获取推荐 diff --git a/lib/pages/rank/zone/view.dart b/lib/pages/rank/zone/view.dart index 617d8e03..caef2ddd 100644 --- a/lib/pages/rank/zone/view.dart +++ b/lib/pages/rank/zone/view.dart @@ -104,14 +104,13 @@ class _ZonePageState extends State videoItem: _zoneController.videoList[index], showPubdate: true, longPress: () { - _zoneController.popupDialog = _createPopupDialog( - _zoneController.videoList[index]); + _zoneController.popupDialog.add( + _createPopupDialog( + _zoneController.videoList[index])); Overlay.of(context) - .insert(_zoneController.popupDialog!); - }, - longPressEnd: () { - _zoneController.popupDialog?.remove(); + .insert(_zoneController.popupDialog.last!); }, + longPressEnd: _removePopupDialog, ); }, childCount: _zoneController.videoList.length), ), @@ -154,12 +153,19 @@ class _ZonePageState extends State ); } + void _removePopupDialog() { + _zoneController.popupDialog.last?.remove(); + _zoneController.popupDialog.removeLast(); + } + OverlayEntry _createPopupDialog(videoItem) { return OverlayEntry( builder: (context) => AnimatedDialog( - closeFn: _zoneController.popupDialog?.remove, + closeFn: _removePopupDialog, child: OverlayPop( - videoItem: videoItem, closeFn: _zoneController.popupDialog?.remove), + videoItem: videoItem, + closeFn: _removePopupDialog, + ), ), ); } diff --git a/lib/pages/rcmd/controller.dart b/lib/pages/rcmd/controller.dart index 34c172b0..cf6e71c9 100644 --- a/lib/pages/rcmd/controller.dart +++ b/lib/pages/rcmd/controller.dart @@ -13,7 +13,7 @@ class RcmdController extends GetxController { int _currentPage = 0; // RxList appVideoList = [].obs; // RxList webVideoList = [].obs; - OverlayEntry? popupDialog; + List popupDialog = []; Box setting = GStorage.setting; RxInt crossAxisCount = 2.obs; late bool enableSaveLastData; diff --git a/lib/pages/rcmd/view.dart b/lib/pages/rcmd/view.dart index 51db18b7..61594a4b 100644 --- a/lib/pages/rcmd/view.dart +++ b/lib/pages/rcmd/view.dart @@ -128,12 +128,19 @@ class _RcmdPageState extends State ); } + void _removePopupDialog() { + _rcmdController.popupDialog.last?.remove(); + _rcmdController.popupDialog.removeLast(); + } + OverlayEntry _createPopupDialog(videoItem) { return OverlayEntry( builder: (context) => AnimatedDialog( - closeFn: _rcmdController.popupDialog?.remove, + closeFn: _removePopupDialog, child: OverlayPop( - videoItem: videoItem, closeFn: _rcmdController.popupDialog?.remove), + videoItem: videoItem, + closeFn: _removePopupDialog, + ), ), ); } @@ -156,13 +163,12 @@ class _RcmdPageState extends State ? VideoCardV( videoItem: videoList[index], longPress: () { - _rcmdController.popupDialog = - _createPopupDialog(videoList[index]); - Overlay.of(context).insert(_rcmdController.popupDialog!); - }, - longPressEnd: () { - _rcmdController.popupDialog?.remove(); + _rcmdController.popupDialog + .add(_createPopupDialog(videoList[index])); + Overlay.of(context) + .insert(_rcmdController.popupDialog.last!); }, + longPressEnd: _removePopupDialog, ) : const VideoCardVSkeleton(); }, diff --git a/lib/pages/video/detail/related/controller.dart b/lib/pages/video/detail/related/controller.dart index f3257b10..3487fc6e 100644 --- a/lib/pages/video/detail/related/controller.dart +++ b/lib/pages/video/detail/related/controller.dart @@ -10,7 +10,7 @@ class RelatedController extends GetxController { // 推荐视频列表 RxList relatedVideoList = [].obs; - OverlayEntry? popupDialog; + List popupDialog = []; Future queryRelatedVideo() async { return VideoHttp.relatedVideoList(bvid: bvid).then((value) { diff --git a/lib/pages/video/detail/related/view.dart b/lib/pages/video/detail/related/view.dart index 390121b7..1aded8c8 100644 --- a/lib/pages/video/detail/related/view.dart +++ b/lib/pages/video/detail/related/view.dart @@ -65,18 +65,16 @@ class _RelatedVideoPanelState extends State showPubdate: true, longPress: () { try { - _relatedController.popupDialog = + _relatedController.popupDialog.add( _createPopupDialog(_relatedController - .relatedVideoList[index]); - Overlay.of(context) - .insert(_relatedController.popupDialog!); + .relatedVideoList[index])); + Overlay.of(context).insert( + _relatedController.popupDialog.last!); } catch (err) { return {}; } }, - longPressEnd: () { - _relatedController.popupDialog?.remove(); - }, + longPressEnd: _removePopupDialog, ), ); } @@ -110,13 +108,19 @@ class _RelatedVideoPanelState extends State )); } + void _removePopupDialog() { + _relatedController.popupDialog.last?.remove(); + _relatedController.popupDialog.removeLast(); + } + OverlayEntry _createPopupDialog(videoItem) { return OverlayEntry( builder: (BuildContext context) => AnimatedDialog( - closeFn: _relatedController.popupDialog?.remove, + closeFn: _removePopupDialog, child: OverlayPop( - videoItem: videoItem, - closeFn: _relatedController.popupDialog?.remove), + videoItem: videoItem, + closeFn: _removePopupDialog, + ), ), ); }