Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,7 @@ bool _computeHitSlop(

bool _calc(Offset initialPosition, Offset lastPosition) {
final offset = lastPosition - initialPosition;
return offset.dx.abs() > offset.dy.abs() * 3;
// 判定:只要水平位移 > 垂直位移即算横滑(原为 dx > 3·dy,过于苛刻)。
// 约 45° 以内的滑动都会被判定为横向,让简介/评论区左右切换更容易触发。
return offset.dx.abs() > offset.dy.abs();
}
15 changes: 14 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import 'package:PiliPlus/utils/utils.dart';
import 'package:catcher_2/catcher_2.dart';
import 'package:dynamic_color/dynamic_color.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/gestures.dart' show DeviceGestureSettings;
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_displaymode/flutter_displaymode.dart';
Expand Down Expand Up @@ -325,6 +326,14 @@ class MyApp extends StatelessWidget {
final uiScale = ScaledWidgetsFlutterBinding.instance.scaleFactor;
final mediaQuery = MediaQuery.of(context);
final textScaler = TextScaler.linear(Pref.defaultTextScale);
// 鸿蒙 embedding(FlutterPage/FlutterView)把 ArkUI PanGesture 默认的
// 5(vp) 当 physicalTouchSlop 下发,框架除以 DPR 后竖向滚动的触发阈值
// 只有 ~1.5 逻辑像素(Android 约为 8)。竖向手势几乎瞬间赢得竞技场,
// 横向滑动(如简介/评论切换)无论怎么放宽都抢不到。此处恢复为
// Android 水平,使横竖手势能按主导方向公平竞争。
final gestureSettings = OS.isHarmony
? const DeviceGestureSettings(touchSlop: 8)
: mediaQuery.gestureSettings;
if (uiScale != 1.0) {
child = MediaQuery(
data: mediaQuery.copyWith(
Expand All @@ -334,12 +343,16 @@ class MyApp extends StatelessWidget {
viewInsets: mediaQuery.viewInsets / uiScale,
viewPadding: mediaQuery.viewPadding / uiScale,
devicePixelRatio: mediaQuery.devicePixelRatio * uiScale,
gestureSettings: gestureSettings,
),
child: child!,
);
} else {
child = MediaQuery(
data: mediaQuery.copyWith(textScaler: textScaler),
data: mediaQuery.copyWith(
textScaler: textScaler,
gestureSettings: gestureSettings,
),
child: child!,
);
}
Expand Down
4 changes: 3 additions & 1 deletion lib/utils/storage_pref.dart
Original file line number Diff line number Diff line change
Expand Up @@ -967,8 +967,10 @@ abstract final class Pref {
static bool get showDynDispute =>
_setting.get(SettingBoxKey.showDynDispute, defaultValue: false);

// 竖向滚动 slop 已在 main._builder 统一为 8 逻辑像素(鸿蒙),横向取 12
// 时约 34° 以内的滑动可赢得竞技场,横竖手势按主导方向竞争。
static double get touchSlopH =>
_setting.get(SettingBoxKey.touchSlopH, defaultValue: 24.0);
_setting.get(SettingBoxKey.touchSlopH, defaultValue: 12.0);

static bool get saveReply =>
_setting.get(SettingBoxKey.saveReply, defaultValue: true);
Expand Down