clamp archive page

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-03-25 13:53:01 +08:00
parent b4b3764e5f
commit ba56b45038
4 changed files with 48 additions and 43 deletions

View File

@@ -6,7 +6,6 @@ import 'package:PiliPlus/models_new/member/search_archive/vlist.dart';
import 'package:PiliPlus/pages/member_video_web/archive/controller.dart';
import 'package:PiliPlus/pages/member_video_web/base/view.dart';
import 'package:PiliPlus/pages/search/widgets/search_text.dart';
import 'package:PiliPlus/utils/grid.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -37,8 +36,7 @@ class _MemberVideoWebState
SearchArchiveData,
VListItemModel,
ArchiveOrderTypeWeb
>
with GridMixin {
> {
@override
late final MemberVideoWebCtr controller;

View File

@@ -188,7 +188,9 @@ abstract class BaseVideoWebState<
void onSubmit([_]) {
try {
controller.jumpToPage(int.parse(pageStr));
controller.jumpToPage(
int.parse(pageStr).clamp(1, controller.totalPage!),
);
} catch (e) {
SmartDialog.showToast(e.toString());
}

View File

@@ -4,7 +4,6 @@ import 'package:PiliPlus/models_new/member/season_web/archive.dart';
import 'package:PiliPlus/models_new/member/season_web/data.dart';
import 'package:PiliPlus/pages/member_video_web/base/view.dart';
import 'package:PiliPlus/pages/member_video_web/season_series/controller.dart';
import 'package:PiliPlus/utils/grid.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
@@ -39,8 +38,7 @@ class _MemberSSWebState
SeasonWebData,
SeasonArchive,
ArchiveSortTypeApp
>
with GridMixin {
> {
@override
late final MemberSSWebCtr controller;

View File

@@ -4,6 +4,7 @@ import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
import 'package:PiliPlus/common/widgets/image/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/loading_widget/http_error.dart';
import 'package:PiliPlus/common/widgets/loading_widget/loading_widget.dart';
import 'package:PiliPlus/common/widgets/sliver/sliver_pinned_header.dart';
import 'package:PiliPlus/http/loading_state.dart';
import 'package:PiliPlus/models/common/image_preview_type.dart';
import 'package:PiliPlus/models/common/image_type.dart';
@@ -85,7 +86,6 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
Success(:final response) => Column(
children: [
_buildUserInfo(theme, response),
_buildHeader(theme),
Expanded(
child: refreshIndicator(
onRefresh: _controller.onRefresh,
@@ -122,15 +122,17 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
}
Widget _buildHeader(ThemeData theme) {
return Container(
height: 40,
padding: const EdgeInsets.fromLTRB(12, 0, 6, 0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
?_buildCount(),
_buildSortBtn(theme),
],
return SliverPinnedHeader(
backgroundColor: theme.colorScheme.surface,
child: Padding(
padding: const EdgeInsets.fromLTRB(12, 4, 6, 4),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
?_buildCount(),
_buildSortBtn(theme),
],
),
),
);
}
@@ -179,32 +181,37 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
),
Success(:final response) =>
response != null && response.isNotEmpty
? SliverFixedExtentList.builder(
itemBuilder: (context, index) {
if (index == response.length - 1 && _controller.hasNext) {
_controller.onLoadMore();
}
final SpaceArchiveItem videoItem = response[index];
return Padding(
padding: const EdgeInsets.only(bottom: 2),
child: VideoCardHMemberVideo(
videoItem: videoItem,
bvid: _bvid,
onTap: () {
Get.back();
widget.ugcIntroController.onChangeEpisode(
BaseEpisodeItem(
bvid: videoItem.bvid,
cid: videoItem.cid,
cover: videoItem.cover,
),
);
},
),
);
},
itemCount: response.length,
itemExtent: 100,
? SliverMainAxisGroup(
slivers: [
_buildHeader(theme),
SliverFixedExtentList.builder(
itemBuilder: (context, index) {
if (index == response.length - 1 && _controller.hasNext) {
_controller.onLoadMore();
}
final videoItem = response[index];
return Padding(
padding: const EdgeInsets.only(bottom: 2),
child: VideoCardHMemberVideo(
videoItem: videoItem,
bvid: _bvid,
onTap: () {
Get.back();
widget.ugcIntroController.onChangeEpisode(
BaseEpisodeItem(
bvid: videoItem.bvid,
cid: videoItem.cid,
cover: videoItem.cover,
),
);
},
),
);
},
itemCount: response.length,
itemExtent: 100,
),
],
)
: HttpError(onReload: _controller.onReload),
Error(:final errMsg) => HttpError(