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,9 +122,10 @@ 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(
padding: const EdgeInsets.fromLTRB(12, 4, 6, 4),
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween, mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [ children: [
@@ -132,6 +133,7 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
_buildSortBtn(theme), _buildSortBtn(theme),
], ],
), ),
),
); );
} }
@@ -179,12 +181,15 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
), ),
Success(:final response) => Success(:final response) =>
response != null && response.isNotEmpty response != null && response.isNotEmpty
? SliverFixedExtentList.builder( ? SliverMainAxisGroup(
slivers: [
_buildHeader(theme),
SliverFixedExtentList.builder(
itemBuilder: (context, index) { itemBuilder: (context, index) {
if (index == response.length - 1 && _controller.hasNext) { if (index == response.length - 1 && _controller.hasNext) {
_controller.onLoadMore(); _controller.onLoadMore();
} }
final SpaceArchiveItem videoItem = response[index]; final videoItem = response[index];
return Padding( return Padding(
padding: const EdgeInsets.only(bottom: 2), padding: const EdgeInsets.only(bottom: 2),
child: VideoCardHMemberVideo( child: VideoCardHMemberVideo(
@@ -205,6 +210,8 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
}, },
itemCount: response.length, itemCount: response.length,
itemExtent: 100, itemExtent: 100,
),
],
) )
: HttpError(onReload: _controller.onReload), : HttpError(onReload: _controller.onReload),
Error(:final errMsg) => HttpError( Error(:final errMsg) => HttpError(