在Android中,每个单独的View子类都有一个setVisibility()方法,允许你修改View对象的可见性
有3个设置可见性的选项:
可见:在布局中显示视图
不可见:隐藏视图,但留下一个空白,相当于视图在可见时所占据的空白
消失:隐藏视图,并将其完全从布局中移除。就好像它的高和宽都是0dp
对于Flutter中的小部件,是否有与上述相同的东西?
快速参考:
https://developer.android.com/reference/android/view/View.html#attr_android:visibility
更新:因为这个答案是写的,可见性被引入,并提供了这个问题的最佳解决方案。
你可以在不透明度:为0.0的情况下使用不透明度来绘制隐藏的元素,但仍然占用空间。
为了使它不占用空间,将其替换为空Container()。
编辑:
要将它包装在不透明对象中,请执行以下操作:
new Opacity(opacity: 0.0, child: new Padding(
padding: const EdgeInsets.only(
left: 16.0,
),
child: new Icon(pencil, color: CupertinoColors.activeBlue),
))
谷歌开发者不透明度快速教程:https://youtu.be/9hltevOHQBw
你可以在你的代码中用一个叫做(Visibility)的新小部件封装任何小部件,这是你想让它不可见的小部件最左边的黄色灯
例如:假设你想让一行不可见:
Click in the lamp and choose (Wrap with widget)
Rename the widget to Visibility
Add the visible property and set it to false
The Child of the newly created widget (Visibility Widget) is the Widget that
you want it to be invisible
Visibility(
visible: false,
child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
SizedBox(
width: 10,
),
Text("Search",
style: TextStyle(fontSize: 20
),),
],
),
),
我希望它能在将来帮助到别人
正如@CopsOnRoad已经强调的那样,
您可以使用Visibility小部件。但是,如果你想保持它的状态,例如,如果你想建立一个viewpager,让一个按钮根据页面出现和消失,你可以这样做
void checkVisibilityButton() {
setState(() {
isVisibileNextBtn = indexPage + 1 < pages.length;
});
}
Stack(children: <Widget>[
PageView.builder(
itemCount: pages.length,
onPageChanged: (index) {
indexPage = index;
checkVisibilityButton();
},
itemBuilder: (context, index) {
return pages[index];
},
controller: controller,
),
Container(
alignment: Alignment.bottomCenter,
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Visibility(
visible: isVisibileNextBtn,
child: "your widget"
)
],
),
)
]))
更新
Flutter现在有一个可见性小部件。要实现您自己的解决方案,请从下面的代码开始。
自己做一个小部件。
显示/隐藏
class ShowWhen extends StatelessWidget {
final Widget child;
final bool condition;
ShowWhen({this.child, this.condition});
@override
Widget build(BuildContext context) {
return Opacity(opacity: this.condition ? 1.0 : 0.0, child: this.child);
}
}
显示/删除
class RenderWhen extends StatelessWidget {
final Widget child;
final bool condition;
RenderWhen({this.child, this.show});
@override
Widget build(BuildContext context) {
return this.condition ? this.child : Container();
}
}
顺便问一下,有没有人对上面的小部件有更好的名字?
更多的阅读
关于如何制作可见性小部件的文章。