通常情况下,显示有四种情况:

1、(visible)显示

2、(invisible)隐藏:

这种隐藏是指在屏幕中占据空间,只是没有显示。这种情况出现场景如:用带有背景色的Container Widget去包含一个不可见的Image,当从网络中加载图片后才让它显示,这是为了避免图片显示后让页面布局改变发生跳动。

3、(Offscreen)超出屏幕,同样占据空间

4、(Gone)消失:

这种是指Widget没有被rendered,不存在于wedget tree中

考虑到显示隐藏带来的代价,所以我们在控制显示隐藏最好的起始出发点是不要让widget出现在wedget tree中。

伪代码如下:

List<Widge> views = []
if(shouldBeIncluded) {
views.add(myView);
}
// use views later

当决定使用哪种方式时,应该考虑一下几个问题:

1、该widget是否只显示一次,譬如在app启动的时候,这时应该使用第四种,即Gone方式

2、是否需要让该widget一直占据空间或者当该widget隐藏是否会影响其他widget?如果是的或可以使用第二种,即invisible。

3、当该widget不可见的时候,在计算大小的时候是否依然计算该widget?是的话用第三种,及Offscreen

总结以上,示例代码如下:

import 'package:flutter/widgets/dart';
import 'package:meta/meta.dart'; enum VisibilityFlag {
visible,
invisible,
offscreen,
gone,
} class Visibility extends StatelessWidget {
final Visibility visibility;
final Widget child;
final Widget removeChild; Visibility({
@retuired this.child,
@required this.visibility,
}) : this.removeChild = Container(); @override
Widget build(BuildContext context) {
if(visibility == VisibilityFlag.visible) {
return child;
}else if(visibility == VisibilityFlag.invisible) {
return new IgnorePointer(
ignoring: true,
child: new Opacity(
opcity: 0.0,
child: child
)
);
}else if(visibility == VisibilityFlag.offscreen) {
return new Offstage(
offstage: true,
child: child
);
}else{
return removeChild;
}
}
}

以上代码的解释如下:

1、对于visible: 什么也不做

2、对于Invisible: 用IgnorePointer 和Opacity widget包裹,并将opacity的值设置为0

3、对于offscreen:用Offstage widget包裹使得widget在屏幕外显示

4、直接返回没有大小初始值container widget,可以根据需要自行更改另外的widget

最新文章

  1. 用C#缩小照片上传到各种空间
  2. win7 WindowsImageBackup 无法识别
  3. Java 线程的转换及状态
  4. 设计一个Stack,要求Push、Pop、获取最大最小值时间复杂度都为O(1)
  5. 四、BLE(中)
  6. C# LIST列表的使用
  7. 剑指Offer 合并两个排序的链表
  8. custom struts framework
  9. Vue.js学习 Item9 – 表单控件绑定
  10. Math.sqrt
  11. php empty()和isset()的区别&lt;转载&gt;
  12. linux内核源码结构
  13. 前端制作中,IE6还有必要兼容吗?
  14. sqlite 的基本使用1
  15. 关于json_encode转数组为json对象时里有数组格式数据的问题
  16. 替罪羊树&amp;&amp;非旋treap
  17. TypeScript 模块系统
  18. [No0000C7]windows 10桌面切换快捷键,win10
  19. Git clone 常见用法
  20. JS获取当前/指定URL参数

热门文章

  1. Maven项目导入Intellij IDEA
  2. java基础---java8 新特性
  3. DHCP原理于配置
  4. 【LeetCode】283.移动零
  5. 【LeetCode】94. 二叉树的中序遍历
  6. MySql存储过程的创建与使用及在thinkphp中如何调用笔记
  7. 计算机基础-Socket
  8. tomcat内置jdk(tomcat集成jdk)(windows环境)
  9. &#39;utf-8&#39; codec can&#39;t decode byte的解决办法
  10. 使用分区助手转移windows 10系统出现黑屏boot manager报错问题。