如何在Flutter延迟一段时间后运行代码?

时间:2018-03-24 23:36:39

标签: flutter

我希望在构建完Widget后的一段时间后执行一个函数。在Flutter中这样做的惯用方法是什么?

我想要实现的目标: 我想从默认的FlutterLogo窗口小部件开始,然后在一段时间后更改其style属性。

10 个答案:

答案 0 :(得分:31)

想出来

class AnimatedFlutterLogo extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => new _AnimatedFlutterLogoState();
}

class _AnimatedFlutterLogoState extends State<AnimatedFlutterLogo> {
  Timer _timer;
  FlutterLogoStyle _logoStyle = FlutterLogoStyle.markOnly;

  _AnimatedFlutterLogoState() {
    _timer = new Timer(const Duration(milliseconds: 400), () {
      setState(() {
        _logoStyle = FlutterLogoStyle.horizontal;
      });
    });
  }

  @override
  void dispose() {
    super.dispose();
    _timer.cancel();
  }

  @override
  Widget build(BuildContext context) {
    return new FlutterLogo(
      size: 200.0,
      textColor: Palette.white,
      style: _logoStyle,
    );
  }
}

答案 1 :(得分:22)

一段时间后,您可以使用Future.delayed运行代码。例如:

Future.delayed(const Duration(milliseconds: 500), () {

// Here you can write your code

  setState(() {
    // Here you can write your code for open new view
  });

});

在setState函数中,您可以编写与应用程序UI相关的代码,例如刷新屏幕数据,更改标签文本等。

答案 2 :(得分:7)

(在旧q上添加响应,因为这是google上的最高结果)

我试图在一个集团内的回调中产生一个新状态,但是它没有用。尝试使用Timer和Future.delayed。

但是,工作是...

await Future.delayed(const Duration(milliseconds: 500));

yield newState;

等待一个空虚的未来,然后再运行该功能。

答案 3 :(得分:5)

Future.delayed(Duration(seconds: 3) , your_function)

答案 4 :(得分:3)

只需对以上答案添加更多描述

计时器功能还可以在以下持续时间下工作:

const Duration(
      {int days = 0,
      int hours = 0,
      int minutes = 0,
      int seconds = 0,
      int milliseconds = 0,
      int microseconds = 0})

示例:

  Timer(Duration(seconds: 3), () {
    print("print after every 3 seconds");
  });

答案 5 :(得分:3)

您可以通过两种方式做到这一点:1是Future.delayed,2是Timer

使用计时器

Timer是一个代表倒数计时器的类,该计时器配置为在达到时间结束时触发动作,并且可以触发一次或重复触发。

请确保导入dart:async软件包以启动程序以使用Timer

Timer(Duration(seconds: 5), () {
  print(" This line is execute after 5 seconds");
});

使用Future.delayed

Future.delayed创建了一个Future,它会在延迟后运行其计算。

请确保import "dart:async";打包以启动程序才能使用Future.delayed

Future.delayed(Duration(seconds: 5), () {
   print(" This line is execute after 5 seconds");
});

答案 6 :(得分:3)

每个人都在寻找的摘录片段留在这里:

Future.delayed(Duration(milliseconds: 100), () {
  // Do something
});

答案 7 :(得分:2)

  

倒数后的触发操作

Timer(Duration(seconds: 3), () {
  print("Yeah, this line is printed after 3 seconds");
});
  

重复操作

Timer.periodic(Duration(seconds: 5), (timer) {
  print(DateTime.now());
});
  

立即触发计时器

Timer(Duration(seconds: 0), () {
  print("Yeah, this line is printed immediately");
});

答案 8 :(得分:2)

import 'dart:async';   
Timer timer;

void autoPress(){
  timer = new Timer(const Duration(seconds:2),(){
    print("This line will print after two seconds");
 });
}

autoPress();

答案 9 :(得分:1)

等待Future.delayed(持续时间(毫秒:1000));