Dart 在颤振中倒计时时,向倒计时计时器添加时间
我正在尝试创建一个倒计时应用程序,我可以按下一个按钮来增加更多的时间,而计时器正在积极倒计时,就像每个微波炉一样,有一个按钮,你可以按下它来增加一分钟的运行时间,而它的运行没有停止任何东西Dart 在颤振中倒计时时,向倒计时计时器添加时间,dart,flutter,flutter-animation,Dart,Flutter,Flutter Animation,我正在尝试创建一个倒计时应用程序,我可以按下一个按钮来增加更多的时间,而计时器正在积极倒计时,就像每个微波炉一样,有一个按钮,你可以按下它来增加一分钟的运行时间,而它的运行没有停止任何东西 import 'package:flutter/material.dart'; void main() { runApp(new MaterialApp( home: new MyApp(), )); } class Countdown extends AnimatedWidget {
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),
),
),
),
);
}
}
导入“包装:颤振/材料.省道”;
void main(){
runApp(新材料)PP(
主页:新建MyApp(),
));
}
类倒计时扩展了AnimatedWidget{
倒计时({Key Key,this.animation}):超级(Key:Key,listenable:animation);
动画;
@凌驾
构建(构建上下文){
返回新文本(
animation.value.toString(),
样式:新文本样式(字体大小:150.0),
);
}
}
类MyApp扩展了StatefulWidget{
State createState()=>new_MyAppState();
}
类MyAppState使用TickerProviderStateMixin扩展状态{
动画控制器_控制器;
静态常数int kStartValue=4;
@凌驾
void initState(){
super.initState();
_控制器=新的AnimationController(
vsync:这个,,
持续时间:新的持续时间(秒数:kStartValue),
);
}
@凌驾
小部件构建(构建上下文){
归还新脚手架(
floatingActionButton:新的floatingActionButton(
子:新图标(图标。播放箭头),
按下:()=>(U控制器向前(从:0.0),
),
主体:新容器(
孩子:新中心(
孩子:新的倒计时(
动画:新StepTween(
开始:kStartValue,
完:0,,
).设置动画(_控制器),
),
),
),
);
}
}
这个关于计时器的类似问题的例子对我来说很有意义,并且一直是我的出发点。我知道我需要更改持续时间,并用具有适当持续时间的新动画替换动画,但我从未得到任何接近我所寻找的正确行为的东西 我想下面就是你想要实现的目标。点击
floatingAction按钮
可增加5秒
import 'dart:async';
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Countdown Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(title: 'Flutter Countdown Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _timeRemaining = 10;
Timer _timer;
@override
void initState() {
_timer = Timer.periodic(Duration(seconds: 1), (Timer t) => _getTime());
super.initState();
}
@override
void dispose() {
_timer?.cancel();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Text('$_timeRemaining'),
),
floatingActionButton: FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
_timeRemaining += 5;
}),
);
}
void _getTime() {
setState(() {
_timeRemaining == 0 ? _timeRemaining = 0 : _timeRemaining--;
});
}
}
导入'dart:async';
进口“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振倒计时演示”,
主题:主题数据(
主样本:颜色。蓝色,
),
主页:MyHomePage(标题:“颤振倒计时演示”),
);
}
}
类MyHomePage扩展StatefulWidget{
MyHomePage({Key,this.title}):超级(Key:Key);
最后的字符串标题;
@凌驾
_MyHomePageState createState()=>\u MyHomePageState();
}
类_MyHomePageState扩展状态{
int _剩余时间=10;
定时器(u定时器),;
@凌驾
void initState(){
_timer=timer.periodic(持续时间(秒:1),(timer t)=>\u getTime());
super.initState();
}
@凌驾
无效处置(){
_计时器?.cancel();
super.dispose();
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(widget.title),
),
正文:中(
子项:文本(“$\u timeRemaining”),
),
浮动操作按钮:浮动操作按钮(
子:图标(Icons.add),
已按下:(){
_剩余时间+=5;
}),
);
}
void _getTime(){
设置状态(){
_剩余时间=0?_剩余时间=0:_剩余时间--;
});
}
}
别忘了取消dispose()中的计时器。你能详细说明一下吗?更新为取消计时器
实例。我没有注意到行为上的任何变化,你能解释一下这实现了什么吗?当不再需要资源时,最好将其处理掉。如果在不取消计时器的情况下销毁/处置带有计时器的小部件类,则可能会导致内存泄漏。