mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: playall
Closes #450 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -23,6 +23,7 @@ class VideoCardH extends StatelessWidget {
|
||||
this.showPubdate = false,
|
||||
this.onTap,
|
||||
this.onLongPress,
|
||||
this.onViewLater,
|
||||
});
|
||||
final dynamic videoItem;
|
||||
final String source;
|
||||
@@ -32,6 +33,7 @@ class VideoCardH extends StatelessWidget {
|
||||
final bool showPubdate;
|
||||
final VoidCallback? onTap;
|
||||
final VoidCallback? onLongPress;
|
||||
final ValueChanged<int>? onViewLater;
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
@@ -73,7 +75,7 @@ class VideoCardH extends StatelessWidget {
|
||||
},
|
||||
onTap: () async {
|
||||
if (onTap != null) {
|
||||
onTap?.call();
|
||||
onTap!();
|
||||
return;
|
||||
}
|
||||
if (type == 'ketang') {
|
||||
@@ -89,6 +91,9 @@ class VideoCardH extends StatelessWidget {
|
||||
try {
|
||||
final int cid = videoItem.cid ??
|
||||
await SearchHttp.ab2c(aid: aid, bvid: bvid);
|
||||
if (source == 'later') {
|
||||
onViewLater!(cid);
|
||||
} else {
|
||||
Utils.toViewPage(
|
||||
'bvid=$bvid&cid=$cid',
|
||||
arguments: {
|
||||
@@ -96,6 +101,7 @@ class VideoCardH extends StatelessWidget {
|
||||
'heroTag': Utils.makeHeroTag(aid)
|
||||
},
|
||||
);
|
||||
}
|
||||
} catch (err) {
|
||||
SmartDialog.showToast(err.toString());
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:PiliPlus/common/skeleton/video_card_h.dart';
|
||||
import 'package:PiliPlus/common/widgets/refresh_indicator.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
import 'package:PiliPlus/pages/fav_search/view.dart';
|
||||
import 'package:PiliPlus/pages/fav_search/view.dart' show SearchType;
|
||||
import 'package:PiliPlus/utils/utils.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -47,14 +47,18 @@ class _FavPageState extends State<FavPage> {
|
||||
IconButton(
|
||||
onPressed: () {
|
||||
if (_favController.loadingState.value is Success) {
|
||||
try {
|
||||
final item = (_favController.loadingState.value as Success)
|
||||
.response
|
||||
.first;
|
||||
Get.toNamed('/favSearch', arguments: {
|
||||
'type': 1,
|
||||
'mediaId': (_favController.loadingState.value as Success)
|
||||
.response
|
||||
.first
|
||||
.id,
|
||||
'mediaId': item.id,
|
||||
'title': item.title,
|
||||
'count': item.mediaCount,
|
||||
'searchType': SearchType.fav,
|
||||
});
|
||||
} catch (_) {}
|
||||
}
|
||||
},
|
||||
icon: const Icon(Icons.search_outlined),
|
||||
|
||||
@@ -190,6 +190,9 @@ class _FavDetailPageState extends State<FavDetailPage> {
|
||||
Get.toNamed('/favSearch', arguments: {
|
||||
'type': 0,
|
||||
'mediaId': int.parse(mediaId),
|
||||
'title': _favDetailController.item.value.title,
|
||||
'count':
|
||||
_favDetailController.item.value.mediaCount,
|
||||
'searchType': SearchType.fav,
|
||||
}),
|
||||
icon: const Icon(Icons.search_outlined),
|
||||
@@ -426,15 +429,34 @@ class _FavDetailPageState extends State<FavDetailPage> {
|
||||
),
|
||||
);
|
||||
}
|
||||
final element = loadingState.response[index];
|
||||
return Stack(
|
||||
children: [
|
||||
Positioned.fill(
|
||||
child: FavVideoCardH(
|
||||
videoItem: loadingState.response[index],
|
||||
videoItem: element,
|
||||
callFn: () => _favDetailController.onCancelFav(
|
||||
loadingState.response[index].id,
|
||||
loadingState.response[index].type,
|
||||
element.id,
|
||||
element.type,
|
||||
),
|
||||
onViewFav: () {
|
||||
Utils.toViewPage(
|
||||
'bvid=${element.bvid}&cid=${element.cid}',
|
||||
arguments: {
|
||||
'videoItem': element,
|
||||
'heroTag': Utils.makeHeroTag(element.bvid),
|
||||
'sourceType': 'fav',
|
||||
'mediaId': _favDetailController.item.value.id,
|
||||
'oid': element.id,
|
||||
'favTitle':
|
||||
_favDetailController.item.value.title,
|
||||
'count': _favDetailController
|
||||
.item.value.mediaCount,
|
||||
'desc': true,
|
||||
'isContinuePlaying': index != 0,
|
||||
},
|
||||
);
|
||||
},
|
||||
onTap: _favDetailController.enableMultiSelect.value
|
||||
? () {
|
||||
_favDetailController.onSelect(index);
|
||||
|
||||
@@ -10,7 +10,6 @@ import 'package:PiliPlus/common/widgets/stat/danmu.dart';
|
||||
import 'package:PiliPlus/common/widgets/stat/view.dart';
|
||||
import 'package:PiliPlus/http/search.dart';
|
||||
import 'package:PiliPlus/http/video.dart';
|
||||
import 'package:PiliPlus/models/common/search_type.dart';
|
||||
import 'package:PiliPlus/utils/id_utils.dart';
|
||||
import 'package:PiliPlus/utils/utils.dart';
|
||||
import 'package:PiliPlus/common/widgets/network_img_layer.dart';
|
||||
@@ -24,6 +23,7 @@ class FavVideoCardH extends StatelessWidget {
|
||||
final GestureTapCallback? onTap;
|
||||
final GestureLongPressCallback? onLongPress;
|
||||
final bool isOwner;
|
||||
final VoidCallback? onViewFav;
|
||||
|
||||
const FavVideoCardH({
|
||||
super.key,
|
||||
@@ -33,6 +33,7 @@ class FavVideoCardH extends StatelessWidget {
|
||||
this.onTap,
|
||||
this.onLongPress,
|
||||
this.isOwner = false,
|
||||
this.onViewFav,
|
||||
});
|
||||
|
||||
@override
|
||||
@@ -66,15 +67,16 @@ class FavVideoCardH extends StatelessWidget {
|
||||
Get.toNamed('/member?mid=${videoItem.owner?.mid}');
|
||||
return;
|
||||
}
|
||||
Utils.toViewPage(
|
||||
'bvid=$bvid&cid=${videoItem.cid}${epId?.isNotEmpty == true ? '&epId=$epId' : ''}',
|
||||
arguments: {
|
||||
'videoItem': videoItem,
|
||||
'heroTag': Utils.makeHeroTag(id),
|
||||
'videoType':
|
||||
epId != null ? SearchType.media_bangumi : SearchType.video,
|
||||
},
|
||||
);
|
||||
onViewFav!();
|
||||
// Utils.toViewPage(
|
||||
// 'bvid=$bvid&cid=${videoItem.cid}${epId?.isNotEmpty == true ? '&epId=$epId' : ''}',
|
||||
// arguments: {
|
||||
// 'videoItem': videoItem,
|
||||
// 'heroTag': Utils.makeHeroTag(id),
|
||||
// 'videoType':
|
||||
// epId != null ? SearchType.media_bangumi : SearchType.video,
|
||||
// },
|
||||
// );
|
||||
},
|
||||
onLongPress: () {
|
||||
if (onLongPress != null) {
|
||||
|
||||
@@ -85,17 +85,34 @@ class _FavSearchPageState extends State<FavSearchPage> {
|
||||
if (index == loadingState.response.length) {
|
||||
_favSearchCtr.onLoadMore();
|
||||
}
|
||||
final element = loadingState.response[index];
|
||||
return FavVideoCardH(
|
||||
videoItem: loadingState.response[index],
|
||||
videoItem: element,
|
||||
searchType: _favSearchCtr.type,
|
||||
callFn: _favSearchCtr.type != 1
|
||||
? () {
|
||||
_favSearchCtr.onCancelFav(
|
||||
loadingState.response[index].id!,
|
||||
loadingState.response[index].type,
|
||||
element.id!,
|
||||
element.type,
|
||||
);
|
||||
}
|
||||
: null,
|
||||
onViewFav: () {
|
||||
Utils.toViewPage(
|
||||
'bvid=${element.bvid}&cid=${element.cid}',
|
||||
arguments: {
|
||||
'videoItem': element,
|
||||
'heroTag': Utils.makeHeroTag(element.bvid),
|
||||
'sourceType': 'fav',
|
||||
'mediaId': Get.arguments['mediaId'],
|
||||
'oid': element.id,
|
||||
'favTitle': Get.arguments['title'],
|
||||
'count': Get.arguments['count'],
|
||||
'desc': true,
|
||||
'isContinuePlaying': true,
|
||||
},
|
||||
);
|
||||
},
|
||||
);
|
||||
},
|
||||
childCount: loadingState.response.length,
|
||||
|
||||
@@ -201,6 +201,22 @@ class _LaterPageState extends State<LaterPage> {
|
||||
VideoCardH(
|
||||
videoItem: videoItem,
|
||||
source: 'later',
|
||||
onViewLater: (cid) {
|
||||
Utils.toViewPage(
|
||||
'bvid=${videoItem.bvid}&cid=$cid',
|
||||
arguments: {
|
||||
'videoItem': videoItem,
|
||||
'oid': videoItem.aid,
|
||||
'heroTag': Utils.makeHeroTag(videoItem.bvid),
|
||||
'sourceType': 'watchLater',
|
||||
'count': loadingState.response.length,
|
||||
'favTitle': '稍后再看',
|
||||
'mediaId': _laterController.mid,
|
||||
'desc': false,
|
||||
'isContinuePlaying': index != 0,
|
||||
},
|
||||
);
|
||||
},
|
||||
onTap: _laterController.enableMultiSelect.value.not
|
||||
? null
|
||||
: () {
|
||||
|
||||
@@ -337,8 +337,7 @@ class VideoDetailController extends GetxController
|
||||
oid: isReverse
|
||||
? null
|
||||
: mediaList.isEmpty
|
||||
? _mediaType == 1 &&
|
||||
Get.arguments['mediaType'] == null // member archive
|
||||
? Get.arguments['isContinuePlaying'] == true
|
||||
? Get.arguments['oid']
|
||||
: null
|
||||
: isLoadPrevious
|
||||
@@ -353,10 +352,9 @@ class VideoDetailController extends GetxController
|
||||
: mediaList.last.type,
|
||||
desc: _mediaDesc,
|
||||
sortField: Get.arguments['sortField'] ?? 1,
|
||||
withCurrent: mediaList.isEmpty &&
|
||||
_mediaType == 1 &&
|
||||
Get.arguments['mediaType'] == null
|
||||
? true // init && member archive
|
||||
withCurrent:
|
||||
mediaList.isEmpty && Get.arguments['isContinuePlaying'] == true
|
||||
? true
|
||||
: false,
|
||||
);
|
||||
if (res['status']) {
|
||||
@@ -444,6 +442,8 @@ class VideoDetailController extends GetxController
|
||||
: null,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
getMediaList();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user