diff --git a/lib/pages/member_video_web/archive/view.dart b/lib/pages/member_video_web/archive/view.dart index 128c63f10..7554a877d 100644 --- a/lib/pages/member_video_web/archive/view.dart +++ b/lib/pages/member_video_web/archive/view.dart @@ -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; diff --git a/lib/pages/member_video_web/base/view.dart b/lib/pages/member_video_web/base/view.dart index ab8675826..978ed474b 100644 --- a/lib/pages/member_video_web/base/view.dart +++ b/lib/pages/member_video_web/base/view.dart @@ -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()); } diff --git a/lib/pages/member_video_web/season_series/view.dart b/lib/pages/member_video_web/season_series/view.dart index f563f1c39..fcb99c936 100644 --- a/lib/pages/member_video_web/season_series/view.dart +++ b/lib/pages/member_video_web/season_series/view.dart @@ -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; diff --git a/lib/pages/video/member/view.dart b/lib/pages/video/member/view.dart index d74b1d415..8816a62e3 100644 --- a/lib/pages/video/member/view.dart +++ b/lib/pages/video/member/view.dart @@ -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 { Success(:final response) => Column( children: [ _buildUserInfo(theme, response), - _buildHeader(theme), Expanded( child: refreshIndicator( onRefresh: _controller.onRefresh, @@ -122,15 +122,17 @@ class _HorizontalMemberPageState extends State { } 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 { ), 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(