第二百六十六回

文章目录

  • 1. 概念介绍
  • 2. 分析与解决
    • 2.1 分析问题
    • 2.2 解决方案
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了"如何修改CircleAvatar的大小"相关的内容,本章回中将介绍如何修改StatusBar中文字的颜色.闲话休提,让我们一起Talk Flutter吧。

在这里插入图片描述

1. 概念介绍

在实际项目中发现一个问题:程序顶部StatusBar中的的文字颜色从默认的黑色变成了白色,而且是时好时坏。我们在程序中没有直接修改过这些内容,估计是修改其它
内容引入的问题。本章回中将带着大家一起去分析并且解决这个问题。

2. 分析与解决

2.1 分析问题

我们没有修改过状态栏(即StatusBar)中的文字的颜色,但是我们修改过状态栏的颜色,这个在"第一百五十六回:如何实现沉浸式状态栏"章回中介绍过,我们通过把状
态的颜色设置成透明色来实现沉浸式效果。但是这个修改不会影响到状态栏中文字的颜色。于是我们继续查找问题的原因,后来发现我们创建沉浸状态栏时分没有AppBar
和有AppBar两种情况。从没AppBar的页面跳转到有AppBar的页面时一切正常,但是从有AppBar的页面跳转到没有AppBar的页面时问题就出现了。终于找到了可以百
分之百复现问题的方法。于是我们把问题定位到了AppBar上。修改AppBar的页面使用图片背景,详细的操作可以参考"第一百六十六回:如何创建以图片为背景的页面"
中的内容。为了让图片背景覆盖到状态栏,我们参考了创建沉浸式菜单的方法,修改了AppBar背景颜色:把AppBar的颜色设置为透明色。此时,通过导航返回到上一个
没有AppBar的页面时,该页面状态栏的文字变成了白色。看来就是修改AppBar的背景色影响了状态栏中文字的颜色。去掉该修改后状态栏中的文字颜色恢复正常。

2.2 解决方案

我们在分析问题时已经找到了解决问题的方法:在创建以图片为背景的页面时,不设置AppBar的颜色。只修改两个内容,详细如下:

  • 在main文件中修改状态栏的背景颜色,将其设置为透明色;
  • 在AppBar中不修改AppBar的背景颜色;
    注意:我在这里说的不修改AppBar的背景颜色是指不通过background属性修改AppBar的背景颜色,而是把forceMaterialTransparency的属性值设置为true。

3. 示例代码

Scaffold(
  appBar: AppBar(
    title: const Text("Example of Background Image"),

    ///不通过这种方式修改AppBar的背景颜色,而是使用下面的方式修改背景颜色
    //background:Colors.white,
    ///让appBar变成透明色,不然会覆盖扩展的body内容
    forceMaterialTransparency: true,
  ),

  ///让body中的内容扩展到AppBar和statusBae,需要在runAppBar前设置状态栏为透明色
  extendBodyBehindAppBar: true,
  body: Stack(
    children: [
      const Image(
        width: double.infinity,
        height: double.infinity,
        fit: BoxFit.fill,
        image: AssetImage("images/ex.png"),
      ),
      Padding(
        //需要添加边距:status+appBar的高度,不然会上升屏幕最上方
        padding: const EdgeInsets.only(top: 56*2),
        child: SizedBox(
          width: double.infinity,
          height: double.infinity,

          ///调试时使用,方便观察容器的大小
          // color: Colors.green,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.spaceAround,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              const Text(
                  style: TextStyle(
                    color: Colors.redAccent,
                    fontSize: 32,
                  ),
                  "body of page"),
              ElevatedButton(onPressed: () {}, child: const Text("button"))
            ],
          ),
        ),
      )
    ],
  ),
);

上面的示例代码演示了如何创建以图片为背景的页面,不过要注意修改AppBar背景颜色的方法。我们在代码中添加了注释,希望大家引起注意。

4. 内容总结

