【发布时间】:2021-01-11 01:50:37
【问题描述】:
我希望用户能够通过向任何方向滑动来重新加载当前屏幕。现在,我尝试使用我能找到的几乎所有手势检测小部件来实现这一点,但我认为它们有点不可靠。
例如,使用内置的 GestureDetector 或使用它的 pub 包,滑动手势注册可能有 10 次中的 7 次。如果我有一个在滑动时注册的打印功能,在控制台中我会看到“查看端口操作方向”,但打印“滑动”了 10 次中的 7 次。
所以我的问题是,如何在每次注册滑动的地方进行设置?我正在考虑不屑一顾或浏览量小部件的滑动响应能力。有任何想法吗?提前致谢!
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
@override
void initState() {
super.initState();
}
void _onVerticalSwipe(SwipeDirection direction) {
setState(() {
if (direction == SwipeDirection.up) {
//print('Swiped up!');
Navigator.push(
context,
PageTransition(
type: PageTransitionType.downToUp, child: MyHomePage()));
} else {
// print('Swiped down!');
Navigator.push(
context,
PageTransition(
type: PageTransitionType.upToDown, child: MyHomePage()));
}
});
}
void _onHorizontalSwipe(SwipeDirection direction) {
setState(() {
if (direction == SwipeDirection.left) {
// print('Swiped left!');
Navigator.push(
context,
PageTransition(
type: PageTransitionType.rightToLeft, child: MyHomePage()));
} else {
// print('Swiped right!');
Navigator.push(
context,
PageTransition(
type: PageTransitionType.leftToRight, child: MyHomePage()));
}
});
}
Widget build(BuildContext context) {
return SimpleGestureDetector(
onVerticalSwipe: _onVerticalSwipe,
onHorizontalSwipe: _onHorizontalSwipe,
child: Scaffold(
body: Padding(
padding: const EdgeInsets.all(30.0),
child: Center(
child: Column(
children: <Widget>[
Expanded(child: FittedBox(child: Text('Text'))),
Expanded(child: FittedBox(child: Text('Image'))),
],
),
),
),
),
);
}
}
【问题讨论】:
-
您是否将
Scaffold包裹在GestureDetector中?如果不是GestureDetector的命中框,则仅包含 Scaffold 内的任何内容,而不是整个屏幕本身。另一件需要注意的事情是确保你的脚手架是不透明的。如果它是透明的,无论出于何种原因,它都不会注册手势,因为你从技术上来说什么都没有滑动。 -
如果这没有帮助,请尝试分享一些代码,我很难在不知道有什么问题的情况下提供帮助哈哈。
-
您好安东尼,非常感谢您的回复。是的,我试过用脚手架包裹起来。我为您发布了代码。它使用 'package:page_transition/page_transition.dart' 进行过渡动画,使用 'package:simple_gesture_detector/simple_gesture_detector.dart' 进行滑动检测。
-
我玩过转场插件中的动画速度等设置,也玩过简单手势检测器中的阈值级别。没有配置可以完善滑动。提前感谢您的帮助!