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

View File

@@ -188,7 +188,9 @@ abstract class BaseVideoWebState<
void onSubmit([_]) { void onSubmit([_]) {
try { try {
controller.jumpToPage(int.parse(pageStr)); controller.jumpToPage(
int.parse(pageStr).clamp(1, controller.totalPage!),
);
} catch (e) { } catch (e) {
SmartDialog.showToast(e.toString()); 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/models_new/member/season_web/data.dart';
import 'package:PiliPlus/pages/member_video_web/base/view.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/pages/member_video_web/season_series/controller.dart';
import 'package:PiliPlus/utils/grid.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@@ -39,8 +38,7 @@ class _MemberSSWebState
SeasonWebData, SeasonWebData,
SeasonArchive, SeasonArchive,
ArchiveSortTypeApp ArchiveSortTypeApp
> > {
with GridMixin {
@override @override
late final MemberSSWebCtr controller; 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/image/network_img_layer.dart';
import 'package:PiliPlus/common/widgets/loading_widget/http_error.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/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/http/loading_state.dart';
import 'package:PiliPlus/models/common/image_preview_type.dart'; import 'package:PiliPlus/models/common/image_preview_type.dart';
import 'package:PiliPlus/models/common/image_type.dart'; import 'package:PiliPlus/models/common/image_type.dart';
@@ -85,7 +86,6 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
Success(:final response) => Column( Success(:final response) => Column(
children: [ children: [
_buildUserInfo(theme, response), _buildUserInfo(theme, response),
_buildHeader(theme),
Expanded( Expanded(
child: refreshIndicator( child: refreshIndicator(
onRefresh: _controller.onRefresh, onRefresh: _controller.onRefresh,
@@ -122,15 +122,17 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
} }
Widget _buildHeader(ThemeData theme) { Widget _buildHeader(ThemeData theme) {
return Container( return SliverPinnedHeader(
height: 40, backgroundColor: theme.colorScheme.surface,
padding: const EdgeInsets.fromLTRB(12, 0, 6, 0), child: Padding(
child: Row( padding: const EdgeInsets.fromLTRB(12, 4, 6, 4),
mainAxisAlignment: MainAxisAlignment.spaceBetween, child: Row(
children: [ mainAxisAlignment: MainAxisAlignment.spaceBetween,
?_buildCount(), children: [
_buildSortBtn(theme), ?_buildCount(),
], _buildSortBtn(theme),
],
),
), ),
); );
} }
@@ -179,32 +181,37 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
), ),
Success(:final response) => Success(:final response) =>
response != null && response.isNotEmpty response != null && response.isNotEmpty
? SliverFixedExtentList.builder( ? SliverMainAxisGroup(
itemBuilder: (context, index) { slivers: [
if (index == response.length - 1 && _controller.hasNext) { _buildHeader(theme),
_controller.onLoadMore(); SliverFixedExtentList.builder(
} itemBuilder: (context, index) {
final SpaceArchiveItem videoItem = response[index]; if (index == response.length - 1 && _controller.hasNext) {
return Padding( _controller.onLoadMore();
padding: const EdgeInsets.only(bottom: 2), }
child: VideoCardHMemberVideo( final videoItem = response[index];
videoItem: videoItem, return Padding(
bvid: _bvid, padding: const EdgeInsets.only(bottom: 2),
onTap: () { child: VideoCardHMemberVideo(
Get.back(); videoItem: videoItem,
widget.ugcIntroController.onChangeEpisode( bvid: _bvid,
BaseEpisodeItem( onTap: () {
bvid: videoItem.bvid, Get.back();
cid: videoItem.cid, widget.ugcIntroController.onChangeEpisode(
cover: videoItem.cover, BaseEpisodeItem(
), bvid: videoItem.bvid,
); cid: videoItem.cid,
}, cover: videoItem.cover,
), ),
); );
}, },
itemCount: response.length, ),
itemExtent: 100, );
},
itemCount: response.length,
itemExtent: 100,
),
],
) )
: HttpError(onReload: _controller.onReload), : HttpError(onReload: _controller.onReload),
Error(:final errMsg) => HttpError( Error(:final errMsg) => HttpError(