如何在颤动中停止动画持续时间?

How to stop animation duration in flutter?

我这里有一个关于递减计时器的代码。我想在 5 秒后或某个特定时间停止计时器。如何用颤振实现这一目标?这是示例代码。

class MyHomePage1 extends StatefulWidget {
      MyHomePage1({Key key, this.title}) : super(key: key);
    
       final String title;
     
       @override
       _MyHomePage1State createState() => _MyHomePage1State();
     }
     
     class _MyHomePage1State extends State<MyHomePage1> with TickerProviderStateMixin {
       int _counter = 0;
       AnimationController _controller;
       int levelClock = 180;
     
       void _incrementCounter() {
         setState(() {
           _counter++;
         });
       }
     
       @override
       void dispose() {
         _controller.dispose();
         super.dispose();
       }
     
       @override
       void initState() {
         super.initState();
     
         _controller = AnimationController(vsync: this, duration: Duration(seconds: levelClock) // gameData.levelClock is a user entered number elsewhere in the applciation
             );
     
         _controller.forward();
       }
     
       @override
       Widget build(BuildContext context) {
         return Scaffold(
           appBar: AppBar(
             title: Text(widget.title),
           ),
           body: Center(
             child: Column(
               mainAxisAlignment: MainAxisAlignment.center,
               children: <Widget>[
                 Countdown(
                   animation: StepTween(
                     begin: levelClock, // THIS IS A USER ENTERED NUMBER
                     end: 0,
                   ).animate(_controller),
                 ),
                 Text(
                   'You have pushed the button this many times:',
                 ),
                 Text(
                   '$_counter',
                   style: Theme.of(context).textTheme.headline4,
                 ),
               ],
             ),
           ),
           floatingActionButton: FloatingActionButton(
             onPressed: _incrementCounter,
             tooltip: 'Increment',
             child: Icon(Icons.add),
           ),
         );
       }
     }
     
     class Countdown extends AnimatedWidget {
       Countdown({Key key, this.animation}) : super(key: key, listenable: animation);
       final Animation<int> animation;
     
       @override
       build(BuildContext context) {
         Duration clockTimer = Duration(seconds: animation.value);
     
         String timerText = '${clockTimer.inMinutes.remainder(60).toString()}:${clockTimer.inSeconds.remainder(60).toString().padLeft(2, '0')}';
     
         return Column(
           children: [
             Text(
               "$timerText",
               style: TextStyle(
                 fontSize: 110,
                 color: Theme.of(context).primaryColor,
               ),
             ),
             ),
           ],
         );
       }
     }

实现此目的的一种方法是向动画添加一个侦听器,就像这样。

Countdown(
  animation: StepTween(
    begin: levelClock,
    end: 0,
  ).animate(_controller)
    ..addListener(() {
      if (_controller.value > (4 / levelClock)) {    //4 = to stop after 5 seconds
        _controller.stop();
      }
    }),
),