上一篇做了个总体简单记录总结 MonkeyLei:Flutter-最近搞了个项目(常用控件,第三方基本库)-底部导航,登录,启动画面,webview等 。

完事了后以为没什么事情,然后点击登录会显示加载进度弹窗(Dialog),请求成功或者失败都会先关闭进度图弹窗,如果成功则关闭登录页面,刷新个人中心。这是基本流程....但是发现如果main.dart中如果先启动Splash页面,然后Splash页面里面Navigator.pushReplacementNamed等相关页面路由操作之后,发现之前的如下操作

关闭的不是进度弹窗,而是登录界面,就导致了进度弹窗无法关闭,还关闭错了页面!小萌新跟群友聊了下,说让检查context上下文,小萌新打印了下登录界面的context,就是LoginWidgetPage自己呀

然后弹窗里面的上下文也打印了下,也是LoginWidgetPage。 到这里,不懂了呀! 有懂的指教下,到这里反正我没找到什么思路,尝试了一些方案但失败了!!!

哈哈哈。。。。看来后面是得深入了,不然搞个球去了。。。。。

小萌新就想到,干脆主页面增加一个bool bShowHome = false;变量,分别加载不同的页面。如果是bShowHome则显示主页面,如果非bShowHome,则显示启动页面;

那当显示主页面后,能否通过路由的方式路由到Home了?想啥了???你这个启动画面本来就包含在了主页面中,你怎么还路由到自己呢?另外,你怎么关闭自己呢? 反正没能行的同了呀。。。。。。。 其实我们最终的目的是隐藏启动画面,渲染主页面即可!!

最终小萌新采用方式:启动页定时器时间到了后,然后发送广播(eventBus)到主页面,然后setState的方式改变bShowHome = true; 进而刷新页面,重新渲染即可!

