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

问题描述 投票:0回答:10

我想在构建小部件后经过一定的延迟后执行一个函数。在 Flutter 中执行此操作的惯用方法是什么?

我想要实现的目标: 我想从默认的

FlutterLogo
小部件开始,然后在一段时间后更改其
style
属性。

flutter dart delay
10个回答
507
投票

您可以使用

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相关的代码,例如刷新屏幕数据、更改标签文本等


136
投票

使用

Timer
定时器类文档

import 'dart:async';

倒计时后触发动作

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");
});

102
投票

留下大家都在寻找的片段:

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

99
投票

想通了😎

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,
    );
  }
}

37
投票

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

我尝试在块内的回调中产生一个新状态,但它不起作用。尝试使用 Timer 和 Future.delayed。

但是,有效的是......

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

yield newState;

等待一个空的 future,然后运行该函数。


33
投票

Synchronously

Future.delayed(Duration(milliseconds: 1000), () {
    // Your code
});

Asynchronously

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

15
投票

一种快速的方法是使用

Future.delayed
,如下所示:

Future.delayed(Duration(seconds: 10), (){
    print("Wait for 10 seconds");
});

或者您可以将持续时间更改为

milliseconds
,如下所示:

Future.delayed(Duration(milliseconds: 3000), () {
        print("Wait for 3000 milliseconds");
});

14
投票

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


13
投票

只是在上述答案的基础上添加更多描述

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

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");
  });

6
投票
import 'dart:async';   
Timer timer;

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

autoPress();
© www.soinside.com 2019 - 2024. All rights reserved.