我正在尝试构建一个倒计时小部件。目前,我可以使用该结构。我只为倒数计时而挣扎。我使用倒计时插件尝试了这种方法:
class _Countdown extends State<Countdown> { int val = 3; void countdown(){ CountDown cd = new CountDown(new Duration(seconds: 4)); cd.stream.listen((Duration d) { setState((){ val = d.inSeconds; }); }); } @override build(BuildContext context){ countdown(); return new Scaffold( body: new Container( child: new Center( child: new Text(val.toString(), style: new TextStyle(fontSize: 150.0)), ), ), ); } }
但是,该值变化非常奇怪,并且根本不平滑。它开始抽搐。还有其他方法或修复方法吗?
听起来您正在尝试显示随时间变化的动画文本小部件。我将使用AnimatedWidget与StepTween来确保倒数仅显示整数值。
AnimatedWidget
StepTween
import 'package:flutter/material.dart'; void main() { runApp(new MaterialApp( home: new MyApp(), )); } class Countdown extends AnimatedWidget { Countdown({ Key key, this.animation }) : super(key: key, listenable: animation); Animation<int> animation; @override build(BuildContext context){ return new Text( animation.value.toString(), style: new TextStyle(fontSize: 150.0), ); } } class MyApp extends StatefulWidget { State createState() => new _MyAppState(); } class _MyAppState extends State<MyApp> with TickerProviderStateMixin { AnimationController _controller; static const int kStartValue = 4; @override void initState() { super.initState(); _controller = new AnimationController( vsync: this, duration: new Duration(seconds: kStartValue), ); } @override Widget build(BuildContext context) { return new Scaffold( floatingActionButton: new FloatingActionButton( child: new Icon(Icons.play_arrow), onPressed: () => _controller.forward(from: 0.0), ), body: new Container( child: new Center( child: new Countdown( animation: new StepTween( begin: kStartValue, end: 0, ).animate(_controller), ), ), ), ); } }