是否有更好的方法来检查#flutter中的左/右拖动。我已经完成了它,但是有时它不工作。
new GestureDetector(
onHorizontalDragEnd: (DragEndDetails details) {
print("Drag Left - AddValue");
setState((){
_value++;
});
if (details.velocity.pixelsPerSecond.dx > -1000.0) {
print("Drag Right - SubValue");
setState((){
_value--;
});
}
},
child: new Container(
child:new Text("$_value"),
),
);
答案 0 :(得分:12)
我只想使用Dismissible
小部件。它非常易于配置。
注意:如果您不想在滑动上提供视觉反馈,可以使用Stack
将透明Dismissible
放在另一个小部件的顶部。
import 'package:flutter/material.dart';
void main() {
runApp(new MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return new MaterialApp(
home: new MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
State createState() => new MyHomePageState();
}
class MyHomePageState extends State<MyHomePage> {
int _counter = 0;
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Dismissible(
resizeDuration: null,
onDismissed: (DismissDirection direction) {
setState(() {
_counter += direction == DismissDirection.endToStart ? 1 : -1;
});
},
key: new ValueKey(_counter),
child: new Center(
child: new Text(
'$_counter',
style: Theme.of(context).textTheme.display4,
),
),
),
);
}
}
答案 1 :(得分:1)
使用GestureDetector小部件及其panUpdate方法,计算移动的距离。
GestureDetector(
onPanStart: (DragStartDetails details) {
initial = details.globalPosition.dx;
},
onPanUpdate: (DragUpdateDetails details) {
distance= details.globalPosition.dx - initial;
},
onPanEnd: (DragEndDetails details) {
initial = 0.0;
print(distance);
//+ve distance signifies a drag from left to right(start to end)
//-ve distance signifies a drag from right to left(end to start)
});
答案 2 :(得分:1)
您可以使用onHorizontalDragUpdate
:
onHorizontalDragUpdate: (details){
print(details.primaryDelta);
},
如果details.primaryDelta
为正,则拖动从左到右。
如果details.primaryDelta
为负,则拖动从右向左
答案 3 :(得分:0)
使用TabBarView()
创建一个TabController,以指定TabBarView子级中小部件的长度。
答案 4 :(得分:0)
由于作为 DragUdate 类实例的 details 返回 double ,您可以这样做。(并且 Paageroute 也默认提供此)
GestureDetector(
onHorizontalDragUpdate: (details) {
if(details.primaryDelta! > 1.0) {
Navigator.pop(context);
}
},
child:Scaffold(..)