1. 当执行异步操作,或者从下一个页面返回结果时,需要调用类似如下加载对话框代码,有时就会出现不能展示的问题,调式发现传入的context是无效的
 /*** showLoading()* 加载对话框*/Future<T?> showLoadingAlert<T>(BuildContext context, Function task) async {return await showDialog<T>(context: context, builder: (context) {(() async {Navigator.of(context).pop(await task(context));})();return UnconstrainedBox(child: SizedBox(width: 200,child: AlertDialog(content: Column(mainAxisSize: MainAxisSize.min,children: const [CircularProgressIndicator(),Padding(padding: EdgeInsets.only(top: 20),child: Text("加载中..."),),],),),),);}, barrierDismissible: false);}
  1. 如果想通过这样添加判断mounted解决,就会觉得实在不妥,因为这样不能保证顺利执行下去
 if (!mounted) {print('$c not mounted!');//...} else {var result = await showLoadingAlert(context, () async {//handler task});//...;}
  1. 查过网上的资料,最后整理出来,改成如下这样试试,注意到MyPage页面代码中有定义了stateKey,最后赋值给key了,
class MyPage extends StatelessWidget with MixWidget {final stateKey = GlobalKey<ScaffoldState>();@overrideWidget build(BuildContext context) {return Scaffold(key: stateKey,//...}}//...Future<T?> showLoadingAlert<T>(Function(BuildContext context) task) async {return await showDialog<T>(context: stateKey.currentContext!, builder: (context) {(() async {Navigator.of(context).pop(await task(context));})();return UnconstrainedBox(child: SizedBox(width: 200,child: AlertDialog(content: Column(mainAxisSize: MainAxisSize.min,children: const [CircularProgressIndicator(),Padding(padding: EdgeInsets.only(top: 20),child: Text("加载中..."),),],),),),);}, barrierDismissible: false);}//...
}
  1. 运行以后,代码如下,只要调用showLoadingAlert()方法,不再传入context,就能展示加载对话框了
onClick() async {var result = await showLoadingAlert(() async {//执行耗时请求//...});//...;
}
  1. 最后,附上运行结果截图

【Flutter】关于对话框showDialog传入context无效问题相关推荐

  1. Flutter:Dialog对话框及自定义Dialog

    基本属性介绍 几个自带的dialog用法和属性基本一致,只是部分参数不同 const AlertDialog({Key? key,this.title, //对话框标题组件this.titlePadd ...

  2. Flutter dialog (1) - showDialog的讲解

    在应用开发中,或多或少都会遇到需要弹框的问题, 比如:需要用户确认,需要输入一些信息等等的问题,这就要用到 dialog 相关的概念了 而在 flutter 中,所有可以看见的都是 Widget,di ...

  3. Flutter系列之showDialog拦截返回键

    Flutter中弹出对话框是使用showDialog函数,如果想拦截返回键,不想其点击返回键的时候消失, 就要嵌套一层WillPopScope,示例代码如下: showDialog(context: ...

  4. Flutter进阶—质感设计之持久底部面板

    持久性底部面板可以用于补充应用主要内容的信息,即使用户与应用程序的其他控件进行互动,也仍然可以看到持久的底部面板.可以使用Scaffold.showBottomSheet函数创建和显示持久性底部面板. ...

  5. Flutter AlertDialog弹框的基本使用、Flutter showDialog方法使用概述

    优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力,当然也需要码农年轻灵活的思维,不局限于思维,不局限语言限制,才是编程的最高境界. 在Flutter中使用 AlertDialog 来构建 ...

  6. Flutter中各种对话框的使用

    Flutter提供了多种对话框组件供开发者使用,以下代码中演示了常见对话框的实现,供大家参考,欢迎大家复制粘贴和吐槽. import 'package:flutter/material.dart'; ...

  7. Flutter对话框

    AlertDialog const AlertDialog({Key key,this.title, //标题this.titlePadding, // 标题内边距this.titleTextStyl ...

  8. Flutter 学习 - Widget 之 对话框

    前言 本篇我们介绍Flutter中常用的对话框,先看下效果图 正文 Flutter 中对话框也是Widget,有两种显示对话框的方法,对于对画框对使用还有特殊要求,我们后面介绍,先来看下这两种方法 1 ...

  9. 如何在Android上显示警报对话框?

    我想显示一个对话框/弹出窗口,并向用户显示"您确定要删除此条目吗?"的消息. 一个带有"删除"按钮. 触摸Delete ,它应删除该条目,否则不删除任何条目. ...

最新文章

  1. 自定义配置webpack打包文件
  2. A Guide to Python's Magic Methods
  3. ABAP 并发执行的威力
  4. java反射--注解的定义与运用以及权限拦截
  5. eclipse 增加php 版本号,扩充eclipse php的代码提示功能
  6. python 读写 json文件
  7. c语言入口参数和出口参数,麻烦帮忙指出一下这个函数的入口参数和出口参数呀!...
  8. 如何自己找数据分析项目来做?
  9. varnish与squid的比较
  10. UITextField使用的一些细节
  11. linux发布成服务,linux服务简单部署
  12. 大数据公司挖掘数据价值的49个典型案例(值得收藏)
  13. [娱乐]华为HWT文件手动修改字体名称
  14. 天天生鲜项目——商品详情页
  15. 普元eos使用svn_普元EOS SVN配置
  16. DM6437 平台概况
  17. 1、ZigBee 开发教程之基础篇—ZigBee简介和学习方法
  18. 关联规则分析(频繁项集查找方法为apriori方法的Fk-1*Fk-1)
  19. 【Unity VR开发窍门】如何在Unity中以VR视角捕捉游戏360度全景
  20. 创意非凡--找到许多人熟视无睹的宝藏!

热门文章

  1. css字体设置透明度,CSS字体透明度怎么设置?
  2. java毕业设计智能医疗推荐系统Mybatis+系统+数据库+调试部署
  3. linux40t分区格式化,RedHat/CentOS ext4无法格式化大分区 补充ext4格式化方式
  4. 难以想象,25 年前互联网大佬在最原始的论坛冲浪!
  5. consul集群安装以及服务的注册和发现
  6. android_基础_inflater.inflate()参数详解
  7. 和直男程序员谈恋爱太难了
  8. windows系统下如何使用python定时任务
  9. 微信上线新功能“拍一拍”很有趣!iOS修改微信号
  10. 鲍捷 | 深度解析知识图谱发展关键阶段及技术脉络