flutter useRootNavigator属性的作用

news2024/11/30 8:54:48

useRootNavigator

用于确定是否将对话框推到距给定上下文最远或最接近给定上下文的Navigator

问题:

在使用showDatePicker的时候,android手机如果侧滑返回的时候,页面会关闭,showDatePicker弹出的dailog缺没有关闭。

使用如下:

Future<void> pickDate() async {
    var pickDateTime = await showDatePicker(
        context: context,
        initialDate: today,
        lastDate: today,
        firstDate: DateTime(today.year-1, today.month, today.day));

    if(pickDateTime != null && date != pickDateTime) {
      date = pickDateTime;
      _model.dataTime = date;
      _refresh();
    }
  }

showDatePicker 方法显示一个包含日期选择器的对话框 。当用户关闭对话框时,返回的 Future 解析为用户选择的日期。如果用户取消对话框,则返回 null 。

方法定义如下:


Future<DateTime> showDatePicker({
  //BuildContext类型必传参数,上下文
  @required BuildContext context,
  //DateTime类型必传参数,初始化选中的时间日期
  @required DateTime initialDate,
  //DateTime类型必传参数,可呈现的开始日期
  @required DateTime firstDate,
  //DateTime类型必传参数,可呈现的结束日期
  @required DateTime lastDate,
  //SelectableDayPredicate类型可选命名参数,用于设置可选择的时间区域,是一个函数
  SelectableDayPredicate selectableDayPredicate,
  //DatePickerMode类型可选命名参数,日期对话框的初始显示模式
  DatePickerMode initialDatePickerMode = DatePickerMode.day,
  //Locale类型可选命名参数,本地化设置
  Locale locale,
  //TextDirection类型可选命名参数,文本的显示方向
  TextDirection textDirection,
  //TransitionBuilder类型可选命名参数,构建子Widget的构建器
  TransitionBuilder builder,
  //bool类型可选命名参数,参数用于确定是否将对话框推到距给定上下文最远或最接近给定上下文的Navigator
  bool useRootNavigator = true,
}) 

怎么在页面关闭的时候关闭dialog呢?

将useRootNavigator置为false即可。


Flutter -- Dialog 随记

这篇文章主要是记录一些本人在项目中遇到的一些Dialog的坑和解决方案.方案虽一般般,但愿可以给大家一些建议吧,同时也希望大家一起多多交流,不吝赐教。

Future<T> showDialog<T>({BuildContext context, bool barrierDismissible, Widget child, Widget Function(BuildContext) builder, bool useRootNavigator, RouteSettings routeSettings})

showDialog :是在做项目时,经常使用到的一个显示弹窗函数,用于制作一些提示弹窗和用户操作弹窗路由。showDialog 具体的实现源码,这里就不展开聊,在网上有比较多的Flutter源码解析。这里我们主要聊聊我在项目中使用showDialog的一些愚见。

我们先聊聊接口参数的用途:

context  一般为当前路由的context,

barrierDismissible 控制弹窗点击空白区域是否可以关闭弹窗,默认为true

child  根据需求自定义的Widget,

builder  这个参数是一个返回widget 的回调函数,child 和builder 只能使用一个

useRootNavigator 默认为true,用于确定是否将弹窗推送到“context”最远的Navigator,true 为推送到最远,用于处理多个Navigator的情况,一般保持默认就好了

routeSettings 包含弹窗路由的配置信息,如路由的名称和传递的参数

平时项目中showDialog 一般无法满足产品的需求,产品一般都会要求我们给弹窗加上不同的展示动效或者不同颜色的遮罩,

源码:

showDialog 方法的源码

从我源码的截图可以看到,由于遮罩颜色和展示动效都是封装好的,因此我们无法传参进行修改。

这种情况我这边有两种处理方式:1.直接使用 showGeneralDialog 函数,showDialog 也是封装的这个,showGeneralDialog  函数提供参数足以应付产品的需求了,也可以自己对showGeneralDialog 进行自己的封装,然后提供一个类似 showDialog 的接口

2.如果产品对弹窗效果要求不高,改动不大话。就可以把showDialog 函数的代码复制到自己脚本上,然后把barrierColor Transition 作提为参数,也可以在这个函数上做一些自己的拓展。

这两种方法各位看官自行选择,其实都差不多,第二个偷了一些小懒而已,通过上面的说明,大家应该对showDialog 有一定的了解了。接下来主要写一些项目中遇到的一些问题,可能会持续更新吧。

