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

Bra*_*ell 43 flutter

在我的Widget构建完成后,我想在一段延迟后执行一个函数.在Flutter中这样做的惯用方法是什么?

我想要实现的目标:我想从默认的FlutterLogoWidget 开始,然后style在一段时间后更改其属性.

jai*_*yta 76

倒计时后触发动作

Timer(Duration(seconds: 3), () {
  print("Yeah, this line is printed after 3 seconds");
});
Run Code Online (Sandbox Code Playgroud)

重复动作

Timer.periodic(Duration(seconds: 5), (timer) {
  print(DateTime.now());
});
Run Code Online (Sandbox Code Playgroud)

立即触发定时器

Timer(Duration(seconds: 0), () {
  print("Yeah, this line is printed immediately");
});
Run Code Online (Sandbox Code Playgroud)

  • 这比“Future.delayed”有优势,因为如果存储在变量中,它可以被取消! (7认同)

Rah*_*rma 74

您可以使用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
  });

});
Run Code Online (Sandbox Code Playgroud)

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

  • 为了避免警告,请在调用 setState 之前检查您的小部件是否仍已安装 (3认同)

Arm*_* L. 44

只是离开这里每个人都在寻找的片段:

Future.delayed(Duration(milliseconds: 100), () {
  // Do something
});
Run Code Online (Sandbox Code Playgroud)


Bra*_*ell 41

弄清楚了

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,
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 得到了`import'dart:async'` (2认同)

Moh*_*adi 32

Synchronously

Future.delayed(Duration(milliseconds: 1000), () {
    // Your code
});
Run Code Online (Sandbox Code Playgroud)

Asynchronously

await Future.delayed(const Duration(milliseconds: 1000));
Run Code Online (Sandbox Code Playgroud)


Par*_*iya 16

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

使用定时器

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

确保将dart:async 包导入 到要使用的程序的开头 Timer

Timer(Duration(seconds: 5), () {
  print(" This line is execute after 5 seconds");
});
Run Code Online (Sandbox Code Playgroud)

使用 Future.delayed

Future.delayed is 创建了一个在延迟后运行其计算的未来。

确保 import "dart:async"; 打包到要使用的程序的开始 Future.delayed

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


Ovi*_*uru 13

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

我尝试在块内的回调中产生一个新状态,但没有奏效。尝试使用 Timer 和 Future.delayed。

然而,起作用的是......

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

yield newState;
Run Code Online (Sandbox Code Playgroud)

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


Fax*_*yev 13

一种快速的方法是使用Future.delayed如下:

Future.delayed(Duration(seconds: 10), (){
    print("Wait for 10 seconds");
});
Run Code Online (Sandbox Code Playgroud)

或者您可以将持续时间更改为milliseconds这样:

Future.delayed(Duration(milliseconds: 3000), () {
        print("Wait for 3000 milliseconds");
});
Run Code Online (Sandbox Code Playgroud)


jit*_*555 10

只需在上述答案上添加更多描述

计时器功能也适用于以下持续时间:

const Duration(
      {int days = 0,
      int hours = 0,
      int minutes = 0,
      int seconds = 0,
      int milliseconds = 0,
      int microseconds = 0})
Run Code Online (Sandbox Code Playgroud)

例子:

  Timer(Duration(seconds: 3), () {
    print("print after every 3 seconds");
  });
Run Code Online (Sandbox Code Playgroud)


S.R*_*hav 8

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


小智 6

import 'dart:async';   
Timer timer;

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

autoPress();
Run Code Online (Sandbox Code Playgroud)