improve horizontal touch slop

Signed-off-by: dom <githubaccount56556@proton.me>
This commit is contained in:
dom
2026-05-15 10:22:29 +08:00
parent 2c511d1a2c
commit ce706d4732
3 changed files with 27 additions and 12 deletions

View File

@@ -1,4 +1,5 @@
import 'package:PiliPlus/utils/storage_pref.dart';
import 'package:flutter/foundation.dart' show PlatformDispatcher;
import 'package:flutter/gestures.dart';
mixin InitialPositionMixin on GestureRecognizer {
@@ -50,20 +51,30 @@ bool _computeHitSlop(
Offset lastPosition,
) {
switch (kind) {
case PointerDeviceKind.mouse:
case .mouse:
return globalDistanceMoved > kPrecisePointerHitSlop;
case PointerDeviceKind.stylus:
case PointerDeviceKind.invertedStylus:
case PointerDeviceKind.unknown:
case PointerDeviceKind.touch:
case .stylus:
case .invertedStylus:
case .unknown:
case .touch:
return globalDistanceMoved > settings.touchSlop! &&
_calc(initialPosition!, lastPosition);
case PointerDeviceKind.trackpad:
_calcAngle(initialPosition!, lastPosition);
case .trackpad:
return globalDistanceMoved > settings.touchSlop!;
}
}
bool _calc(Offset initialPosition, Offset lastPosition) {
bool _calcAngle(Offset initialPosition, Offset lastPosition) {
final offset = lastPosition - initialPosition;
return offset.dx.abs() > offset.dy.abs() * 3;
}
final deviceTouchSlop = _calcDeviceTouchSlop();
double _calcDeviceTouchSlop() {
final view = PlatformDispatcher.instance.views.first;
final physicalTouchSlop = view.gestureSettings.physicalTouchSlop;
return physicalTouchSlop == null
? kTouchSlop
: physicalTouchSlop / view.devicePixelRatio;
}

View File

@@ -4,7 +4,7 @@ import 'dart:math' show max;
import 'package:PiliPlus/common/widgets/custom_icon.dart';
import 'package:PiliPlus/common/widgets/flutter/refresh_indicator.dart';
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart'
show touchSlopH;
show deviceTouchSlop, touchSlopH;
import 'package:PiliPlus/common/widgets/image_grid/image_grid_view.dart'
show ImageGridView, ImageModel;
import 'package:PiliPlus/common/widgets/pendant_avatar.dart';
@@ -236,7 +236,7 @@ List<SettingsModel> get extraSettings => [
),
NormalModel(
title: '横向滑动阈值',
getSubtitle: () => '当前:「${Pref.touchSlopH}',
getSubtitle: () => '当前:「${Pref.touchSlopH},系统默认值: $deviceTouchSlop',
onTap: _showTouchSlopDialog,
leading: const Icon(Icons.pan_tool_alt_outlined),
),

View File

@@ -1,6 +1,8 @@
import 'dart:io';
import 'dart:math' show pow, sqrt;
import 'package:PiliPlus/common/widgets/gesture/horizontal_drag_gesture_recognizer.dart'
show deviceTouchSlop;
import 'package:PiliPlus/common/widgets/pair.dart';
import 'package:PiliPlus/http/constants.dart';
import 'package:PiliPlus/models/common/bar_hide_type.dart';
@@ -967,8 +969,10 @@ abstract final class Pref {
static bool get showDynDispute =>
_setting.get(SettingBoxKey.showDynDispute, defaultValue: false);
static double get touchSlopH =>
_setting.get(SettingBoxKey.touchSlopH, defaultValue: 24.0);
static double get touchSlopH => _setting.get(
SettingBoxKey.touchSlopH,
defaultValue: deviceTouchSlop + 6.0,
);
static bool get saveReply =>
_setting.get(SettingBoxKey.saveReply, defaultValue: true);