Как анимировать движение контейнера с помощью прокрутки Android во Flutter? - PullRequest
0 голосов
/ 23 сентября 2019

Моя цель - создать контейнер, который можно перемещать по вертикальной оси.После удаления пальца контейнер должен двигаться немного вперед со скоростью, которая была у меня после окончания касания.Я хочу, чтобы у вас была точно такая же анимация / ощущение после того, как вы перестанете прокручивать на телефоне Android, и он продолжает прокручиваться немного дальше.*enter image description here

Это мой код:

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),
            ),
          ),
        ],
      ),
    );
  }
}

Проблема в том, что это не анимация прокрутки Android, и я не знаю, как ее получить.(Такое ощущение, что анимация линейная, останавливается слишком рано и не использует параметр скорости). Я даже использую класс ClampingScrollSimulation, который используется во всех виджетах Scroll во Flutter для имитации прокрутки Android.

1 Ответ

0 голосов
/ 26 сентября 2019

Решением было умножить _controller.value на _controller.velocity.Как это:

offset += controller.value * _controller.velocity / 100;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...