目前看起来有三个:
但是我们看到 在visbility中有两个属性 maintainSize 和 maintainState
查看源码 得知 如果想要保留空间 其实官方推荐你用Opacity即使用透明度 经测试 opacity为0时 当前控件以及子空间都隐藏 但是事件还在 空间也还在
另外我们看到 当设置maintainState为true时官方也说 推荐用Offstage
所以 具体用哪个 看具体需求吧
顺便说一句
a?widget():sizebox() 来做显示隐藏 个人觉得不很好 最好使用上边这几个
亦或者还有改变widget的size的来做的 感觉不是很好
贴一下代码
Row(
children: [
Container(
color: Colors.yellow,
child: Column(
children: [
Visibility(
visible: false,
// maintainState: true,
// maintainSize: true,//报错
// replacement: Text('隐藏了'),
child: Column(
children: [
Text('Visibility'),
TextButton(
onPressed: () {
print('Visibility');
},
child: Text('Visibility'))
],
),
),
Text('Visibility -- '),
],
),
),
Container(
color: Colors.red,
child: Column(
children: [
Opacity(
opacity: 0,
child: Column(
children: [
Text('Opacity'),
TextButton(
onPressed: () {
print('Opacity');
},
child: Text('Opacity'))
],
),
),
Text('Opacity -- '),
],
),
),
Container(
color: Colors.green,
child: Column(
children: [
Offstage(
// offstage: false,
child: Column(
children: [
Text('Offstage'),
TextButton(
onPressed: () {
print('Offstage');
},
child: Text('Offstage'))
],
),
),
Text('Offstage -- ')
],
),
)
],
)