热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

androiddialog隐藏状态栏_Flutter最近搞了个项目启动页Splash,Navigator.pop无法关闭Dialog...

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

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

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

3c06de96af96cbe907126b88d30feae0.png

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

e6b7d064f164e14a925741cace4acd5e.png

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

9bb9ba356982ebfe8cf8baaa9608fb7d.png

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

小萌新就想到,干脆主页面增加一个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: {// '/home': (BuildContext context) => new MyApp()// },);}
}class _SplashScreen extends StatefulWidget {@override_SplashScreenState createState() => new _SplashScreenState();
}class _SplashScreenState extends State<_SplashScreen> {startTime() async {//设置启动图生效时间var _duration &#61; new Duration(seconds: 3);return new Timer(_duration, navigationPage);}void navigationPage() {// Navigator.of(context).pushReplacementNamed(&#39;/home&#39;);// 由于上述路由到主页面之后&#xff0c;showDialog后&#xff0c;无法通过pop隐藏&#xff08;反而是把当前界面给干掉了&#xff0c;导致进度条一直转&#xff09;&#xff1b;// 所以这里发送消息到主页面&#xff0c;进行启动画面的隐藏处理eventBus.fire(new SplashToHomeEvent(126, "toHome"));}&#64;overridevoid initState() {super.initState();startTime();}&#64;overrideWidget build(BuildContext context) {return new Scaffold(body: new Center(child: new Image.asset(&#39;assets/images/splash.jpg&#39;),),);}
}

eventBus变量&#xff0c;你可以创建一个eventbus.dart

import &#39;package:event_bus/event_bus.dart&#39;;EventBus eventBus &#61; new EventBus();

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

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

&#64;overridevoid initState() {super.initState();// 注销监听事件eventBus.on().listen((event) {setState(() {bShowHome &#61; true;});});}

d66fd273152c9bbaaa7fe89b15c77d00.png

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

890783847bf4ebb6e44479e07d98eb36.png

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

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

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

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

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

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

先酱紫吧。。。。小萌新还需要加油才行。。。努力&#xff0c;开心&#xff0c;快乐&#xff0c;幸福万岁&#xff01;



推荐阅读
author-avatar
uy不uf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有