Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 是否可以基于复选框在颤振中显示/隐藏textformfields_Flutter_Dart_Flutter Layout - Fatal编程技术网

Flutter 是否可以基于复选框在颤振中显示/隐藏textformfields

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

我正在尝试使用复选框显示/隐藏颤振中的2个textformfields。我尝试了下面的代码,认为它将使用复选框的状态来显示字段。但这是行不通的

复选框本身在true和false之间切换,但布局没有变化

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