diff --git a/lib/pages/fav_detail/view.dart b/lib/pages/fav_detail/view.dart index 8ae5e0d57..bc60e9732 100644 --- a/lib/pages/fav_detail/view.dart +++ b/lib/pages/fav_detail/view.dart @@ -6,7 +6,6 @@ import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart'; import 'package:PiliPlus/http/fav.dart'; import 'package:PiliPlus/http/loading_state.dart'; import 'package:PiliPlus/models/common/fav_order_type.dart'; -import 'package:PiliPlus/models_new/fav/fav_detail/data.dart'; import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; import 'package:PiliPlus/models_new/fav/fav_folder/list.dart'; import 'package:PiliPlus/pages/dynamics_repost/view.dart'; @@ -305,64 +304,48 @@ class _FavDetailPageState extends State with GridMixin { ]; } - List _selectActions(ThemeData theme) => [ - TextButton( - style: TextButton.styleFrom( - visualDensity: VisualDensity.compact, + List _selectActions(ThemeData theme) { + final btnStyle = TextButton.styleFrom(visualDensity: .compact); + final textStyle = TextStyle(color: theme.colorScheme.onSurfaceVariant); + return [ + TextButton( + style: btnStyle, + onPressed: () => _favDetailController.handleSelect(checked: true), + child: const Text('全选'), ), - onPressed: () => _favDetailController.handleSelect(checked: true), - child: const Text('全选'), - ), - TextButton( - style: TextButton.styleFrom( - visualDensity: VisualDensity.compact, + TextButton( + style: btnStyle, + onPressed: () => RequestUtils.onCopyOrMove( + context: context, + isCopy: true, + ctr: _favDetailController, + mediaId: _favDetailController.mediaId, + mid: _favDetailController.account.mid, + ), + child: Text('复制', style: textStyle), ), - onPressed: () => - RequestUtils.onCopyOrMove( - context: context, - isCopy: true, - ctr: _favDetailController, - mediaId: _favDetailController.mediaId, - mid: _favDetailController.account.mid, - ), - child: Text( - '复制', - style: TextStyle( - color: theme.colorScheme.onSurfaceVariant, + TextButton( + style: btnStyle, + onPressed: () => RequestUtils.onCopyOrMove( + context: context, + isCopy: false, + ctr: _favDetailController, + mediaId: _favDetailController.mediaId, + mid: _favDetailController.account.mid, + ), + child: Text('移动', style: textStyle), + ), + TextButton( + style: btnStyle, + onPressed: _favDetailController.onRemove, + child: Text( + '删除', + style: TextStyle(color: theme.colorScheme.error), ), ), - ), - TextButton( - style: TextButton.styleFrom( - visualDensity: VisualDensity.compact, - ), - onPressed: () => - RequestUtils.onCopyOrMove( - context: context, - isCopy: false, - ctr: _favDetailController, - mediaId: _favDetailController.mediaId, - mid: _favDetailController.account.mid, - ), - child: Text( - '移动', - style: TextStyle( - color: theme.colorScheme.onSurfaceVariant, - ), - ), - ), - TextButton( - style: TextButton.styleFrom( - visualDensity: VisualDensity.compact, - ), - onPressed: _favDetailController.onRemove, - child: Text( - '删除', - style: TextStyle(color: theme.colorScheme.error), - ), - ), - const SizedBox(width: 10), - ]; + const SizedBox(width: 10), + ]; + } Widget _flexibleSpace(ThemeData theme) { final style = TextStyle( diff --git a/lib/pages/fav_search/view.dart b/lib/pages/fav_search/view.dart index 7317afa5d..db843841a 100644 --- a/lib/pages/fav_search/view.dart +++ b/lib/pages/fav_search/view.dart @@ -4,7 +4,9 @@ import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; import 'package:PiliPlus/pages/common/search/common_search_page.dart'; import 'package:PiliPlus/pages/fav_detail/widget/fav_video_card.dart'; import 'package:PiliPlus/pages/fav_search/controller.dart'; +import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/grid.dart'; +import 'package:PiliPlus/utils/request_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -29,6 +31,38 @@ class _FavSearchPageState tag: Utils.generateRandomString(8), ); + @override + List? get multiSelectActions { + final btnStyle = TextButton.styleFrom(visualDensity: .compact); + final textStyle = TextStyle( + color: ColorScheme.of(context).onSurfaceVariant, + ); + return [ + TextButton( + style: btnStyle, + onPressed: () => RequestUtils.onCopyOrMove( + context: context, + isCopy: true, + ctr: controller, + mediaId: controller.mediaId, + mid: Accounts.main.mid, + ), + child: Text('复制', style: textStyle), + ), + TextButton( + style: btnStyle, + onPressed: () => RequestUtils.onCopyOrMove( + context: context, + isCopy: false, + ctr: controller, + mediaId: controller.mediaId, + mid: Accounts.main.mid, + ), + child: Text('移动', style: textStyle), + ), + ]; + } + @override List? get extraActions => [ Obx( diff --git a/lib/pages/later/view.dart b/lib/pages/later/view.dart index 05c4add0b..b55c0e0d1 100644 --- a/lib/pages/later/view.dart +++ b/lib/pages/later/view.dart @@ -4,7 +4,6 @@ import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recogniz import 'package:PiliPlus/common/widgets/scroll_physics.dart'; import 'package:PiliPlus/common/widgets/view_safe_area.dart'; import 'package:PiliPlus/models/common/later_view_type.dart'; -import 'package:PiliPlus/models_new/later/data.dart'; import 'package:PiliPlus/models_new/later/list.dart'; import 'package:PiliPlus/pages/fav_detail/view.dart'; import 'package:PiliPlus/pages/later/base_controller.dart'; @@ -154,16 +153,17 @@ class _LaterPageState extends State PreferredSizeWidget _buildAppbar(bool enableMultiSelect) { final theme = Theme.of(context); Color color = theme.colorScheme.secondary; - + final btnStyle = TextButton.styleFrom(visualDensity: .compact); + final textStyle = TextStyle(color: theme.colorScheme.onSurfaceVariant); return MultiSelectAppBarWidget( visible: enableMultiSelect, ctr: currCtr(), actions: [ TextButton( - style: TextButton.styleFrom(visualDensity: .compact), + style: btnStyle, onPressed: () { final ctr = currCtr(); - RequestUtils.onCopyOrMove( + RequestUtils.onCopyOrMove( context: context, isCopy: true, ctr: ctr, @@ -171,16 +171,13 @@ class _LaterPageState extends State mid: ctr.mid, ); }, - child: Text( - '复制', - style: TextStyle(color: theme.colorScheme.onSurfaceVariant), - ), + child: Text('复制', style: textStyle), ), TextButton( - style: TextButton.styleFrom(visualDensity: .compact), + style: btnStyle, onPressed: () { final ctr = currCtr(); - RequestUtils.onCopyOrMove( + RequestUtils.onCopyOrMove( context: context, isCopy: false, ctr: ctr, @@ -188,10 +185,7 @@ class _LaterPageState extends State mid: ctr.mid, ); }, - child: Text( - '移动', - style: TextStyle(color: theme.colorScheme.onSurfaceVariant), - ), + child: Text('移动', style: textStyle), ), ], child: AppBar( diff --git a/lib/pages/later_search/view.dart b/lib/pages/later_search/view.dart index d7069ceed..e142abd11 100644 --- a/lib/pages/later_search/view.dart +++ b/lib/pages/later_search/view.dart @@ -6,6 +6,7 @@ import 'package:PiliPlus/pages/later/widgets/video_card_h_later.dart'; import 'package:PiliPlus/pages/later_search/controller.dart'; import 'package:PiliPlus/utils/grid.dart'; import 'package:PiliPlus/utils/page_utils.dart'; +import 'package:PiliPlus/utils/request_utils.dart'; import 'package:PiliPlus/utils/utils.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; @@ -25,6 +26,38 @@ class _LaterSearchPageState tag: Utils.generateRandomString(8), ); + @override + List? get multiSelectActions { + final btnStyle = TextButton.styleFrom(visualDensity: .compact); + final textStyle = TextStyle( + color: ColorScheme.of(context).onSurfaceVariant, + ); + return [ + TextButton( + style: btnStyle, + onPressed: () => RequestUtils.onCopyOrMove( + context: context, + isCopy: true, + ctr: controller, + mediaId: null, + mid: controller.mid, + ), + child: Text('复制', style: textStyle), + ), + TextButton( + style: btnStyle, + onPressed: () => RequestUtils.onCopyOrMove( + context: context, + isCopy: false, + ctr: controller, + mediaId: null, + mid: controller.mid, + ), + child: Text('移动', style: textStyle), + ), + ]; + } + late final gridDelegate = Grid.videoCardHDelegate(context, minHeight: 110); @override diff --git a/lib/utils/request_utils.dart b/lib/utils/request_utils.dart index 54fa8db97..a1a392e53 100644 --- a/lib/utils/request_utils.dart +++ b/lib/utils/request_utils.dart @@ -16,11 +16,13 @@ import 'package:PiliPlus/http/validate.dart'; import 'package:PiliPlus/http/video.dart'; import 'package:PiliPlus/models/dynamics/result.dart'; import 'package:PiliPlus/models/login/model.dart'; +import 'package:PiliPlus/models_new/fav/fav_detail/media.dart'; +import 'package:PiliPlus/models_new/later/list.dart'; import 'package:PiliPlus/pages/common/multi_select/base.dart'; -import 'package:PiliPlus/pages/common/multi_select/multi_select_controller.dart'; import 'package:PiliPlus/pages/dynamics_tab/controller.dart'; +import 'package:PiliPlus/pages/fav_detail/controller.dart' + show BaseFavController; import 'package:PiliPlus/pages/group_panel/view.dart'; -import 'package:PiliPlus/pages/later/controller.dart'; import 'package:PiliPlus/pages/login/geetest/geetest_webview_dialog.dart'; import 'package:PiliPlus/utils/accounts.dart'; import 'package:PiliPlus/utils/extension/context_ext.dart'; @@ -387,10 +389,10 @@ abstract final class RequestUtils { } } - static void onCopyOrMove({ + static void onCopyOrMove({ required BuildContext context, required bool isCopy, - required MultiSelectController ctr, + required CommonMultiSelectMixin ctr, required dynamic mediaId, required dynamic mid, }) { @@ -437,18 +439,20 @@ abstract final class RequestUtils { TextButton( onPressed: () { if (checkedId != null) { - Set removeList = ctr.allChecked.toSet(); + final removeList = ctr.allChecked.toSet(); SmartDialog.showLoading(); FavHttp.copyOrMoveFav( isCopy: isCopy, - isFav: ctr is! LaterController, + isFav: ctr is BaseFavController, srcMediaId: mediaId, tarMediaId: checkedId, resources: removeList .map( - (item) => ctr is LaterController - ? item.aid - : '${item.id}:${item.type}', + (e) => switch (e) { + LaterItemModel _ => e.aid, + FavDetailItemModel _ => '${e.id}:${e.type}', + _ => throw UnsupportedError(e.toString()), + }, ) .join(','), mid: isCopy ? mid : null,