【发布时间】:2019-06-06 05:37:05
【问题描述】:
我想在 DropTarget 不接受时显示可拖动的反馈动画。Flutter 不显示反馈。有什么方法可以证明或控制它。像这个例子,我想达到这个效果。我以某种方式实现了这种效果,但是返回到原始偏移量并不正确。它正在向前移动到原来的位置。
我想要的动画效果。
这是我的代码,当我将它提升到某个位置并让他从那里离开时,我有一个拖动框,它应该动画回到原始位置,但它正在返回到像这样的其他偏移量。
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(body: DragBox()),
);
}
}
class DragBox extends StatefulWidget {
DragBox({
Key key,
}) : super(key: key);
@override
State<StatefulWidget> createState() {
return new _MyDragBox();
}
}
class _MyDragBox extends State<DragBox> with TickerProviderStateMixin {
GlobalKey _globalKey = new GlobalKey();
AnimationController _controller;
Offset begin;
Offset cancelledOffset;
Offset _offsetOfWidget;
@override
void initState() {
WidgetsBinding.instance.addPostFrameCallback((s) {
_afeteLayout();
});
super.initState();
_controller = AnimationController(
vsync: this,
duration: Duration(milliseconds: 1000),
);
}
void _afeteLayout() {
final RenderBox box = _globalKey.currentContext.findRenderObject();
Offset offset = -box.globalToLocal(Offset(0.0, 0.0));
_offsetOfWidget = offset;
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Stack(
children: <Widget>[
Center(
child: Draggable(
key: _globalKey,
onDraggableCanceled: (v, o) {
setState(() {
cancelledOffset = o;
});
_controller.forward();
},
feedback: Container(
color: Colors.red,
height: 50,
width: 50,
),
child: Container(
color: Colors.red,
height: 50,
width: 50,
),
),
),
_controller.isAnimating
? SlideTransition(
position: Tween<Offset>(
begin: cancelledOffset * 0.01,
end: _offsetOfWidget * 0.01)
.animate(_controller)
..addStatusListener((status) {
if (status == AnimationStatus.completed) {
_controller.stop();
} else {
_controller.reverse();
}
}),
child: Container(
color: Colors.red,
height: 50,
width: 50,
),
)
: Container(
child: Text('data'),
)
],
);
}
}
【问题讨论】:
-
这不是 Draggable 开箱即用的东西。你必须自己制作动画,使用
OverlayEntry和其他一些东西 -
@RémiRousselet 谢谢。如果您有任何示例,我会尝试一下,我会得到更多的想法?
-
@RémiRousselet stackoverflow.com/questions/54194412/… 你能帮我解决这个问题吗?
-
你能达到想要的动画效果吗?
-
你能详细说明你是如何实现它的吗?
标签: dart drag-and-drop flutter