【发布时间】:2018-09-03 09:27:09
【问题描述】:
我想在构建 Widget 后的一定延迟后执行一个函数。在 Flutter 中这样做的惯用方式是什么?
我想要实现的目标:
我想从默认的FlutterLogo Widget 开始,然后在一段时间后更改其style 属性。
【问题讨论】:
我想在构建 Widget 后的一定延迟后执行一个函数。在 Flutter 中这样做的惯用方式是什么?
我想要实现的目标:
我想从默认的FlutterLogo Widget 开始,然后在一段时间后更改其style 属性。
【问题讨论】:
您可以在一段时间后使用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 相关的代码,例如刷新屏幕数据,更改标签文本等
【讨论】:
倒计时后触发动作
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");
});
【讨论】:
想通了?
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,
);
}
}
【讨论】:
Timer?
import 'dart:async'
timer = ... 放在initState 覆盖中。这样,您就可以访问在State<> 构造函数中设置的widget。
把大家都在找的sn-p留在这里:
Future.delayed(Duration(milliseconds: 100), () {
// Do something
});
【讨论】:
您可以通过两种方式进行操作,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 是创建一个在延迟后运行其计算的未来。
确保将import "dart:async"; 打包以启动程序以使用Future.delayed
Future.delayed(Duration(seconds: 5), () {
print(" This line is execute after 5 seconds");
});
【讨论】:
(在旧 q 上添加响应,因为这是 google 上的最高结果)
我尝试在一个块内的回调中产生一个新状态,但它不起作用。尝试使用 Timer 和 Future.delayed。
但是,起作用的是……
await Future.delayed(const Duration(milliseconds: 500));
yield newState;
等待一个空的未来,然后运行该函数。
【讨论】:
只是在上面的答案上添加更多描述
计时器功能也适用于以下持续时间:
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");
});
【讨论】:
Future.delayed(Duration(seconds: 3) , your_function)
【讨论】:
import 'dart:async';
Timer timer;
void autoPress(){
timer = new Timer(const Duration(seconds:2),(){
print("This line will print after two seconds");
});
}
autoPress();
【讨论】:
await Future.delayed(Duration(毫秒: 1000));
【讨论】: