[英]How to hide specific child inside Stack widget in flutter
如何在 Stack 小部件中隐藏特定的孩子。 我尝试了 Visibility 小部件来隐藏孩子,但这会影响整个堆栈小部件隐藏。
我的代码
Visibility(
visible: visibleControl == ScreenControls.RECORDING ? true:false,
child: Stack(
alignment: AlignmentDirectional.center,
children: <Widget>[
Visibility(
visible: false,
child: SpinKitRipple(
color: kConvertLoadingDotsColor,
size: 100,
),
),
Positioned(
bottom:6,
child:Text("Hello Mongolia"),),
],
)
更新: Visibility
有一个名为maintainSize
的参数,它将保持小部件的大小,因此也保持堆栈大小
老的:
Visibility
不会隐藏小部件,而是将其替换为一个大小为零的框。 因此,如果 `Stack 大小是从他们的孩子继承的,并且唯一赋予它大小的孩子的可见性为 false,则堆栈的大小将为 0。
有几种解决方案
使用fit: StackFit.expand
将堆栈大小扩展到父级
1.1 如果需要固定高度,在Stack上方添加一个固定高度的SizedBox
用Opacity
小部件替换Visibility
小部件,这将隐藏小部件但不会将其删除。 这里要考虑的是
对于 0.0 和 1.0 以外的不透明度值,此类相对昂贵,因为它需要将子级绘制到中间缓冲区中。
这只是一个例子! 根据您的要求修改...!
List<bool> visibilityValues = [];
@override
void initState() {
super.initState();
visibilityValues = List.generate(5, (ind) => true).toList();
//change 5 with your num of widgets
}
@override
Widget build(BuildContext context) {
return Container(
padding: EdgeInsets.all(15),
child: Stack(children: [
Positioned(
top: 1,
left: 1,
child: Visibility(
visible: visibilityValues[0],
child:
InkWell(
//similarly wrap all widgets with inkwell or any othe listener and change widget visibility value
onTap:(){
setState((){
visibilityValues[0] = false;
});
},
child: Container(width: 100, height: 100, color: Colors.greenAccent)),
),
),
Positioned(
top: 1,
right: 1,
child: Visibility(
visible: visibilityValues[1],
child:
Container(width: 100, height: 100, color: Colors.blueAccent),
),
),
Positioned(
bottom: 1,
left: 1,
child: Visibility(
visible: visibilityValues[2],
child:
Container(width: 100, height: 100, color: Colors.redAccent),
),
),
Positioned(
bottom: 1,
right: 1,
child: Visibility(
visible: visibilityValues[3],
child:
Container(width: 100, height: 100, color: Colors.yellowAccent),
),
),
Align(
alignment: Alignment.center,
child: Visibility(
visible: visibilityValues[4],
child:
Container(width: 100, height: 100, color: Colors.tealAccent),
),
)
]));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.