第四百三十八回

文章目录

  • 1. 概念介绍
  • 2. 思路与方法
    • 2.1 实现思路
    • 2.2 实现方法
  • 3. 示例代码
  • 4. 内容总结

们在上一章回中介绍了"不同平台上换行的问题"相关的内容,本章回中将介绍如何在页面上显示蒙板层.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

我们在这里说的蒙板层是在正常的页面上显示一个蒙板,相当于给页面加了一层毛玻璃,进而达到模糊显示的效果,除了模糊显示外还可以阻止页面响应点击事件,因为任
何的点击事件都被蒙板响应了,位于蒙板下的正常页面无法接收到点击事件。本章回中将介绍如何实现这样的蒙板。

2. 思路与方法

2.1 实现思路

考虑了蒙板的功能后,我们决定使用stack组件来管理页面,底层显示正常的页面,上层显示蒙板页面。正常情况下显示正常的页面,符合一定条件时显示蒙板页面。这个
便是我们实现蒙板的整体思路。

2.2 实现方法

有了思路后,我们就可以实现蒙板了,下面是详细的实现方法;

  • 使用Scaffold组件创建一个页面布局;
  • 创建一个Stack组件对象,并且把它赋值给Scaffold的body属性;
  • 创建一个正常的页面组件,把它放在Stack组件的底层;
  • 创建一个蒙板页面组件,把它放在Stack组件的上层;
  • 给蒙板页面添加条件,只有满足特定条件时才显示蒙板,否则显示空组件;

3. 示例代码

