IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter Visibility Widget -> 正文阅读

[移动开发]Flutter Visibility Widget

Opacity Widget

一个可以让子控件透明度发生变化的控件.

构造函数说明

const Opacity({
    Key? key,
    required this.opacity,//透明度,
    this.alwaysIncludeSemantics = false,
    Widget? child,
  })
  • opacity:设置透明度,当设置为0时,子控件不可见,在屏幕上不占用空间,但是仍然在Widget Tree中.
    当opacity的值不在[0,1]之间,子控件先会绘制到缓冲区,然后在绘制到屏幕.

  • alwaysIncludeSemantics:当该值设置为true,并且opacity=0时,虽然子控件不可见,但是在屏幕上会占用子控件大小的空间.

    当[Image]、[Color]使用Opacity设置透明度在[0,1]之间时,使用Image\Color更高效.

	//方案一
    Opacity(
      opacity: 0.5,
      child: Container(
        color: Color.fromRGBO(0, 0, 255, 1),
        width: 60,
        height: 60,
      ),
    )
    //方案二 更高效,切效果和方案一一样
    Container(
      color: Color.fromRGBO(0, 0, 255, 0.5),
      width: 60,
      height: 60,
    )
    

Offstage Widget

可以控制子控件是否显示

构造函数

const Offstage({ Key? key, this.offstage = true, Widget? child })
  • offstage: 当offstage=false,子控件(child)可见;
    当offstaged=true是,子控件不可见;子控件在Widget Tree,不进行绘制,不会命中测试;也不占用空间;子控件仍处于active状态;子控件动画仍在进行,所以子控件有动画时,需要手动停止掉动画;
Offstage(
      offstage: false,
      child: GestureDetector(
        onTap: () {
          print("**** on pressed ***");
        },
        child: Container(
          width: 60,
          height: 60,
          color: Colors.deepPurple,
        ),
      ),
    )

Visibility Widget

控制子控件是否可见

构造函数

  const Visibility({
    Key? key,
    required this.child,
    this.replacement = const SizedBox.shrink(),
    this.visible = true,
    this.maintainState = false,
    this.maintainAnimation = false,
    this.maintainSize = false,
    this.maintainSemantics = false,
    this.maintainInteractivity = false,
  })
  • visible:,true:子控件可见,绘制到屏幕上; false时,子控件不可见,并且不在屏幕上占用一定的空间,此时会使用replacement替换child,实际绘制的Widget就是replacement,默认replasement时宽高为0的SizedBox.
  • maintainState:当visible=false时,是否保存子控件的状态.当为true时,子空间会在Widget Tree中存在,不占用屏幕 的空间,其实际在子child增加了Offstage等一些父控件.
  • maintainSize:是否为子控件所在的位置保留空间.当maintainSize=true[maintainState、maintainAnimation]时,[]子控件不可见,但是其所在位置占用的空间存在.在Visibility和子控件之间增加了Opacity.

其他隐藏控件的方式

当一个控件在状态改变时,不需要进行绘制,可以一动态的方式决定是否将控件添加到Widget Tree中.
比如当一个控件在需要时,才添加到控件,否则不添加;

///按需将控件添加到Widget Tree
@override
  Widget build(BuildContext context) {
    Widget child1 = Container(
      width: 100,
      height: 100,
      color: Colors.green,
    );
    Widget child2 = Container(
      width: 100,
      height: 100,
      color: Colors.blue,
    );
    return Row(
      children: [
        if(newer)
          child2,
        newer ? child2 : child1,
      ],
    );
  }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-15 15:43:16  更:2021-08-15 15:44:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 11:00:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码