mirror of
https://github.com/bggRGjQaUbCoE/PiliPlus.git
synced 2026-05-02 08:09:47 +08:00
Add configurable scroll threshold (#910)
* Add configurable scroll threshold * update --------- Co-authored-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -3,6 +3,7 @@ import 'dart:async';
|
||||
import 'package:PiliPlus/pages/common/common_controller.dart';
|
||||
import 'package:PiliPlus/pages/home/controller.dart';
|
||||
import 'package:PiliPlus/pages/main/controller.dart';
|
||||
import 'package:PiliPlus/utils/storage_pref.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/rendering.dart';
|
||||
import 'package:get/get.dart';
|
||||
@@ -16,6 +17,11 @@ abstract class CommonPageState<T extends CommonPage, R extends CommonController>
|
||||
R get controller;
|
||||
StreamController<bool>? mainStream;
|
||||
StreamController<bool>? searchBarStream;
|
||||
// late double _downScrollCount = 0.0; // 向下滚动计数器
|
||||
late double _upScrollCount = 0.0; // 向上滚动计数器
|
||||
double? _lastScrollPosition; // 记录上次滚动位置
|
||||
final _enableScrollThreshold = Pref.enableScrollThreshold;
|
||||
late final double _scrollThreshold = Pref.scrollThreshold; // 滚动阈值
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
@@ -30,15 +36,58 @@ abstract class CommonPageState<T extends CommonPage, R extends CommonController>
|
||||
}
|
||||
|
||||
void listener() {
|
||||
final ScrollDirection direction =
|
||||
controller.scrollController.position.userScrollDirection;
|
||||
if (direction == ScrollDirection.forward) {
|
||||
mainStream?.add(true);
|
||||
searchBarStream?.add(true);
|
||||
} else if (direction == ScrollDirection.reverse) {
|
||||
mainStream?.add(false);
|
||||
searchBarStream?.add(false);
|
||||
final scrollController = controller.scrollController;
|
||||
final direction = scrollController.position.userScrollDirection;
|
||||
|
||||
if (!_enableScrollThreshold) {
|
||||
if (direction == ScrollDirection.forward) {
|
||||
mainStream?.add(true);
|
||||
searchBarStream?.add(true);
|
||||
} else if (direction == ScrollDirection.reverse) {
|
||||
mainStream?.add(false);
|
||||
searchBarStream?.add(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
final double currentPosition = scrollController.position.pixels;
|
||||
|
||||
// 初始化上次位置
|
||||
_lastScrollPosition ??= currentPosition;
|
||||
|
||||
// 计算滚动距离
|
||||
final double scrollDelta = currentPosition - _lastScrollPosition!;
|
||||
|
||||
if (direction == ScrollDirection.reverse) {
|
||||
mainStream?.add(false);
|
||||
searchBarStream?.add(false); // // 向下滚动,累加向下滚动距离,重置向上滚动计数器
|
||||
_upScrollCount = 0.0; // 重置向上滚动计数器
|
||||
// if (scrollDelta > 0) {
|
||||
// _downScrollCount += scrollDelta;
|
||||
// // _upScrollCount = 0.0; // 重置向上滚动计数器
|
||||
|
||||
// // 当累计向下滚动距离超过阈值时,隐藏顶底栏
|
||||
// if (_downScrollCount >= _scrollThreshold) {
|
||||
// mainStream?.add(false);
|
||||
// searchBarStream?.add(false);
|
||||
// }
|
||||
// }
|
||||
} else if (direction == ScrollDirection.forward) {
|
||||
// 向上滚动,累加向上滚动距离,重置向下滚动计数器
|
||||
if (scrollDelta < 0) {
|
||||
_upScrollCount += (-scrollDelta); // 使用绝对值
|
||||
// _downScrollCount = 0.0; // 重置向下滚动计数器
|
||||
|
||||
// 当累计向上滚动距离超过阈值时,显示顶底栏
|
||||
if (_upScrollCount >= _scrollThreshold) {
|
||||
mainStream?.add(true);
|
||||
searchBarStream?.add(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新上次位置
|
||||
_lastScrollPosition = currentPosition;
|
||||
}
|
||||
|
||||
@override
|
||||
|
||||
Reference in New Issue
Block a user