flutter - 单击其他元素时触发可见性窗口小部件抖动

标签 flutter dart widget flutter-layout

如您所见,有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",
              ),
            ),
          ),
        ),
      ],
    ),
  ],
),

关于flutter - 单击其他元素时触发可见性窗口小部件抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63577583/

相关文章:

android - flutter - 原生广告不会加载和显示,它的事件回调也不会显示任何内容

flutter - 内部流监听 DART 的返回结果

dart - 如何在 Dart 中指定可增长列表的初始容量?

flutter - flutter 文本的宽度和高度与父项匹配

Android appWidgetProvider onEnabled 从未在平板电脑上调用过

Flutter SQFlite 按整数 ID 列表删除多个

flutter - Visual Studio Code 在 Flutter 中添加 'prefix0'

dart - 如何处理强模式分析的隐式转换警告?

python - 如果没有动态添加,如何正确删除 Kivy 中的小部件

android - Flutter验证器仅在双击时触发