2

このスライドイン アニメーション コードをリファクタリングして、ボタンで 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,
                      ),
                    );
                  })),
        ),
4

1 に答える 1

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();
于 2020-11-25T19:10:29.700 に答える