我希望在构建完Widget后的一段时间后执行一个函数。在Flutter中这样做的惯用方法是什么?
我想要实现的目标:
我想从默认的FlutterLogo
窗口小部件开始,然后在一段时间后更改其style
属性。
答案 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));