SplashScreen.dart 粘贴一把,其中eventbus - https://pub.dev/packages/event_bus#-installing-tab- 用法 https://pub.dev/packages/event_bus#-example-tab-

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:wx_advmanager/common/event/eventbus.dart';
import 'package:wx_advmanager/pages/user/loginevent.dart';class SplashScreen extends StatelessWidget{@overrideWidget build(BuildContext context) {// 隐藏状态栏、虚拟键SystemChrome.setEnabledSystemUIOverlays([]);return MaterialApp(title: '启动图demo',color: Colors.white,theme: new ThemeData(brightness: Brightness.light,backgroundColor: Colors.white,platform: TargetPlatform.android),home: new _SplashScreen(),//      routes: <String, WidgetBuilder>{//        '/home': (BuildContext context) => new MyApp()//      },);}
}class _SplashScreen extends StatefulWidget {@override_SplashScreenState createState() => new _SplashScreenState();
}class _SplashScreenState extends State<_SplashScreen> {startTime() async {//设置启动图生效时间var _duration = new Duration(seconds: 3);return new Timer(_duration, navigationPage);}void navigationPage() {// Navigator.of(context).pushReplacementNamed('/home');// 由于上述路由到主页面之后,showDialog后,无法通过pop隐藏(反而是把当前界面给干掉了,导致进度条一直转);// 所以这里发送消息到主页面,进行启动画面的隐藏处理eventBus.fire(new SplashToHomeEvent(126, "toHome"));}@overridevoid initState() {super.initState();startTime();}@overrideWidget build(BuildContext context) {return new Scaffold(body: new Center(child: new Image.asset('assets/images/splash.jpg'),),);}
}

eventBus变量,你可以创建一个eventbus.dart

import 'package:event_bus/event_bus.dart';EventBus eventBus = new EventBus();

然后其他地方就都可以用这个eventBus来通信了。小萌新一开始分别在不同的页面创建这个,然后发现通信个球呀....要用一个实例来进行通信妮。。。

注册监听的地方以及主页面启动页地方....

 @overridevoid initState() {super.initState();// 注销监听事件eventBus.on<SplashToHomeEvent>().listen((event) {setState(() {bShowHome = true;});});}

基本上就是这样子吧。。。原本的方式(如下)是首先到启动画面的,然后路由的,,无奈只能这样。。学了没多久,很多不了解,后面再仔细研究吧。 如果有人知道可以留个言告知下,谢谢大佬们!

注意:如果涉及到主页面有物理返回键弹出的情况,记得如果是启动页,此时不要弹出是否退出的弹窗!!!如下做个判断处理bShowHome...

   Future<bool> _onWillPop() {// 如果是启动画面的情况下,不触发返回弹窗;但是不允许点击退出!if (!bShowHome) {return Future.value(false);}return showDialog(context: context,builder: (context) => new AlertDialog(title: new Text('提示'),content: new Text('您确定要退出应用?'),actions: <Widget>[new FlatButton(onPressed: () => Navigator.of(context).pop(false),child: new Text('取消'),),new FlatButton(onPressed: () async {await quit();},child: new Text('退出'),),],),) ?? false;}// 退出的一种方式static Future<void> quit() async {await SystemChannels.platform.invokeMethod('SystemNavigator.pop');}

附录,小萌新给大家贴几个人别人的做法,他们有没有涉及整个问题不清楚哈!。。。

https://blog.csdn.net/u010123643/article/details/83379957

Flutter——启动页splash全屏效果实现

Flutter APP实践之 “启动页” - 这个没细看,不过好像是我这种思路

先酱紫吧。。。。小萌新还需要加油才行。。。努力,开心,快乐,幸福万岁!

android dialog 隐藏状态栏_Flutter-最近搞了个项目-启动页Splash,Navigator.pop无法关闭Dialog...相关推荐

  1. adb隐藏状态栏图标,Android 完全隐藏状态栏方法

    Android 完全隐藏状态栏方法  https://blog.csdn.net/ljbphoebe/article/details/88179576 1. 隐藏ActionBar: ActionBa ...

  2. Android开发——解析App启动页(Splash)黑/白闪屏现象

    前言 我在开发App的时候,出现App在启动会出现短暂的黑/白闪屏现象.这样现象对用户的体验感是会产生不好的影响,于是我就研究这个现象的起因和解决办法.不负有心人,我在翻了很多博客,踩完坑之后找到起因 ...

  3. android之隐藏状态栏、图标、布局

    通过代码控制隐藏 隐藏布局控件: findViewById(R.id.FaceActivity_ConstraintLayoutBar).setVisibility(View.GONE); 隐藏图标: ...

  4. android dialog 隐藏状态栏_Android应用视图的管理者Window

    点击上方蓝色文字关注我哦 Window在Android是一个窗口的概念,日常开发中我们和它接触的不多,我们更多接触的是View,但是View都是通过Window来呈现的,Window是View的直接管 ...

  5. android dialog 隐藏状态栏_Android开发不得不收集的工具类集合

    嗨,你终于来啦 ~ 等你好久啦~ 喜欢的小伙伴欢迎关注,我会定期分享Android知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿.更新了几天Android基 ...

  6. android输入法隐藏状态栏,android 输入法设置显示隐藏

    Android是一个针对触摸屏专门设计的操作系统,当点击编辑框,系统自动为用户弹出软键盘,以便用户进行输入. 那么,弹出软键盘后必然会造成原有布局高度的减少,那么系统应该如何来处理布局的减少?我们能否 ...

  7. Codova Android 状态栏全透明 启动页全面屏总结

    使用到的Codova插件 状态栏插件:cordova-plugin-statusbar 启动页插件:cordova-plugin-splashscreen 1.设置状态栏全透明 修改 StatusBa ...

  8. android 筛选控件_Flutter学习六之实现一个带筛选的列表页面

    上期实现了一个网络轮播图的效果,自定义了一个轮播图组件,继承自StatefulWidget,我们知道Flutter中并没有像Android中activity的概念.页面间的跳转是通过路由从一个全屏组件 ...

  9. android自适应拉伸图片,Android 启动页-解决图片被拉伸和压缩问题,适配虚拟导航栏...

    Android 启动页设置非常简单 //styles.xml 设置主题 @drawable/bg_splash true //activity使用主题,这时点击app图标,就会显示@drawable/ ...

最新文章

  1. Winform中实现读取xml配置文件并动态配置DevExpress的RadioGroup的选项
  2. Swift--字符串和字符(一)
  3. 跳槽9招让你“空降”任何企业都能成功
  4. mysql 数据库日志管理工具_mysql mysqlbinlog日志管理工具使用教程
  5. java application程序_如何Java编写的application程序像exe一样方便shy;的运行
  6. iPhone13 系列售价曝光:没有涨价;曝华为P50系列7月29日发布;丁磊称专业比学校更重要:你同意吗?|极客头条...
  7. 一个Repeater的分页方法
  8. curlopt_ssl_verifypeer后https还是验证不过_2020CNAS能力验证小总结
  9. 关闭数字健康 android 魅族,魅族手机隐私模式开启关闭使用方法详解
  10. 丹麦为啥能成为“养猪王国”与“养猪强国”
  11. 超神学院暗质计算机,超神学院之拳皇
  12. 工业互联网平台核心技术之一:数据集成与边缘处理技术
  13. Android实现可录音/暂停录音/播放录音的录音软件
  14. H5 实现横向滚动的方法及需要注意的地方
  15. python抠图代码_五行 Python 代码实现批量抠图
  16. Python——标准库函数
  17. JavaScript中函数里的arguments属性
  18. 全球及中国汽车后市场产销规模现状及投资盈利风险分析报告2021-2027年
  19. NJU 2021 计算机拔尖(数学)测试 解题报告
  20. php 开启dcom,快速解决PHP调用Word组件DCOM权限的问题讲解

热门文章

  1. using namespace std
  2. String引起的OutOfMemory异常 + 如何计算C#对象所占内存的大小
  3. 解决php中json_decode的异常JSON_ERROR_CTRL_CHAR
  4. 2022年中国商业十大热点展望:共同富裕、碳达峰碳中和、创新、数字化、新国货.........
  5. 【实践】数据科学在搜索、广告、推荐系统的应用实践.pdf(附下载链接)
  6. pytorch查缺补漏之CUDA,自动求导
  7. PyTorch系列入门到精通——张量操作线性回归
  8. leetcode力扣12. 整数转罗马数字
  9. 学习记录-程序语言基础(1)
  10. EMNLP 2021 | 百度:多语言预训练模型ERNIE-M