Flutter 不笨拙的 ShowDailog

本文介绍了如何在Flutter中创建一个异步弹框,使得弹框的处理逻辑不再局限于回调函数内,而是可以在点击事件完成后进行。通过这种方式,可以更灵活地控制弹框的显示与事件处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flutter 弹框

之前我写的弹框都是卸载同一个页面上,或者把弹框抽离出来,但是弹框中的事件只能放在回调函数里面去执行的。不知道小伙伴们是否也是这样。

想再我就想把弹框抽离出来,不再点击事件里面执行了,而我等待点击事件完成后判断是否执行。

以前的写法

showDialogFunction(BuildContext context ,{ Function callBack }){
    showCupertinoDialog(
        context : context,
        builder : (BuildContext context){
            return CupertinoAlertDialog(
                title : Text("温馨提示"),
                content : Container(
                    hieght : 200.0
                    child : SingleChildScrollView(
                        /// 文本提示
                    )
                ),
                actions : [
                    CupertinoDialogAction(
                        child : Text("不同意");
                        onPressed:(){
                            // 分别不同的处理callBack
                        }
                    ),
                    CupertinoDialogAction(
                        child : Text("同意");
                        onPressed: (){
                            // 分别不同的处理callBack
                        }
                    )
                ]
            )
        }
    )
}
 

以上的方法就只用在CupertinoDialogAction按钮中处理事件,不能当你点击了返回会在处理。

则我们需要一个异步的,当我们打开这个弹框的时候,我们等待,然后点击了按钮后才执行下一步计划。

等待返回后在执行 下面则我们电视同意或者不同意都会返回一个值。然后我们就可以哪这个值下一步操作了。

现在的写法

    // 等待弹框被点击后返回事件
    bool isShow = await showDialogFunction(context);

    if(isShow){
        // 放大胆的去干你想干的事情
    }

    // showDialogFunction 弹框方法
    Future<bool> showDialogFunction(BuildContext context) async {
        bool isShow = await showCupertinoDialog(
            context : context,
            builder : (BuildContext context){
                return cupertinoAlertDialog(context);
            }
        );
        return Future.value(isShow);
    }

    CupertinoAlertDialog cupertinoAlertDialog(BuildContext context){
      return CupertinoAlertDialog(
        title: Text("温馨提示"),
        content: Container(
          height: 250.0,
          padding: EdgeInsets.all(12),
          child: SingleChildScrollView(
            child: Text("文案"),
          ),
        ),
        actions: [
          CupertinoDialogAction(
            child: Text("不同意"),
            onPressed: (){
              Navigator.of(context).pop(false);
            },
          ),
          CupertinoDialogAction(
            child: Text("同意"),
            onPressed: (){
              Navigator.of(context).pop(true);
            },
          )
        ],
      );
    }
 

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值