本章回中介绍的问题是实现沉浸式效果、实现以图片为背景的页面和页面导航三个知识点一起作用引起的问题,查找问题的原因比较复杂。我们先是找到复现问题的方法,
然后在此基础上找到了解决问题的文案。不过其背后的原因还不清楚:AppBar的背景颜色如何与状态栏中的文字颜色关联在了一起?欢迎大家在评论区交流与讨论。
最后,我们对本章回的内容做一个全面的总结:

  • 实现沉浸式状态栏效果时分有无AppBar两种情况;
  • 实现以图片为背景的页面时注意AppBar背景颜色的修改方式;
  • 实现以图片为背景的页面时需要在沉浸式状态栏的基础上实现;
    看官们,与"如何修改StatusBar中文字的颜色"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony-层叠布局(Stack)详解

我们总是为了太多遥不可及的东西去拼命,却忘了人生真正的幸福不过是灯火阑珊处的温暖,柴米油盐的充实,人生无论你赚的钱,是多还是少,经历的事情是好还是坏,都不如过好当下的每一天! 目录 一&am…

CF1178F1 Short Colorful Strip 题解

Short Colorful Strip 传送门 题面翻译 题目描述 这是F题的第一个子任务。F1和F2的区别仅在对于m和时间的限制上 有n1种颜色标号从0到n,我们有一条全部染成颜色0的长为m的纸带。 Alice拿着刷子通过以下的过程来给纸带染色: 我们按照从1到n的顺序进…

美国初创公司Rabbit推出口袋AI设备R1;吴恩达课程:使用LangChain.js构建强大的JavaScript应用

🦉 AI新闻 🚀 美国初创公司Rabbit推出口袋AI设备R1,短时间内被抢购一空 摘要:美国初创公司Rabbit在CES 2024上发布了口袋AI设备R1,这款设备在一天内被抢购一空,售价为199美元。R1具有小巧玲珑的触屏、摄像…

【线性表的基本操作实现及其应用 】

线性表的基本操作实现及其应用 1.实验目的 ⑴ 熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。 ⑵ 巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。 2.实验原理与要求 ⑴ 按照数据结构实验任务书&…

【笔记】书生·浦语大模型实战营——第四课(XTuner 大模型单卡低成本微调实战)

【参考:tutorial/xtuner/README.md at main InternLM/tutorial】 【参考:(4)XTuner 大模型单卡低成本微调实战_哔哩哔哩_bilibili-【OpenMMLab】】 总结 学到了 linux系统中 tmux 的使用 了解了 XTuner 大模型微调框架的使用 pth格式参数转Hugging …

【量化交易故事】小明开启了量化创业之旅-01

故事开始于2023年的春天,小明是一位对金融市场充满热情的IT工程师。在经历了数次基于主观判断和个人情绪进行投资却收获平平后,他意识到传统交易方式中的人为因素难以避免,而这往往成为影响投资决策稳定性和准确性的关键障碍。在一次偶然的机…

工作压力测试

每个职场人都会遇到工作压力,在企业人力资源管理的角度来看,没有工作压力是人力资源的低效,适当的工作压力可以促使员工不断进取,然而每个人的抗压能力是不同的,同样的工作量和工作难度,不同的人在面对相同…

【Java语言基础②】Java基本语法——Java程序基本格式,注释,标识符,常量

通过前面的学习,大家对Java语言有了一个基础认识,但现在还无法使用Java语言编写程序,要熟练使用Java语言编写程序,必须充分掌握Java语言的基础知识。今天咱们就来聊一聊Java的基本语法。 1.java程序的基本格式 Java程序代码必须…

在win11中安装“mingw-w64-gcc-13.2-stable-r40”

在windows系统中,安装完VSCode后,还需要安装mingw,才可以使用C和C编译。 1、从MinGW-w64镜像站点:http://files.1f0.de/mingw,下载“mingw-w64-gcc-13.2-stable-r40”,见下图: 2、将“mingw-w6…

