Flutter隐藏组件

4,292 阅读1分钟

Flutter隐藏组件

在flutter里隐藏控件可以通过多种方式实现。VisibilityOffstage的区别就是保不保留空间,比如你控件设置了宽高,使用Visibility隐藏,但还会留有一块空白在那里。另外很多人常用的也有 if else 判断。

Offstage

Offstage({ 
  Key key, 
  this.offstage = true, // 子组件是否可见,默认true(隐藏)
  Widget child 
})

Visibility

Visibility({
  Key key,
  @required this.child,
  this.replacement = const SizedBox.shrink(),//不可见时显示的组件(当maintainState=false)
  this.visible = true,//子组件是否可见,默认true(可见)
  this.maintainState = false,//不可见时是否维持状态,默认为false
  this.maintainAnimation = false,//不可见时,是否维持子组件中的动画,默认false
  this.maintainSize = false,//不可见时是否留有空间,默认false,
  this.maintainSemantics = false,//不可见时是否维持它的语义,默认false
  this.maintainInteractivity = false,//不可见时是否具有交互性,默认false
})

Offstage 与 Visibility 比较:

Offstage是控制组件隐藏/可见的组件,如果感觉有些单调功能不全,我们可以使用Visibility,Visibility也是控制子组件隐藏/可见的组件。不同是的Visibility有隐藏状态是否留有空间、隐藏状态下是否可调用等功能。

Visibility 若想要在隐藏状态下还保留空间,需要同时设置 maintainAnimation、maintainSize 为 true。

if else

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()
        ],
      ),
    );
  }
}