Flutter中如何实现等待AwesomeDialog关闭后再执行后续代码?
嘿,我懂你想要的效果——让弹出AwesomeDialog后,后续代码暂停执行,直到对话框被关闭对吧?现在的问题是show()方法是非阻塞的,所以代码会直接跳到print("cccccccccccccccccccc")。这里给你两种实用的解决方案:
方案一:用Completer实现通用的等待逻辑(推荐)
这种方法不管用户是点击确定按钮,还是通过其他方式关闭对话框(比如点击空白处),都会等待对话框关闭后再执行后续代码。只需要把按钮的点击回调改成异步,并用Completer来监听对话框的关闭事件:
import 'package:awesome_dialog/awesome_dialog.dart'; import 'package:flutter/material.dart'; import 'dart:async'; // 别忘了导入这个包 void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Page(), ); } } class Page extends StatefulWidget { @override _PageState createState() => _PageState(); } class _PageState extends State<Page> { @override Widget build(BuildContext context) { return Scaffold( body: Center( child: ElevatedButton( onPressed: () async { // 标记为异步函数 print("aaaaaaaaaaaaaaaaaaaa"); // 创建Completer来追踪对话框的关闭状态 final dialogCompleter = Completer<void>(); AwesomeDialog( context: context, dialogType: DialogType.INFO, animType: AnimType.BOTTOMSLIDE, title: 'Register Status', desc: "Register Successfull", btnOkOnPress: () { print("bbbbbbbbbbbbbbbbb"); dialogCompleter.complete(); // 点击确定时完成Future }, // 处理对话框被外部关闭的情况(比如点击空白区域) onDissmissCallback: () { dialogCompleter.complete(); // 对话框关闭时完成Future }, width: 400, )..show(); // 等待对话框关闭后再执行后续代码 await dialogCompleter.future; print("cccccccccccccccccccc"); }, child: Text("Show Dialog"), ), ), ); } }
方案二:直接把后续代码放到按钮回调中(适合仅需确定按钮触发的场景)
如果你的需求是只有用户点击确定按钮后才执行print("cccccccccccccccccccc"),那可以直接把这段代码移到btnOkOnPress里面:
// 简化后的onPressed逻辑 onPressed: () { print("aaaaaaaaaaaaaaaaaaaa"); AwesomeDialog( context: context, dialogType: DialogType.INFO, animType: AnimType.BOTTOMSLIDE, title: 'Register Status', desc: "Register Successfull", btnOkOnPress: () { print("bbbbbbbbbbbbbbbbb"); print("cccccccccccccccccccc"); // 移到这里 }, width: 400, )..show(); },
这样修改后,输出顺序就会变成你想要的:
aaaaaaaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbb
cccccccccccccccccccc
内容的提问来源于stack exchange,提问作者Honey Last
相关产品推荐
相关产品推荐