弹窗不允许被手机的物理返回按钮关闭

解决方案:我查看dialog 的源码中并没有发现有提供字段去控制这个开关,因此直接使用showDialog 显示出来的弹窗,往往都会被手机物理返回按钮关闭。这里说一个禁用手机物理返回按钮的控件 WillPopScope ,这个控件提供onWillPop 回调函数来进行路由退出的管理,而手机物理返回按钮触发的是navigator.of(context).pop() 来关闭路由的,但是 Flutter 在触发navigator.of(context).pop() 之前会先检测需关闭的路由是否存在WillPopScope 控件,如果存在就根据onWillPop 回调进行路由退出处理,由于我在项目中使用的是第二种方法,因为我只是直接把WillPopScope 写入到自己的showDialog  脚本里面,并提供一个开关。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/41232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记42】操作DOM

操作DOM一、操作DOM1、步骤2、创建元素节点3、创建文本节点4、增加dom(添加到指定父节点的最后)5、增加dom(添加到指定父节点的最后)6、增加dom(添加到父节点的最前边)7、删除DOM8、修改某一个节点二、克隆DOM1、说明2、复制(克隆)一个LI三、获取元素尺寸(占地面积)四、获取浏览…

WordPress怎么禁止用户使用HTML标签,自动过滤HTML代码?

WordPress怎么禁止用户使用HTML标签&#xff0c;自动过滤HTML代码&#xff1f;出于安全考虑WordPress默认禁止角色为作者的用户写文章时直接添加HTML代码&#xff0c;包括读者留言时也是不允许的。如果想开放此限制&#xff0c;允许作者撰写文章和读者留言时添加HTML代码&#…

Java项目——博客系统(前后端交互)

项目展示 项目说明 使用servlet&#xff0c;实现前后端交互&#xff0c;通过jdbc和mysql数据库进行数据传输&#xff0c;使得可以将用户信息和博客列表存储在数据库中&#xff0c;实现真正的服务器&#xff0c;客户端&#xff0c;数据库三者的交互 项目代码 数据库 在sql数…

进阶的风控策略篇:如果筛选最佳策略帮我们锁定优质客群

在番茄风控往期的内容中&#xff0c;我们一直在跟大家介绍风控策略干货内容&#xff0c;相关内容包括&#xff1a; ①风控的拒绝捞回策略 ②多规则的策略筛选 ③策略的调优 ④策略的开发与应用 … 策略相关的内容可谓干货满满&#xff0c;比如关于策略开发与应用的内容上&#…

