Flutter 是否可以基于复选框在颤振中显示/隐藏textformfields
我正在尝试使用复选框显示/隐藏颤振中的2个textformfields。我尝试了下面的代码,认为它将使用复选框的状态来显示字段。但这是行不通的 复选框本身在true和false之间切换,但布局没有变化Flutter 是否可以基于复选框在颤振中显示/隐藏textformfields,flutter,dart,flutter-layout,Flutter,Dart,Flutter Layout,我正在尝试使用复选框显示/隐藏颤振中的2个textformfields。我尝试了下面的代码,认为它将使用复选框的状态来显示字段。但这是行不通的 复选框本身在true和false之间切换,但布局没有变化 CheckboxListTile( title: Text("Do you want to update your price?"), controlAffinity: ListTileCon
CheckboxListTile(
title: Text("Do you want to update your price?"),
controlAffinity: ListTileControlAffinity.leading,
value: priceupdate_value,
onChanged: (bool priceupdateValue) {
setState(() {
priceupdate_value = priceupdateValue;
});
if(priceupdate_value == true){
Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(
labelText: 'New Price',
),
),
TextFormField(
decoration: InputDecoration(
labelText: 'Update Other Information',
),
),
],
);
}
},
),
CheckboxListTile(
标题:文本(“您想更新价格吗?”),
controlAffinity:ListTileControlAffinity.leading,
值:priceupdate\u值,
一旦更改:(布尔价格更新值){
设置状态(){
priceupdate_value=priceupdateValue;
});
if(priceupdate_value==true){
纵队(
儿童:[
TextFormField(
装饰:输入装饰(
labelText:‘新价格’,
),
),
TextFormField(
装饰:输入装饰(
labelText:“更新其他信息”,
),
),
],
);
}
},
),
用可见性小部件包装它:
Visibility(
visible: priceupdate_value,
child: TextFormField(...),
)
您必须在onPressed方法之外创建列小部件(比如用列小部件包装CheckBoxTileList小部件,然后在子项下添加CheckBoxTileList和TextInputField)
差不多
Column(
children: <Widget>[
Visibility(
visible: priceupdate_value,
child: TextFormField(
decoration: InputDecoration(
labelText: 'Update Other Information',
),
),
),
CheckBoxTileList(
title: Text("Do you want to update your price?"),
controlAffinity: ListTileControlAffinity.leading,
value: priceupdate_value,
onChanged: (bool priceupdateValue) {
setState(() {
priceupdate_value = priceupdateValue;
});
},
),
],
),
列(
儿童:[
可见度(
可见:价格更新值,
子项:TextFormField(
装饰:输入装饰(
labelText:“更新其他信息”,
),
),
),
支票箱提货员(
标题:文本(“您想更新价格吗?”),
controlAffinity:ListTileControlAffinity.leading,
值:priceupdate\u值,
一旦更改:(布尔价格更新值){
设置状态(){
priceupdate_value=priceupdateValue;
});
},
),
],
),
我做了一些小改动,没问题。
我希望它适合你
Column(
children: <Widget>[
if (priceupdate_value)
Column(
children: <Widget>[
TextFormField(
decoration: InputDecoration(
labelText: 'New Price',
),
),
TextFormField(
decoration: InputDecoration(
labelText: 'Update Other Information',
),
),
],
),
CheckboxListTile(
title: Text("Do you want to update your price?"),
controlAffinity: ListTileControlAffinity.leading,
value: priceupdate_value,
onChanged: (bool priceupdateValue) {
setState(() {
priceupdate_value = priceupdateValue;
});
},
),
],
),
列(
儿童:[
if(价格更新值)
纵队(
儿童:[
TextFormField(
装饰:输入装饰(
labelText:‘新价格’,
),
),
TextFormField(
装饰:输入装饰(
labelText:“更新其他信息”,
),
),
],
),
CheckboxListTile(
标题:文本(“您想更新价格吗?”),
controlAffinity:ListTileControlAffinity.leading,
值:priceupdate\u值,
一旦更改:(布尔价格更新值){
设置状态(){
priceupdate_value=priceupdateValue;
});
},
),
],
),
您可以将此处的代码复制粘贴到dartpad.dev并立即检查:谢谢,这很有效。我所做的唯一不同是将CheckboxListTile作为第一个孩子,因为我希望文本框位于复选框下方。非常感谢。就为了我自己的理解,为什么我不需要在
if
语句中指定true
?您不需要指定布尔值(true-false)在if语句中,因为它们不能是其他任何东西,所以该解决方案有一个缺点:S如果布尔值为false,则没有为输入字段分配空间,从而导致复选框小部件意外跳转:ONoted,谢谢您的回答。您所指的内容本质上取决于我如何在本机中使用View.INVISIBLE
或View.GONE
实现,非常感谢。你的答案和下面另一个用户的答案都很完美!我所做的唯一不同是将可见小部件移动到CheckboxList下方,直到您不受欢迎:)是的,请随意移动它们:)还可以查看我的其他评论(在接受的答案下方)为什么我建议您使用此解决方案而不是另一个解决方案:数据这允许您保留文本输入字段所分配的空间。否则,如果您在输入字段下方添加按钮,它将跳转)您可以通过添加maintainSize:true(强制您添加maintainAnimation:true、maintainState:true、)(如果您想在表单字段下方添加按钮,请使用方便)来实现此行为,并感谢您的回答。你指的是什么,基本上取决于我如何用Native实现View.INVISIBLE
或View.GONE
yep确切地说:D;D