mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
opt: load previous
Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -10,7 +10,6 @@ Widget errorWidget({errMsg, callback}) => HttpError(
|
||||
);
|
||||
|
||||
Widget scrollErrorWidget({errMsg, callback}) => CustomScrollView(
|
||||
controller: ScrollController(),
|
||||
slivers: [
|
||||
HttpError(
|
||||
errMsg: errMsg,
|
||||
|
||||
@@ -54,7 +54,9 @@ class CustomTabBarViewClampingScrollPhysics extends ClampingScrollPhysics {
|
||||
}
|
||||
|
||||
class PositionRetainedScrollPhysics extends AlwaysScrollableScrollPhysics {
|
||||
const PositionRetainedScrollPhysics({super.parent});
|
||||
const PositionRetainedScrollPhysics({super.parent, this.shouldRetain = true});
|
||||
|
||||
final bool shouldRetain;
|
||||
|
||||
@override
|
||||
PositionRetainedScrollPhysics applyTo(ScrollPhysics? ancestor) {
|
||||
@@ -75,9 +77,9 @@ class PositionRetainedScrollPhysics extends AlwaysScrollableScrollPhysics {
|
||||
velocity: velocity,
|
||||
);
|
||||
|
||||
final diff = newPosition.maxScrollExtent - oldPosition.maxScrollExtent;
|
||||
late final diff = newPosition.maxScrollExtent - oldPosition.maxScrollExtent;
|
||||
|
||||
if (oldPosition.pixels == 0 && diff > 0) {
|
||||
if (shouldRetain && oldPosition.pixels == 0 && diff > 0) {
|
||||
return position + diff;
|
||||
} else {
|
||||
return position;
|
||||
|
||||
@@ -72,7 +72,10 @@ class _MemberVideoState extends State<MemberVideo>
|
||||
await _controller.onRefresh();
|
||||
},
|
||||
child: CustomScrollView(
|
||||
physics: const PositionRetainedScrollPhysics(),
|
||||
physics: PositionRetainedScrollPhysics(
|
||||
shouldRetain: _controller.isLocating == true,
|
||||
parent: ClampingScrollPhysics(),
|
||||
),
|
||||
slivers: [
|
||||
SliverPersistentHeader(
|
||||
pinned: false,
|
||||
|
||||
@@ -212,4 +212,10 @@ class MemberVideoCtr extends CommonController {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Future onReload() {
|
||||
isLocating = null;
|
||||
return super.onReload();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,10 @@ class _HorizontalMemberPageState extends State<HorizontalMemberPage> {
|
||||
color: Colors.transparent,
|
||||
child: CustomScrollView(
|
||||
controller: _controller.scrollController,
|
||||
physics: const PositionRetainedScrollPhysics(),
|
||||
physics: PositionRetainedScrollPhysics(
|
||||
shouldRetain: _controller.hasPrev,
|
||||
parent: ClampingScrollPhysics(),
|
||||
),
|
||||
slivers: [
|
||||
_buildSliverHeader,
|
||||
SliverPadding(
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:PiliPlus/common/skeleton/video_reply.dart';
|
||||
import 'package:PiliPlus/common/widgets/http_error.dart';
|
||||
import 'package:PiliPlus/common/widgets/icon_button.dart';
|
||||
import 'package:PiliPlus/common/widgets/loading_widget.dart';
|
||||
import 'package:PiliPlus/common/widgets/network_img_layer.dart';
|
||||
import 'package:PiliPlus/common/widgets/refresh_indicator.dart';
|
||||
import 'package:PiliPlus/http/loading_state.dart';
|
||||
@@ -173,16 +173,21 @@ class _NoteListPageState extends CommonSlidePageState<NoteListPage> {
|
||||
],
|
||||
),
|
||||
)
|
||||
: scrollErrorWidget(
|
||||
callback: _controller.onReload,
|
||||
),
|
||||
Error() => scrollErrorWidget(
|
||||
errMsg: loadingState.errMsg,
|
||||
callback: _controller.onReload,
|
||||
),
|
||||
: errWidget(),
|
||||
Error() => errWidget(loadingState.errMsg),
|
||||
LoadingState() => throw UnimplementedError(),
|
||||
};
|
||||
}
|
||||
|
||||
Widget errWidget([errMsg]) => CustomScrollView(
|
||||
controller: _controller.scrollController,
|
||||
slivers: [
|
||||
HttpError(
|
||||
errMsg: errMsg,
|
||||
callback: _controller.onReload,
|
||||
)
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget _itemWidget(BuildContext context, dynamic item) {
|
||||
|
||||
@@ -2,7 +2,6 @@ import 'package:PiliPlus/common/widgets/dialog.dart';
|
||||
import 'package:PiliPlus/common/widgets/icon_button.dart';
|
||||
import 'package:PiliPlus/common/widgets/image_save.dart';
|
||||
import 'package:PiliPlus/common/widgets/refresh_indicator.dart';
|
||||
import 'package:PiliPlus/common/widgets/scroll_physics.dart';
|
||||
import 'package:PiliPlus/common/widgets/stat/stat.dart';
|
||||
import 'package:PiliPlus/pages/common/common_collapse_slide_page.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
@@ -127,7 +126,9 @@ class _MediaListPanelState
|
||||
widget.onDelete != null && widget.mediaList.length > 1;
|
||||
return ScrollablePositionedList.separated(
|
||||
itemScrollController: _scrollController,
|
||||
physics: const PositionRetainedScrollPhysics(),
|
||||
// physics: const PositionRetainedScrollPhysics(
|
||||
// parent: ClampingScrollPhysics(),
|
||||
// ),
|
||||
itemCount: widget.mediaList.length,
|
||||
padding: EdgeInsets.only(
|
||||
top: 7,
|
||||
|
||||
Reference in New Issue
Block a user