#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"),
),
);
これには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,
),
),
),
);
}
}
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)
});
onHorizontalDragUpdate
を使用できます:
onHorizontalDragUpdate: (details){
print(details.primaryDelta);
},
if details.primaryDelta
は正で、ドラッグは左から右です。 if details.primaryDelta
が負の場合、ドラッグは右から左です
TabBarView()
を使用してTabControllerを作成し、TabBarViewの子のウィジェットの長さを指定します。