diff --git a/lib/pages/fav_detail/controller.dart b/lib/pages/fav_detail/controller.dart index c8e3ed4b2..37c0910f6 100644 --- a/lib/pages/fav_detail/controller.dart +++ b/lib/pages/fav_detail/controller.dart @@ -85,6 +85,8 @@ class FavDetailController AccountService accountService = Get.find(); + late final RxBool isPlayAll = true.obs; + @override void onInit() { super.onInit(); @@ -206,16 +208,18 @@ class FavDetailController cid: item.ugc!.firstCid!, cover: item.cover, title: item.title, - extraArguments: { - 'sourceType': SourceType.fav, - 'mediaId': folder.id, - 'oid': item.id, - 'favTitle': folder.title, - 'count': folder.mediaCount, - 'desc': true, - if (index != null) 'isContinuePlaying': index != 0, - 'isOwner': isOwner, - }, + extraArguments: isPlayAll.value + ? { + 'sourceType': SourceType.fav, + 'mediaId': folder.id, + 'oid': item.id, + 'favTitle': folder.title, + 'count': folder.mediaCount, + 'desc': true, + if (index != null) 'isContinuePlaying': index != 0, + 'isOwner': isOwner, + } + : null, ); } } diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index 3a0b3a78f..4a10023b8 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -60,10 +60,27 @@ class _FavDetailPageState extends State with GridMixin { resizeToAvoidBottomInset: false, floatingActionButton: Obx( () => _favDetailController.folderInfo.value.mediaCount > 0 - ? FloatingActionButton.extended( - onPressed: _favDetailController.toViewPlayAll, - label: const Text('播放全部'), - icon: const Icon(Icons.playlist_play), + ? AnimatedSlide( + offset: _favDetailController.isPlayAll.value + ? Offset.zero + : const Offset(0.75, 0), + duration: const Duration(milliseconds: 120), + child: GestureDetector( + onHorizontalDragUpdate: (details) => + _favDetailController.isPlayAll.value = + details.delta.dx < 0, + child: FloatingActionButton.extended( + onPressed: () { + if (_favDetailController.isPlayAll.value) { + _favDetailController.toViewPlayAll(); + } else { + _favDetailController.isPlayAll.value = true; + } + }, + label: const Text('播放全部'), + icon: const Icon(Icons.playlist_play), + ), + ), ) : const SizedBox.shrink(), ), diff --git a/lib/pages/later/base_controller.dart b/lib/pages/later/base_controller.dart index 7c45be0fd..663e29088 100644 --- a/lib/pages/later/base_controller.dart +++ b/lib/pages/later/base_controller.dart @@ -8,4 +8,6 @@ class LaterBaseController extends GetxController { RxMap counts = { for (final item in LaterViewType.values) item: -1, }.obs; + + late final RxBool isPlayAll = true.obs; } diff --git a/lib/pages/later/child_view.dart b/lib/pages/later/child_view.dart index 071cb1415..934efd056 100644 --- a/lib/pages/later/child_view.dart +++ b/lib/pages/later/child_view.dart @@ -4,8 +4,10 @@ import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/later_view_type.dart'; import 'package:PiliPlus/models/common/video/source_type.dart'; import 'package:PiliPlus/models_new/later/list.dart'; +import 'package:PiliPlus/pages/later/base_controller.dart'; import 'package:PiliPlus/pages/later/controller.dart'; import 'package:PiliPlus/pages/later/widgets/video_card_h_later.dart'; +import 'package:PiliPlus/utils/extension.dart'; import 'package:PiliPlus/utils/grid.dart'; import 'package:PiliPlus/utils/page_utils.dart'; import 'package:flutter/material.dart'; @@ -29,6 +31,7 @@ class _LaterViewChildPageState extends State LaterController(widget.laterViewType), tag: widget.laterViewType.type.toString(), ); + late final _baseCtr = Get.putOrFind(LaterBaseController.new); @override Widget build(BuildContext context) { @@ -75,17 +78,19 @@ class _LaterViewChildPageState extends State cid: cid, cover: videoItem.pic, title: videoItem.title, - extraArguments: { - 'oid': videoItem.aid, - 'sourceType': SourceType.watchLater, - 'count': _laterController - .baseCtr - .counts[LaterViewType.all], - 'favTitle': '稍后再看', - 'mediaId': _laterController.accountService.mid, - 'desc': false, - 'isContinuePlaying': index != 0, - }, + extraArguments: _baseCtr.isPlayAll.value + ? { + 'oid': videoItem.aid, + 'sourceType': SourceType.watchLater, + 'count': _laterController + .baseCtr + .counts[LaterViewType.all], + 'favTitle': '稍后再看', + 'mediaId': _laterController.accountService.mid, + 'desc': false, + 'isContinuePlaying': index != 0, + } + : null, ); }, ); diff --git a/lib/pages/later/view.dart b/lib/pages/later/view.dart index d179bce31..160f70f7b 100644 --- a/lib/pages/later/view.dart +++ b/lib/pages/later/view.dart @@ -73,10 +73,26 @@ class _LaterPageState extends State appBar: _buildAppbar(enableMultiSelect), floatingActionButton: Obx( () => currCtr().loadingState.value.isSuccess - ? FloatingActionButton.extended( - onPressed: currCtr().toViewPlayAll, - label: const Text('播放全部'), - icon: const Icon(Icons.playlist_play), + ? AnimatedSlide( + offset: _baseCtr.isPlayAll.value + ? Offset.zero + : const Offset(0.75, 0), + duration: const Duration(milliseconds: 120), + child: GestureDetector( + onHorizontalDragUpdate: (details) => + _baseCtr.isPlayAll.value = details.delta.dx < 0, + child: FloatingActionButton.extended( + onPressed: () { + if (_baseCtr.isPlayAll.value) { + currCtr().toViewPlayAll(); + } else { + _baseCtr.isPlayAll.value = true; + } + }, + label: const Text('播放全部'), + icon: const Icon(Icons.playlist_play), + ), + ), ) : const SizedBox.shrink(), ),