问题描述
如您所见,存在2个容器,但是在我的代码Visibility
小部件中自动关闭了第二个Container
。我想在按下其中一个Container
时仅使其中一个可见,而其他两个都不可见。
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
AnimatedContainer(
duration: Duration(milliseconds: 200),width: isTextOpen ? 180 : 45,height: 30,decoration: Boxdecoration(
borderRadius:
BorderRadius.all(Radius.circular(3)),border: isTextOpen
? Border.all(
color: Colors.deepOrangeAccent,width: 1.0,)
: null,// new line
),child: isTextOpen
? TextField()
: GestureDetector(
onTap: () {
setState(() {
isTextOpen = true;
});
},child: Text(
"User_002",),Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Visibility(
visible: false,child: AnimatedContainer(
duration: Duration(milliseconds: 200),width: kaandeneme ? 166 : 45,decoration: Boxdecoration(
borderRadius:
BorderRadius.all(Radius.circular(3)),border: Border.all(
color: Colors.deepOrangeAccent),child: kaandeneme
? TextField()
: GestureDetector(
onTap: () {
setState(() {
kaandeneme = true;
});
},child: Text(
"27",],
解决方法
首先,您需要使用Visibility
小部件包装两个容器。
whichToShow
变量最初设置为0。当此变量为0时,两个容器都是可见的,当它为1时,只有第一个容器可见,而第二个容器也是如此。
int whichToShow = 0;
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Visibility( // this is new
visible: whichToShow == 1 || whichToShow == 0,// this is new
child: AnimatedContainer(
duration: Duration(milliseconds: 200),width: isTextOpen ? 180 : 45,height: 30,decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(3)),border: isTextOpen
? Border.all(
color: Colors.deepOrangeAccent,width: 1.0,)
: null,),child: isTextOpen
? TextField()
: GestureDetector(
onTap: () {
setState(() {
isTextOpen = true;
whichToShow = 1; // this is new
});
},child: Text(
"User_002",Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,children: <Widget>[
Visibility(
visible: whichToShow == 2 || whichToShow == 0,// this is new
child: AnimatedContainer(
duration: Duration(milliseconds: 200),width: kaandeneme ? 166 : 45,decoration: BoxDecoration(
borderRadius: BorderRadius.all(Radius.circular(3)),border: Border.all(color: Colors.deepOrangeAccent),child: kaandeneme
? TextField()
: GestureDetector(
onTap: () {
setState(() {
kaandeneme = true;
whichToShow = 2; // this is new
});
},child: Text(
"27",],