Animation 如何在flatter中使用Android滚动行为设置容器移动动画?

Animation 如何在flatter中使用Android滚动行为设置容器移动动画?,animation,flutter,dart,widget,Animation,Flutter,Dart,Widget,我的目标是,有一个可以在垂直轴上拖动的容器。移除手指后,容器应以结束触摸后的速度向前移动一点。我希望在你停止在android手机上滚动并继续滚动一点点后,有完全相同的动画/感觉 到目前为止,情况是这样的: 这是我的代码: class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin { double _offeset = 0; double get offs

我的目标是,有一个可以在垂直轴上拖动的容器。移除手指后,容器应以结束触摸后的速度向前移动一点。我希望在你停止在android手机上滚动并继续滚动一点点后,有完全相同的动画/感觉

到目前为止,情况是这样的:

这是我的代码:

class _MyHomePageState extends State<MyHomePage>
    with SingleTickerProviderStateMixin {
  double _offeset = 0;

  double get offset => _offeset;

  set offset(double offeset) {
    if(offeset < 500)
    setState(() {
      _offeset = offeset;
    });
  }

  AnimationController controller;
  ClampingScrollSimulation simulation;

  @override
  void initState() {
    super.initState();

    controller = AnimationController(vsync: this, upperBound: 5)
      ..addListener(() {
        offset += controller.value;
      });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Stack(
        children: <Widget>[
          Positioned(
            top: offset,
            left: 0,
            right: 0,
            child: GestureDetector(
              onVerticalDragUpdate: (DragUpdateDetails details) {
                offset += details.delta.dy;
              },
              onVerticalDragEnd: (DragEndDetails details) {
                simulation = ClampingScrollSimulation(
                   position: 0, velocity: details.primaryVelocity,
                );
                controller.animateWith(simulation);
              },
              child: Container(height: 50, width: 50, color: Colors.red),
            ),
          ),
        ],
      ),
    );
  }
}
class\u MyHomePageState扩展状态
使用SingleTickerProviderStateMixin{
double _offset=0;
双get offset=>\u offset;
设置偏移量(双设置){
如果(设定值<500)
设置状态(){
_offset=offset;
});
}
动画控制器;
钳位仿真;
@凌驾
void initState(){
super.initState();
控制器=动画控制器(vsync:this,上限:5)
…addListener(){
偏移量+=控制器值;
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
主体:堆栈(
儿童:[
定位(
顶部:偏移,
左:0,,
右:0,,
儿童:手势检测器(
onVerticalDragUpdate:(DragUpdate详细信息){
偏移量+=details.delta.dy;
},
垂直排水量:(排水量详情){
模拟=夹紧模拟(
位置:0,速度:详细信息。primaryVelocity,
);
控制器。带动画的(模拟);
},
子:容器(高度:50,宽度:50,颜色:颜色。红色),
),
),
],
),
);
}
}

问题是,这不是Android的滚动动画,我不知道如何获得它。(感觉动画是线性的,停止得太早,没有利用速度参数)我甚至使用了
ClampingScrollSimulation
类,颤振中的所有滚动小部件都使用它来模拟Android滚动。

解决方案是将
\u controller.value
\u controller.velocity
相乘。像这样:

offset += controller.value * _controller.velocity / 100;