代码编织梦想

Flutter 开发问题点一览



1. 问题描述

Flutter在iOS风格 CupertinoApp 中使用导航栏 CupertinoNavigationBar 时,出现了Widget内容滑到了顶部导航栏后面与其重叠的现象,如下图所示:
在这里插入图片描述
代码

  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(middle: Text("文本输入框")),
      child: Container(height: 120, color: Colors.red),
    );
  }

2. 原因、对策

原因

使用 CupertinoNavigationBar 时若 未设置或设置了带透明度的背景颜色 则可能会出现导航栏与其它widget重叠。

对策

  • 方式一: 在 CupertinoNavigationBar 中设置非透明背景色
  @override
  Widget build(BuildContext context) {
    return CupertinoPageScaffold(
      navigationBar: CupertinoNavigationBar(
        backgroundColor: Colors.white,  //添加背景色
        middle: Text("文本输入框"),
      ),
      child: Container(height: 120, color: Colors.red),
    );
  }
  • 方式二:在 CupertinoApp 主题中设置统一的导航栏背景色
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return CupertinoApp(
      theme: CupertinoThemeData(barBackgroundColor: Colors.white), //主题设置
      title: 'Flutter Demo',
      home: MyHomePage(),
    );
  }
}

3. 源码分析

3.1 查看 CupertinoPageScaffold 源码

查看 CupertinoPageScaffold navigationBar 属性的介绍即可知道原因,如果是半透明的,主要内容可能会滑到navigationBar后面。那默认颜色是什么呢?

在这里插入图片描述
3.2 查看 CupertinoNavigationBar 源码

查看 CupertinoNavigationBar backgroundColor 属性的介绍即可知道默认颜色为 CupertinoTheme 的 barBackgroundColor 属性。

在这里插入图片描述
3.3 查看 CupertinoThemeData 源码

查看 CupertinoThemeData barBackgroundColor属性可发现未设定值时会返回默认的颜色。

在这里插入图片描述
继续查看_defaults 可以发现其值为 _kDefaultTheme

在这里插入图片描述
_kDefaultTheme 的 barBackgroundColor默认为半透明色。

3.4 结论

该现象为Flutter的一个特性。
CupertinoPageScaffold 的 navigationBar 背景如果是半透明的,主要内容可能会滑到navigationBar 后面,而CupertinoApp默认的 navigationBar 背景色就是为半透明色,所以默认情况下顶部导航栏会与其它Widget重叠。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/ww897532167/article/details/111093988

iOS CALayer CABasicAnimation以及CATransaction-爱代码爱编程

1. 概述 上文简单讲述了CALayer的概念以及一些属性,针对于Layer,除了其展示样式,我们更注重它的动画,本篇文章及本专栏的后续文章将围绕Layer的核心动画进行探究。 本文首先看一下CALayer的基础动画类CABasicAnimation以及CATransaction的使用。 2.  CALayer基础动画 CALayer基础动画类为C

Android 事件分发机制抽象--钓钩模型-爱代码爱编程

用户体验小姐姐巧妙地利用有限的手机屏幕空间,完美地设计出简单实用的交互功能,如果多问一句 “怎么做到的” ? 答案必须是从事件分发机制的高超运用说起。 在我 Android 应用业务开发职业生涯中,接触到最多的也正是如何运用事件分发机制和自定义控件,堆砌出一幅幅可交互的精致业务功能画面。下图是我分别在手机百度 App 和美团 App 上研发的“列

好家伙,微信能设置2个头像了!-爱代码爱编程

上一期为大家分享了一个微信小技能,改昵称。 没想到反响很不错, 小伙伴玩得不亦乐乎,留言区变成一片彩色的海洋, 既然大家对这类微信小技能如此感兴趣。 今天,再给小伙伴分享一个微信玩法——双头像。 效果如下图所示↓ ,安卓iOS都支持哦。 小图查看的不太清晰,给你们实际操作一遍仔细瞧瞧。 制作步骤非常简单,进入工具后,顶部显示的是

ios 升级后,滚轮选择的时间控件失效 UIDatePicker-爱代码爱编程

变成这个样子了     2.如果使用以前的样式 datepicker.preferredDatePickerStyle = .wheels 不知道是不是苹果的bug 宽高都不对 let datepicker = UIDatePicker(frame: CGRect(x: 0, y: 100, width: self.view.frame

IOS UIWindow 和 UIScreen-爱代码爱编程

通常UIWindow 与 UIScreen 是配合使用的。当我们想自定义window对象或者获取硬件屏幕大小必定会用到 UIWindow 和 UIScreen UIWindow 一个APP只有一个UIWindow 对象,表示当前窗口对象。UIWindow 继承于 UIView。 通常使用Window 自定义根节点的 UIViewControl

Flutter iOS风格文本输入框CupertinoTextField光标在Android中未与提示文本对齐-爱代码爱编程

Flutter 开发问题点一览 Flutter iOS风格中Widget内容滑到了顶部导航栏后面与其重叠Flutter iOS风格文本输入框CupertinoTextField光标在Android中未与提示文本对齐 文章目录 Flutter 开发问题点一览1. 问题描述2. 原因、对策3. 源码分析 1. 问题描述 Flutter iOS风格

排序算法复习(上篇)-爱代码爱编程

排序算法概述 排序就是将一组对象按照某种逻辑顺序重新排列的过程。比如,订单按照日期排序的——这种排序很可能使用了某种排序算法。在计算时代早期,大家普遍认为30% 的计算周期都用在了排序上。如果今天这个比例降低了,可能的原因之一是如今的排序算法更加高效,而并非排序的重要性降低了。现在计算机的广泛使用使得数据无处不在,而整理数据的第一步通常就是进行排序。几乎

2、文本组件-爱代码爱编程

Flutter最基本的组件-文本组件 1.1 Text属性及含义1.1.1 Text 常用属性介绍1.1.2 TextAlign1.1.3 textDirection1.1.4 softWrap1.1.5 overflow1.1.6 maxLines1.1.7 textScaleFactor1.2 TextStyle 属性介绍1.3 Text.ri

Flutter RichText 富文本标签样式 局部文字点击事件-爱代码爱编程

在码农的世界里,优美的应用体验,来源于程序员对细节的处理以及自我要求的境界,年轻人也是忙忙碌碌的码农中一员,每天、每周,都会留下一些脚印,就是这些创作的内容,有一种执着,就是不知为什么,如果你迷茫,不妨来瞅瞅码农的轨迹。 优美的音乐节奏带你浏览这个效果的编码过程坚持每一天,是每个有理想青年的追求追寻年轻人的脚步,也许你的答案就在这里 //协议

Flutter自定义布局排列:单个子View-爱代码爱编程

简单例子:该例子实现了子View居中对齐效果 class CenterLayout extends SingleChildRenderObjectWidget { CenterLayout({ Key key, Widget child }): super(key: key , child: child); @overri

Flutter自定义布局排列:多个子View-爱代码爱编程

简单例子:该例子让多个子View垂直排列 class LinearLayout extends MultiChildRenderObjectWidget { LinearLayout({ Key key, List<Widget> child }): super(key: key , children: child)

记录安装flutter的一些坑-爱代码爱编程

记录Flutter 安装出现的一些问题 1 首先下载Flutter sdk 建议安装最新版 下载地址https://www.baidu.com/link?url=L5t4aE9yfDnUkfVgc7CXvvZ4HmjYod_GnvSqMqOv646EZBhIJMospzbR2ezCbBYz1V9D8svA5quwyYnfAga5UK&wd=&am