单击其他元素时,可见性小部件会颤动触发
Visibility widget flutter triggers when other element clicked
如您所见,存在 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,
height: 30,
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,
height: 30,
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",
),
),
),
),
],
),
],
),
如您所见,存在 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,
height: 30,
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,
height: 30,
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",
),
),
),
),
],
),
],
),