Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 在颤振中倒计时时,向倒计时计时器添加时间_Dart_Flutter_Flutter Animation - Fatal编程技术网

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()中的计时器。你能详细说明一下吗?更新为取消
计时器
实例。我没有注意到行为上的任何变化,你能解释一下这实现了什么吗?当不再需要资源时,最好将其处理掉。如果在不取消计时器的情况下销毁/处置带有计时器的小部件类,则可能会导致内存泄漏。