Запуск анимации слайдов при нажатии кнопки flutter

#flutter #dart #flutter-layout #flutter-dependencies #flutter-android

#трепетание #dart #флаттер-макет #flutter-зависимости #flutter-android

Вопрос:

Как я могу реорганизовать этот код анимации слайдов, чтобы использовать onLongPress на моей кнопке:

 @override void initState() {
super.initState();
_controller = AnimationController(
  duration: const Duration(seconds: 2),
  vsync: this,
)..repeat(reverse: true);
_offsetAnimation = Tween<Offset>(
  begin: Offset.zero,
  end: const Offset(1.5, 0.0),
).animate(CurvedAnimation(
  parent: _controller,
  curve: Curves.elasticIn,
));
 

}

Прямо сейчас анимация воспроизводится автоматически повторно. Я бы хотел, чтобы список перемещался только после нажатия кнопки в течение 3 секунд. Это мой код кнопки.

   child: RaisedButton(
                  onPressed: (null),
                  autofocus: false,
                  clipBehavior: Clip.none,
                  color: Colors.red,
                  onLongPress: () => {
                    setState(() {
                      isEmerg = !isEmerg;
                    }),
                    // Navigator.pushReplacement(
                    //     context,
                    //     MaterialPageRoute(
                    //         builder: (context) => AnimationTest()))
                  },
                  child: Text(
                    'Hold for 3 Secs',
                    style: TextStyle(
                        fontWeight: FontWeight.w400,
                        color: Colors.white,
                        fontSize: 24.0,
                        fontFamily: 'Circular'),
                  ),
                  shape: CircleBorder(),
                  padding: EdgeInsets.all(70),
                ),
 

И это список, который я показываю onLongPress:

   SlideTransition(
          position: _offsetAnimation,
          child: Container(
              child: ListView.builder(
                  itemCount: messages.length,
                  itemBuilder: (context, index) {
                    return Card(
                      child: ListTile(
                        onTap: () {},
                        title: Text(messages[index].emergencyType),
                        subtitle: Text(messages[index].description),
                        leading: Icon(Icons.message_outlined),
                        trailing: Text('Send'),
                        tileColor: Colors.white,
                      ),
                    );
                  })),
        ),
 

Ответ №1:

При изменении инициализации

 _controller = AnimationController(
  duration: const Duration(seconds: 2),
  vsync: this,
)..repeat(reverse: true);
 

Для

  _controller = AnimationController(
  duration: const Duration(seconds: 2),
  vsync: this,
); 
 

и onLongPress добавить

 _controller.forward();
 

Комментарии:

1. Оказывается, анимация полностью остановилась. Список постоянно отображается.

2. Вы хотите, чтобы это повторялось при длительном нажатии?

3. Нет, я просто хочу, чтобы он сыграл один раз, но он не играет вообще. Список просто сидит там без анимации — например, когда экран загружается, список загружается вместе с ним

4. Что происходит, когда вы вызываете _controller.forward()