feat: later page: multi select

feat: fav detail page: multi select

opt: reply item

opt: load more

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-11-28 20:53:52 +08:00
parent 665dd8b92a
commit 12818ae415
51 changed files with 988 additions and 759 deletions

View File

@@ -6,7 +6,6 @@ import 'package:PiliPalaX/http/loading_state.dart';
import 'package:PiliPalaX/pages/video/detail/reply/widgets/reply_item_grpc.dart';
import 'package:PiliPalaX/utils/extension.dart';
import 'package:PiliPalaX/utils/utils.dart';
import 'package:easy_debounce/easy_throttle.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:get/get.dart';
@@ -134,15 +133,6 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
void scrollListener() {
_dynamicDetailController.scrollController.addListener(
() {
// 分页加载
if (_dynamicDetailController.scrollController.position.pixels >=
_dynamicDetailController.scrollController.position.maxScrollExtent -
300) {
EasyThrottle.throttle('replylist', const Duration(seconds: 2), () {
_dynamicDetailController.onLoadMore();
});
}
// 标题
if (_dynamicDetailController.scrollController.offset > 55 &&
!_visibleTitle) {
@@ -377,6 +367,7 @@ class _DynamicDetailPageState extends State<DynamicDetailPage>
delegate: SliverChildBuilderDelegate(
(context, index) {
if (index == loadingState.response.replies.length) {
_dynamicDetailController.onLoadMore();
return Container(
alignment: Alignment.center,
padding: EdgeInsets.only(

View File

@@ -21,17 +21,18 @@ class DynamicsTabController extends CommonController {
}
@override
Future onRefresh() async {
Future onRefresh() {
if (dynamicsType == 'all') {
mainController.setCount();
}
offset = '';
await queryData();
return super.onRefresh();
}
@override
bool customHandleResponse(Success response) {
offset = response.response.offset;
isEnd = response.response.items.isEmpty;
if (currentPage != 1 && loadingState.value is Success) {
response.response.items
.insertAll(0, (loadingState.value as Success).response);

View File

@@ -47,12 +47,6 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
tag: widget.dynamicsType,
);
_dynamicsTabController.scrollController.addListener(() {
if (_dynamicsTabController.scrollController.position.pixels >=
_dynamicsTabController.scrollController.position.maxScrollExtent -
200) {
_dynamicsTabController.onLoadMore();
}
StreamController<bool> mainStream =
Get.find<MainController>().bottomBarStream;
StreamController<bool> searchBarStream =
@@ -155,10 +149,14 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
crossAxisSpacing: StyleString.cardSpace / 2,
mainAxisSpacing: StyleString.cardSpace / 2,
lastChildLayoutTypeBuilder: (index) =>
index == loadingState.response.length
? LastChildLayoutType.foot
: LastChildLayoutType.none,
lastChildLayoutTypeBuilder: (index) {
if (index == loadingState.response.length - 1) {
_dynamicsTabController.onLoadMore();
}
return index == loadingState.response.length
? LastChildLayoutType.foot
: LastChildLayoutType.none;
},
children: [
if (dynamicsController.tabController.index == 4 &&
dynamicsController.mid.value != -1) ...[
@@ -186,6 +184,9 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
sliver: SliverList(
delegate: SliverChildBuilderDelegate(
(context, index) {
if (index == loadingState.response.length - 1) {
_dynamicsTabController.onLoadMore();
}
if ((dynamicsController.tabController.index == 4 &&
dynamicsController.mid.value != -1) ||
!dynamicsController.tempBannedList.contains(
@@ -196,7 +197,7 @@ class _DynamicsTabPageState extends State<DynamicsTabPage>
onRemove: _dynamicsTabController.onRemove,
);
}
return const SizedBox();
return const SizedBox.shrink();
},
childCount: loadingState.response.length,
),