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