Centos7编译Python3.11源码并安装完成的详细教程

Python3.11的Linux源码: Index of /ftp/python/https://www.python.org/ftp/python/由于Centos7里自带的openssl是1.0版本的,而Centos Stream8和9用的是openssl-1.1.1版本的。 注意:openssl必须是openssl-1.1.1版本的,虽然最高版…

【大厂秘籍】 - Java多线程面试题

Java多线程面试题 友情提示,看完此文,在Java多线程这块,基本上可以吊打面试官了 线程和进程的区别 进程是资源分配的最小单位,线程是CPU调度的最小单位 线程是进程的子集,一个进程可以有很多线程,每条线…

10.9.2 std::function 存储函数对象 Page184

41行,pending只是inc的复制品,所以43,44行,不会改变inc()的值 demo_function2()的运行结果: 59行,pending是inc的引用,所以61,62行将会改变inc()的值

CloudFlare平台下载的WARP一直连不上(warp无法连接)解决办法

遇到问题: 解决办法: 下载一个warp选ip的文件夹,选一下ip就行了。 下载链接如下: https://pan.kejicode.cn/d/Onedrive/WIN%E7%AB%AFwarp%E8%87%AA%E9%80%89IP(%E6%89%8B%E5%8A%A8%2B%E8%87%AA%E5%8A%A8).rar?signRqBdHIMyyhg…

查询和结果处理的Java代码

match_all查询: //查询所有文档 match_all查询Testvoid testMatchAll() throws IOException {// 1.准备RequestSearchRequest request new SearchRequest("hotel");// 2.准备DSLrequest.source().query(QueryBuilders.matchAllQuery());// 3.发送请求Sea…

Apollo之原理和使用讲解

文章目录 1 Apollo1.1 简介1.1.1 背景1.1.2 简介1.1.3 特点 1.2 基础模型1.3 Apollo 四个维度1.3.1 application1.3.2 environment1.3.3 cluster1.3.4 namespace 1.4 本地缓存1.5 客户端设计1.5.1 客服端拉取原理1.5.2 配置更新推送实现 1.6 总体设计1.7 可用性考虑 2 操作使用…

海外媒体宣发:新闻媒体发稿引爆社交媒体的7个诀窍-华媒舍

社交媒体的崛起已经改变了新闻媒体的传播方式。从Facebook到Twitter,从Instagram到LinkedIn,社交媒体平台为新闻媒体提供了一个巨大且潜力无限的受众群体。要在这个竞争激烈的环境中引爆社交媒体,需要一些技巧和诀窍。在本篇文章中&#xff0…

【CSS】保持元素宽高比

保持元素的宽高比,在视频或图片展示类页面是一个重要功能。 本文介绍其常规的实现方法。 实现效果 当浏览器视口发生变化时,元素的尺寸随之变化,且宽高比不变。 代码实现 我们用最简单的元素结构来演示,实现宽高比为4&#xf…

WorkPlus卓越的即时通讯工具,助力企业提升工作效率

在当今快节奏的商业环境中,高效沟通和协作是企业成功的关键。而即时通讯作为实现高效沟通的利器,成为了现代企业不可或缺的一部分。作为一款领先的即时通讯工具,WorkPlus以其卓越的性能和独特的功能,助力企业打造高效沟通和协作的…

初始化数组

一、静态初始化格式: 数据类型[ ] 数组名 new 数据类型[ ]{元素1,元素2,元素3......} 等号后面的new 数据类型可以省略 注意:什么类型的数组只能存放什么类型的数据 直接打印a或b会显示其地址 数组的元素个数:arr…

Android Studio 如何设置中文

Android Studio 是一个为 Adndroid 平台开发程序的集成开发环境(IDE)。 如何安装中文插件 在 Jetbrains 家族的插件市场上,是能够搜到语言包插件的,正常情况下安装之后只需要重启即可享受中文界面,可AndroidStudio 中…
最新文章