mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-04-20 11:08:03 +08:00
* feat: add copy/move support to fav/later search results * update Signed-off-by: dom <githubaccount56556@proton.me> --------- Co-authored-by: dom <githubaccount56556@proton.me>
99 lines
2.9 KiB
Dart
99 lines
2.9 KiB
Dart
import 'package:PiliPlus/models/common/video/source_type.dart';
|
|
import 'package:PiliPlus/models_new/later/data.dart';
|
|
import 'package:PiliPlus/models_new/later/list.dart';
|
|
import 'package:PiliPlus/pages/common/search/common_search_page.dart';
|
|
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';
|
|
|
|
class LaterSearchPage extends StatefulWidget {
|
|
const LaterSearchPage({super.key});
|
|
|
|
@override
|
|
State<LaterSearchPage> createState() => _LaterSearchPageState();
|
|
}
|
|
|
|
class _LaterSearchPageState
|
|
extends CommonSearchPageState<LaterSearchPage, LaterData, LaterItemModel> {
|
|
@override
|
|
final LaterSearchController controller = Get.put(
|
|
LaterSearchController(),
|
|
tag: Utils.generateRandomString(8),
|
|
);
|
|
|
|
@override
|
|
List<Widget>? get multiSelectActions {
|
|
final btnStyle = TextButton.styleFrom(visualDensity: .compact);
|
|
final textStyle = TextStyle(
|
|
color: ColorScheme.of(context).onSurfaceVariant,
|
|
);
|
|
return [
|
|
TextButton(
|
|
style: btnStyle,
|
|
onPressed: () => RequestUtils.onCopyOrMove<LaterItemModel>(
|
|
context: context,
|
|
isCopy: true,
|
|
ctr: controller,
|
|
mediaId: null,
|
|
mid: controller.mid,
|
|
),
|
|
child: Text('复制', style: textStyle),
|
|
),
|
|
TextButton(
|
|
style: btnStyle,
|
|
onPressed: () => RequestUtils.onCopyOrMove<LaterItemModel>(
|
|
context: context,
|
|
isCopy: false,
|
|
ctr: controller,
|
|
mediaId: null,
|
|
mid: controller.mid,
|
|
),
|
|
child: Text('移动', style: textStyle),
|
|
),
|
|
];
|
|
}
|
|
|
|
late final gridDelegate = Grid.videoCardHDelegate(context, minHeight: 110);
|
|
|
|
@override
|
|
Widget buildList(List<LaterItemModel> list) {
|
|
return SliverGrid.builder(
|
|
gridDelegate: gridDelegate,
|
|
itemBuilder: (context, index) {
|
|
if (index == list.length - 1) {
|
|
controller.onLoadMore();
|
|
}
|
|
final item = list[index];
|
|
return VideoCardHLater(
|
|
index: index,
|
|
videoItem: item,
|
|
ctr: controller,
|
|
onViewLater: (cid) {
|
|
PageUtils.toVideoPage(
|
|
bvid: item.bvid,
|
|
cid: cid,
|
|
cover: item.pic,
|
|
title: item.title,
|
|
extraArguments: {
|
|
'oid': item.aid,
|
|
'sourceType': SourceType.watchLater,
|
|
'count': controller.count,
|
|
'favTitle': '稍后再看',
|
|
'mediaId': controller.mid,
|
|
'desc': false,
|
|
'isContinuePlaying': index != 0,
|
|
},
|
|
);
|
|
},
|
|
);
|
|
},
|
|
itemCount: list.length,
|
|
);
|
|
}
|
|
}
|