Flutter隐藏控件Offstage/Visibility/Opacity/ifelse
- 发表于
- flutter
在flutter里隐藏控件可以通过多种方式实现。Visibility和Offstage的区别就是保不保留空间,比如你控件设置了宽高,使用Visibility隐藏,但还会留有一块空白在那里的,类似android的gone和visible一样的效果。另外很多人常用的也有if else判断。
属性 | 说明 |
Offstage | |
offstage | 子组件是否可见,默认true(隐藏) |
child | 子组件 |
Visibility | |
child | 子组件 |
replacement | 不可见时显示的组件(当maintainState = false) |
visible | 子组件是否可见,默认true(可见) |
maintainState | 不可见时是否维持状态,默认为false |
maintainAnimation | 不可见时,是否维持子组件中的动画 |
maintainSize | 不可见时是否留有空间(设置为true,会报错。如果想隐藏并保留组件空间请使用Opacity) |
maintainSemantics | 不可见时是否维持它的语义(我也没搞明白是什么) |
maintainInteractivity | 不可见时是否具有交互性 |
代码示例
Offstage
1 2 3 4 5 6 7 8 |
Offstage( offstage:false, child: Container( width: 200, height: 200, color: Colors.red, ), ), |
Visibility
1 2 3 4 5 6 7 8 9 10 |
Visibility( visible:_offstage, replacement:Text('data'), maintainState:true, child: Container( width: 200, height: 200, color: Colors.yellow, ), ), |
if else
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import 'package:flutter/material.dart'; class Test extends StatelessWidget { bool isShow=false; @override Widget build(BuildContext context) { return Container( child: Row( children: <Widget>[ Visibility(child: null,visible:false,), Offstage(offstage:false,child:null), Opacity(opacity: 1,child:null), isShow?Text("显示"):SizedBox.shrink() ], ), ); } } |
原文连接:Flutter隐藏控件Offstage/Visibility/Opacity/ifelse
所有媒体,可在保留署名、
原文连接
的情况下转载,若非则不得使用我方内容。