颤振:单击该小部件内的按钮后如何将小部件更改为另一个小部件

Posted

技术标签:

【中文标题】颤振:单击该小部件内的按钮后如何将小部件更改为另一个小部件【英文标题】:flutter : how to change a widget to another widget after click a button inside that widget 【发布时间】:2020-11-15 12:34:15 【问题描述】:

我在一个容器内有这个按钮,如下所示: enter image description here

并且我想在单击该按钮后将该容器更改为同一容器中的 textfeild,如下所示:

enter image description here

所以请!任何帮助的想法!并感谢

Container(
                height: 96,
                width: MediaQuery.of(context).size.width - 24,
                decoration: BoxDecoration(
                    borderRadius: BorderRadius.circular(5),
                    color: colorPrimary,
                    border:
                        Border.all(width: 0.5, color: Colors.redAccent)),
                child: Padding(
                    padding: const EdgeInsets.all(8.0),
                    child: Row(
                      children: <Widget>[
                        Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                        Column(
                          mainAxisAlignment: MainAxisAlignment.center,
                          children: <Widget>[
                            InkWell(
                              onTap: () 
                                setState(() );
                              ,
                              child: Container(
                                  height: 62,
                                  width: 62,
                                  decoration: BoxDecoration(
                                      color: Colors.white,
                                      borderRadius:
                                          BorderRadius.circular(60),
                                      border: Border.all(
                                        width: 0.5,
                                        color: Colors.grey[300],
                                      )),
                                  child: Icon(
                                    Icons.phone,
                                    size: 30,
                                    color: Colors.purple[100],
                                  )),
                            ),
                            Text(
                              'Composer numéro',
                              style: TextStyle(fontSize: 12),
                            )
                          ],
                        ),
                      ],
                    )),
              ),

【问题讨论】:

【参考方案1】:

您可以使用bool 来决定当前显示哪个小部件。根据您要显示的小部件,使用setState 将布尔值设置为truefalse

  bool showTextField = false;

  @override
  Widget build(BuildContext context) 
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Container(
          alignment: Alignment.center,
          height: 96,
          width: MediaQuery.of(context).size.width - 24,
          decoration: BoxDecoration(
              borderRadius: BorderRadius.circular(5),
              color: Colors.white,
              border: Border.all(width: 0.5, color: Colors.redAccent)),
          child: showTextField ? phoneTextInput() : button(),
        ),
      ),
    );
  

  Widget phoneTextInput() 
    return TextField(
      textAlign: TextAlign.center,
      decoration: InputDecoration(
        hintText: "Numero",
        border: InputBorder.none,
      ),
    );
  

  Widget button() 
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Row(children: <Widget>[
        Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Column(
              mainAxisAlignment: MainAxisAlignment.center,
              children: <Widget>[
                InkWell(
                  onTap: () 
                    setState(() 
                      showTextField = true;
                    );
                  ,
                  child: Container(
                      height: 62,
                      width: 62,
                      decoration: BoxDecoration(
                          color: Colors.white,
                          borderRadius: BorderRadius.circular(60),
                          border: Border.all(
                            width: 0.5,
                            color: Colors.grey[300],
                          )),
                      child: Icon(
                        Icons.phone,
                        size: 30,
                        color: Colors.purple[100],
                      )),
                ),
                Text(
                  'Composer numéro',
                  style: TextStyle(fontSize: 12),
                )
              ],
            ),
          ],
        )
      ]),
    );
  

结果:

【讨论】:

如果这篇文章解决了你的问题,请标记为答案。 嗨@Sccode,我只想说,使用上面的代码在最新版本的flutter上显示了这个错误:Null check operator used on a null value,你能帮帮我吗?我在顶部使用了相同的公式。布尔值?小部件1:小部件2

以上是关于颤振:单击该小部件内的按钮后如何将小部件更改为另一个小部件的主要内容,如果未能解决你的问题,请参考以下文章

Wheel ListView 小部件内的颤振按钮

将小部件放在键盘顶部 - 我目前在该小部件下方获得了大量空间

Android Widget:在将小部件添加到屏幕之前显示配置活动

如何将小部件推广到具有不同选择的不同类?

颤振小部件中的可见性没有改变

安装后自动将小部件放在桌面上