flutter - 如何使用gestureDetector onPanUpdate以连续顺序播放动画和删除所有动画
问题描述
这是我在其中包含GestureDetector
andonPanUpdate
回调的 statefulWidget。这意味着如果指针与屏幕接触,我们可以做一些正确的事情。如果用户在屏幕上拖动,我在这里添加一个 generateBox。在 generateBox() 方法中,我包含了一个简单的动画,它根据 pi 的值旋转,并且在调用动画完成onEnd回调后 500 毫秒后,我从第一个索引 0(零)中删除数组 List数组列表的元素。
这是我想用 Flutter 解决的动画。
我用 Flutter尝试了相同的上述动画,但它没有按预期工作。
当我们开始拖动时,onPanUpdate 回调正在生成所有容器并生成动画,但它并没有按连续顺序删除屏幕上的所有容器,正如我提到的,当动画在 TweenAnimationBuilder 的 onEnd 回调中结束时删除它们。正如我在上面的动画 gif 中想要的那样。
我知道 Dart 和 Flutter 中优秀的 Flutterist 和 GDE 可以很好地解决这个问题。
import 'package:flutter/material.dart';
import 'dart:math';
void main() {
runApp(
MaterialApp(
home: MyApp(),
),
);
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var myWidgetList = <Widget>[];
var xPosition = 0.0;
var yPosition = 0.0;
@override
Widget build(BuildContext context) {
return GestureDetector(
onPanUpdate: (DragUpdateDetails details) {
setState(() {
xPosition = details.localPosition.dx;
yPosition = details.localPosition.dy;
myWidgetList.add(generateBox());
});
},
child: Scaffold(
body: Stack(
children: myWidgetList.toList(),
),
),
);
}
// To Generate Animated Box for 500 milliseconds.
Widget generateBox() {
return Positioned(
left: xPosition,
top: yPosition,
child: TweenAnimationBuilder<double>(
tween: Tween<double>(begin: 0, end: pi),
duration: const Duration(milliseconds: 500),
builder: (_, double angle, __) {
return Transform.rotate(
angle: angle,
child: Container(
width: 80,
height: 80,
decoration: BoxDecoration(
border: Border.all(
width: 3,
color: Colors.grey[800],
),
borderRadius: const BorderRadius.all(
Radius.circular(20),
),
),
),
);
},
onEnd: () {
myWidgetList.remove(myWidgetList[0]);
},
),
);
}
}
解决方案
推荐阅读
- cucumber - 无论如何要从 Cucumber 功能文件中提取步骤列表吗?
- python - 将视频表示为 2D 数组,其中每列代表一个帧 - OpenCV 和 Python
- java - 使用 Mockito 对 DAO 层进行单元测试
- google-sheets - 如何在Google表格中正则提取包含文本和数字混合的整个单词
- python - 切片每个第 n 个元素,而不是从第一个开始
- python - 带有屏蔽密码列的 QTableWidget
- kubernetes - Kubernetes中的服务端口可以相同吗
- c# - Linq 到 Sql。如何记录 SQL 查询?
- r - 复选框输入值 R 闪亮:如果 TRUE 则
- c++ - 对象的分配在 C++ 中不起作用