[英]Swipe to swap two containers in flutter
我相信有很多更好的解决方案,但您可以查看此临时解决方法:
import 'package:flutter/material.dart';
void main() {
runApp(TestPage());
}
class TestPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark(),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
double address1Top = 20;
double address2Top = 110;
bool isFirstUp = true;
bool isSecondUp = false;
@override
Widget build(BuildContext context) {
return Container(
width: 300,
height: 150,
color: Colors.blue,
child: Stack(
children: <Widget>[
Positioned(
top: isFirstUp ? address1Top : address2Top,
left: 20,
child: GestureDetector(
onVerticalDragUpdate: (details) {
if (details.delta.dy > 1 && isFirstUp) {
setState(() {
isFirstUp = false;
isSecondUp = true;
});
}
if (details.delta.dy < -1 && isSecondUp) {
setState(() {
isFirstUp = true;
isSecondUp = false;
});
}
},
child: Container(
width: 140,
child: Center(
child: Text("A"),
),
color: Colors.red,
),
),
),
// Bottom address
Positioned(
top: isSecondUp ? address1Top : address2Top,
left: 20,
child: GestureDetector(
onVerticalDragUpdate: (details) {
if (details.delta.dy < -1 && isFirstUp) {
setState(() {
isFirstUp = false;
isSecondUp = true;
});
}
if (details.delta.dy > 1 && isSecondUp) {
setState(() {
isFirstUp = true;
isSecondUp = false;
});
}
},
child: Container(
width: 140,
child: Center(
child: Text("B"),
),
color: Colors.green,
),
),
),
],
),
);
}
}
您可以设置小于-1
和大于1
以获得更高的灵敏度。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.