Flutter 关闭alertbox后运行函数

Flutter 关闭alertbox后运行函数,flutter,flutter-layout,Flutter,Flutter Layout,我已经读了无数类似的链接,但它没有帮助 这个用例非常简单,我想在警报框关闭后运行一个函数 void dummyFunc(){ 睡眠(持续时间:3秒); 打印(“完成”); } Future displayDialog()异步{ 返回显示对话框( 上下文:上下文, barrierDismissible:false,//用户必须点击按钮! 生成器:(BuildContext上下文){ 返回警报对话框( 标题:文本(“AlertDialog标题”), 内容:SingleChildScrollView(

我已经读了无数类似的链接,但它没有帮助

这个用例非常简单,我想在警报框关闭后运行一个函数

void dummyFunc(){
睡眠(持续时间:3秒);
打印(“完成”);
}
Future displayDialog()异步{
返回显示对话框(
上下文:上下文,
barrierDismissible:false,//用户必须点击按钮!
生成器:(BuildContext上下文){
返回警报对话框(
标题:文本(“AlertDialog标题”),
内容:SingleChildScrollView(
子:列表体(
儿童:[
Text('这是一个演示警报对话框'),
Text('您想批准此邮件吗?'),
],
),
),
行动:[
扁平按钮(
子项:文本(“拒绝”),
已按下:(){
Navigator.of(context.pop)(false);
},
),
扁平按钮(
子项:文本('Approve'),
已按下:(){
Navigator.of(context.pop)(true);
},
),
],
标高:24.0,
形状:RoundedRectangleBorder(),
);
},
);
}
var按钮=动画容量(
不透明度:1.0,
持续时间:持续时间(毫秒:500),
子:浮动操作按钮(
工具提示:“开始”,
子:图标(iconShape),
onPressed:()异步{
bool shouldUpdate=等待显示对话框();
打印(应更新);
如果(应该更新)
dummyFunc();
})
);
但警报对话框在3秒后关闭


请告诉我我做错了什么,谢谢~

我想这是因为你在使用睡眠。而不是使用未来延迟

void dummyFunc() {
    print("done");
  }
若你们不想延迟,那个么你们也可以删除这个未来,这个函数将在对话框关闭后执行


睡眠会保持这个过程,这就是你面临这个错误的原因。

多亏维伦给了我一个很好的直觉,计时器也能很好地工作,如果你不使用循环:

void dummyFunc()  {
            Timer(Duration(seconds: 3), () {

                    print("done");
                });
}

编辑:事实上,维伦的答案更有效,这也能起作用。不要睡觉。在这上面花了3小时,现在我讨厌sleep()。

虚拟函数只是一个更复杂函数的替代品,但我确实在动画之间使用了一些睡眠事件。在您的消息之后,我尝试了Future.delayed和Timer,但它仍然无法按预期工作。只需删除Future,它将按您的预期工作。如果进程不是异步的,那么为什么要休眠?打印一条语句或编写任意行长的代码都无关紧要。如果它与本例中的异步不同,它将执行相同的操作@Antoningavrelt问题是我睡了一觉,但你的回答让我意识到这不是确切的答案,我对你的答案投了赞成票,因为你把我推向了正确的方向;)我会接受其他人的答案,如果有一个非常棒的答案来解释为什么睡眠会在alertbox级别阻止进程事实上我在代码中使用了一个循环,所以你的答案是最好的,谢谢你,维伦!