bool isShowOverlay = false;Scaffold(appBar: AppBar(title: const Text("Example of Scaffold Overlay"),backgroundColor: Colors.purpleAccent,///这个值默认为true,如果设置为false就会隐藏返回箭头automaticallyImplyLeading: true,///该属性和extendBodyBehindAppBar属性同时设置为true时才可以让body部分的内容覆盖到AppBar上面///此时就会显示蒙板,不过它不会覆盖AppBar中的返回箭头和TitleforceMaterialTransparency: true,),extendBodyBehindAppBar: true,body: Stack(children: [///正常页面Positioned(left: 0,top: 200,child: Column(children: [const Text("This is body"),ElevatedButton(onPressed: () {setState(() {isShowOverlay = true;});},child: const Text("show overlay"),),],),),///蒙板页面Positioned(top: 0,left: 0,width: screenWidth,height: screenHeight,child: isShowOverlay ? Container(color: Colors.black26,alignment: Alignment.center,child:  const Text("This is overlay"),): const SizedBox.shrink(),),],),
);

上面的示例代码完全按照实现方法中的步骤实现,我们还在关键的地方添加了注释,这样有助于大家理解代码。编译并且运行上面的程序,可以看到一个正常的页面,页面
顶部是标题栏,页面中间是一行文字和一个按钮,点击按钮后页面被蒙板覆盖,蒙板中心位置显示"This is overly"文字,刚才的按钮无法响应点击事件。我在这里
就不演示程序的运行效果了,建议大家亲自动手去体验一下。此外,我们分享一些细节问题。我们需要配置Scaffold的extendBodyBehindAppBar属性和AppBar中
的forceMaterialTransparency属性,这样才能让蒙板覆盖到AppBar,否则蒙板只能覆盖AppBar以外的页面。AppBar被覆盖后还剩下导航图标(返回箭头)和标题
没有被覆盖。这个不好理解,我们给AppBar配置背景色后就能清楚的看到。比如上面的代码中导航图标和标题都是默认的黑色,AppBar的背景颜色是紫色,蒙板的颜色
是浅黑色。没有显示蒙板时可以看到黑色的标题和紫色的背景,显示蒙板后只能看到黑色的标题和浅黑色的蒙板。其实我们可以把它们理解是三个图层组成的立体页面,
黑色的标题位于最上层,中间是蒙板层,下层是紫色的AppBar。没有蒙板时可以看到两层,有了蒙板后紫色的AppBar被蒙板覆盖,无法被我们看到。在AppBar中还有
一个叫automaticallyImplyLeading的属性,它的默认值为true,表示可以显示导航图标,如果把该属性的值设置为false,那么在显示蒙板时导航图标会被蒙板
覆盖,此时,我们只能看到标题。有看官说:如何才能让蒙板把标题也覆盖掉呢?目前我们还没有找到好的方法,不过可以把标题的颜色修改成和蒙板一样的颜色,这样看
上去就和被蒙板覆盖一样。不过我们不推荐这样做,毕竟这种方法属于鱼目混珠,没有从根本上解决问题。

4. 内容总结

最后,我们对本章回的内容做一个全面的总结:

  • 可以使用Stack组件配合Scaffold组件创建一个可以显示蒙板的页面;
  • 显示蒙板时最好把AppBar也覆盖掉,只留下标题和导航图标;
  • 是否显示蒙板需要指定一个条件,只有满足特定条件时才可以显示蒙板;
    看官们,与"如何在页面上显示蒙板层"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MQ消息队列详解以及MQ重复消费问题

MQ消息队列详解以及MQ重复消费问题 1、解耦2、异步调用3、流量削峰4、MQ重复消费问题,以及怎么解决?4.1、重复消费产生4.2、解决方法: https://blog.csdn.net/qq_44240587/article/details/104630567 核心的就是:解耦、异步、削锋…

用html写一个爱心

<!DOCTYPE html> <html lang"zh-CN"><head><meta http-equiv"Content-Type" content"text/html; charsetUTF-8" /><title>爱您</title><style>* {padding: 0;margin: 0;}body {background-color: pin…

采用大语言模型进行查询重写——Query Rewriting via Large Language Models

文章&#xff1a;Query Rewriting via Large Language Models&#xff0c;https://arxiv.org/abs/2403.09060 摘要 查询重写是在将查询传递给查询优化器之前处理编写不良的查询的最有效技术之一。 手动重写不可扩展&#xff0c;因为它容易出错并且需要深厚的专业知识。 类似地…

SSRS错误:打开Web服务URL http 500 错误

安装完SSRS后&#xff0c;点击如下链接&#xff0c;出现 http 500 错误 查看 windows 的事件日志 发现是这个文件夹的读取权限出了问题&#xff0c;下面修改权限

Php_Code_challenge13

题目&#xff1a; 答案&#xff1a; 解析&#xff1a; 开启一个会话&#xff0c;在SESSION变量"nums"为空时则对"nums","time","whoami"进行赋值&#xff0c;并在120秒后关闭会话&#xff0c;创建一个变量"$value"…

STM32应用开发——使用PWM+DMA驱动WS2812

STM32应用开发——使用PWMDMA驱动WS2812 目录 STM32应用开发——使用PWMDMA驱动WS2812前言1 硬件介绍1.1 WS2812介绍1.1.1 芯片简介1.1.2 引脚描述1.1.3 工作原理1.1.4 时序1.1.5 传输协议 1.2 电路设计 2 软件编程2.1 软件原理2.2 测试代码2.2.1 底层驱动2.2.2 灯效应用 2.3 运…

Pulsar服务端处理消费者请求以及源码解析

引言 处理读写是Pulsar服务端最基本也是最重要的逻辑&#xff0c;今天就重点看看服务端是如何处理的读请求也就是消费者请求 正文 Pulsar服务端处理消费者请求的流程大致如下图所示 消费者通过TCP向服务端发起消息拉取请求Broker会根据请求中携带的ID来获取在服务端对应的…

华为交换机配置指引(包含安全配置部分)以 S5735S-L48T4S-A1 配置为例

华为S5735S-L48T4S-A1 是一款千兆以太网交换机: 端口结构: 48个10/100/1000BASE-T以太网端口和4个千兆SFP光接口供电方式: 交流电源背板带宽: 432Gbps包转发率: 87/166Mpps机箱高度: 1U重量: 2.76kg(不含包材)功耗: 典型功耗为43.3W接口: 48个10/100/1000BASE-T以太网电接口…

Incus:新一代容器与虚拟机编排管理引擎

Incus是什么&#xff1f; Incus是一个用于编排管理应用型容器、系统型容器及虚拟机实例的管理工具。它是对 Canonical LXD 的继承与发展&#xff0c;引入了更多的存储驱动支持。 Incus项目的产品地址&#xff1a;Linux Containers - Incus - Introduction 在 LXC-Incus 项目…

FebHost:人工智能时代的新宠儿.AI域名

近年来,人工智能技术在各行各业迅猛发展,正在深刻改变着我们的生活。作为AI领域的专属域名,.AI域名正成为越来越多企业和个人的首选。 那么,.AI域名到底是什么呢?它是一种特殊的顶级域名(Top-Level Domain, TLD),于2013年由 安哥拉政府正式退出。与其他通用顶级域名如.com、.…

QT网络调试助手

QT网络调试助手 1.开发流程 2.QTtcp服务器   1.1 服务端数据读取   1.2 服务端发送数据-所有客户端   1.3 服务端自动刷新ip地址   1.4 服务端检测客户端断开状态   1.5 服务端发送数据-指定特定客户端发送数据   1.6 服务端停止监听和断开 3.QTtcp客户端 1…