SpringBoot SpringBoot 原理篇 1 自动配置 1.15 自动配置原理【1】

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇1 自动配置1.15 自动配置原理【1】1.15.1 看源码了1.15.2 Import({AutoConfig…

初识图学习

初识图学习 一、简单图的基础 什么是图 七桥问题的定义是&#xff1a;一个步行者怎样才能不重复&#xff0c;不遗漏的一次走完七座桥。最后回到出发点。 当年&#xff0c;大数学家在解答七桥问题的同时&#xff0c;也开创了数学的一个新分支图论。 可以毫不夸张的说&#xff…

半小时制作简单版澳大利亚导游地图,太简单了,你也可以

目录 1 前言 2 QQ扫码注册一个账号 3 编辑景区 3.1 新建一个景区 3.2 增加景点 4 预览 5 申请管理员审核 6 看一下发布后的效果 1 前言 不少景区为了提升游客旅游体验&#xff0c;需要制作自己的导游地图&#xff0c;游客扫一下二维码就可以看到景区全貌和景点介绍。制作这…

销售词汇Sell In、Sell Through、Sell Out辨析

原文出处&#xff1a;https://zhuanlan.zhihu.com/p/89563704 销售的过程其实是一个货物和资金双向流动的过程&#xff0c;货物从厂家流向消费者&#xff0c;资金从消费者流向厂家。 但是大多数情况下&#xff0c;厂家是没办法直接把货物卖给消费者的&#xff0c;或者说厂家是没…

虚拟机安装openEuler/MobaXterm工具登录系统

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

一个用C#开发的操作系统的开源项目

自从C#的AOT编译机制发布以来&#xff0c;有趣的项目越来越多&#xff0c;今天给大家推荐一个开源项目&#xff0c;用C#开发的64位操作系统。 文章目录项目简介项目源码开发环境虚拟机与裸机硬件支持功能列表完善的编译、安装文档操作系统界面项目地址项目简介 这是一个使用.N…

SpringBoot SpringBoot 原理篇 2 自定义starter 2.2 IP计数业务功能开发【自定义starter】

SpringBoot 【黑马程序员SpringBoot2全套视频教程&#xff0c;springboot零基础到项目实战&#xff08;spring boot2完整版&#xff09;】 SpringBoot 原理篇 文章目录SpringBootSpringBoot 原理篇2 自定义starter2.2 IP计数业务功能开发【自定义starter】2.2.1 大概看看别人…

阿里云服务器安装mysql8

1. 安装前准备 查看是否安装&#xff1a; rpm -qa | grep mysql移除不想要的版本&#xff1a; yum remove 名称查找关于mysql的所有文件&#xff08;配置文件&#xff09; find / -name mysql ##或者 whereis mysql删除配置文件 rm -rf 文件最后需要注意的是&#xff1a;卸载后…

配置iSCSI实现Linux的远程块存储

文章目录一 名词解释二 需求三 环境准备四 搭建流程1 服务端准备硬盘并分区2 服务端安装软件包&#xff0c;并启动服务3 服务端 5个create 操作3-1 定义块设备&#xff0c;创建后备存储。3-2 为目标创建IQN3-3 创建一个ACL来控制特定的客户端访问3-4 为每个后备存储创建一个LUN…

基于C#的校园闲置物品共享系统的开发和实现(Asp.net+Web)

目 录 摘 要 I Abstract II 第1章 绪论 1 1.1选题背景 1 1.1.1校园闲置物品共享系统的开发背景 1 1.1.2学生闲置物品交易活动的现状 1 1.2 校园闲置物品共享系统的研究方向和内容 1 1.2.1研究方向 1 1.2.2研究内容 2 1.3 校园闲置物品共享系统的设计目标 2 1.4 校园闲置物品共…

Visual Studio Code(vs code) 安装c# .net环境 solution

Visual Studio Code(vs code) 安装c# .net环境 solution 一、安装.net必要环境 1.安装环境 https://dotnet.microsoft.com/zh-cn/download 我这里选择的是 .net 6.0 ;版本 .net SDK x86 2.在vs code拓展 搜索.net 全名&#xff1a;.NET Core Extension Pack 作者&#xf…

操作系统的发展与分类

文章目录世界上第一台通用电子计算机操作系统的发展阶段1. 手工操作阶段&#xff08;无操作系统的计算机系统&#xff09;2. 批处理阶段&#xff1a;同时处理多道程序3. 分时操作系统&#xff08;Time Sharing System&#xff09;4. 实时操作系统&#xff08;Real Time System&…

毫米波传感器原理介绍:测距

因为本篇是第一篇关于毫米波雷达传感器设备的介绍&#xff0c;我便多啰嗦两句。近几年随着无人驾驶等领域在国内的火热&#xff0c;做支撑实现无人驾驶的智能设备也多了起了&#xff0c;首当其冲的便是无人驾驶的眼睛“摄像头”&#xff0c;同样作为一种辅助手段的雷达技术也被…

HTMLDOM中的API之btoa和atob

btoa() btoa() 方法可以将一个二进制字符串&#xff08;例如&#xff0c;将字符串中的每一个字节都视为一个二进制数据字节&#xff09;编码为 Base64 编码的 ASCII 字符串。 示例&#xff1a; let encodedData window.btoa("Hello, world"); // 编码 let decode…

【C++笔试强训计划】第一天

遇事不决&#xff0c;可问春风&#xff0c;春风不语&#xff0c;即随本心 欢迎来到我的笔试强训计划专栏&#xff0c;这是计划正式开始的第一天。另外&#xff0c;我想说的是&#xff1a;博主本身水平有限&#xff0c;本专栏只作为学习笔记分享记录使用&#xff0c;对于一些题目…

Linux中如何获得进程的运行时堆栈

关于这个话题&#xff0c;我们一般是为了处理一下生产环境中程序出现死循环或者死锁等问题。我们一般想到的方法就是gdb attach上一个运行中的进程。但是这个需要手动交互。通过网上查找和实践&#xff0c;可以有以下几种选择&#xff1a; 第一种&#xff1a;pstack 进程ID …