flutter - 如何在Flutter中的onPressed中使图标在ListView中不可见?

标签 flutter dart

我有一个listView显示元素的水平列表。
我在每个框上都放置了一个图标。当用户选择或按下该特定图标(添加按钮)时,它应使该图标不可见,以便用户无法再次按下它。

我的问题是,对于该listView的所有元素,所有图标随后都变得不可见。

我怎样才能解决这个问题?

我发现解决方案将与某个键值或多个键有关。因此我向Visible父窗口小部件添加了一个键,但没有任何区别。

这是代码

             Container(
            margin: EdgeInsets.symmetric(vertical: 20, horizontal: 10),
            height: MediaQuery.of(context).size.height*0.4,
            width: MediaQuery.of(context).size.width,
            child: 
            ListView.builder(
              primary: false,
              shrinkWrap: true,
              scrollDirection: Axis.horizontal,
              itemCount: mylist.length,
              itemBuilder: (context, listItemIndicator)
              {

                     // Card details here


                      Positioned(bottom: 0, right: 0,
                        child: Visibility(key: UniqueKey(),
                            visible: isVisible == true ? true : false,
                            maintainSize: true,
                            maintainAnimation: true,
                            maintainState: true,
                          child: IconButton(

                              icon: Icon(Icons.add_box), iconSize: 40, 
                              onPressed: ()
                                {
                                    isVisible = false; //now all elements disappear, not just the one I pressed.

                                }

                            }
                          ),
                        ),
                      ),

卡显示为带有+图标。但是正如我提到的,当我按下+图标时,所有元素的图标都变为不可见-不仅仅是我按下的图标。

最佳答案

所有图标都消失了,因为每个项目的isVisible都相同。

您可以创建“可见性” map

Map<int, bool> visibilities = Map.fromIterable(
  mylist,
  key: (k) => mylist.indexOf(k),
  value: (_) => true,
);

然后
Visibility(
  visible: visibilities[listItemIndicator],
  maintainSize: true,
  maintainAnimation: true,
  maintainState: true,
  child: IconButton(
    icon: Icon(Icons.add_box),
    iconSize: 40,
    onPressed: () {
      visibilities[listItemIndicator] = false;
    },
  ),
)

或者您可以为该按钮创建有状态的小部件
class CustomButton extends StatefulWidget {
  @override
  _CustomButtonState createState() => _CustomButtonState();
}

class _CustomButtonState extends State<CustomButton> {
  bool visible = true;

  @override
  Widget build(BuildContext context) {
    return Visibility(
      visible: visible,
      maintainSize: true,
      maintainAnimation: true,
      maintainState: true,
      child: IconButton(
        icon: Icon(Icons.add_box),
        iconSize: 40,
        onPressed: () {
          setState(() {
            visible = false;
          });
        },
      ),
    );
  }
}

关于flutter - 如何在Flutter中的onPressed中使图标在ListView中不可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58243039/

相关文章:

flutter - 为什么列表是绑定(bind)的?

flutter - 无法更改 MaterialButton 的宽度

flutter - 我可以增加 flutter 中应用栏的高度吗?

dart - Flutter 无法编译,因为 lsq_solverno.dart 不存在

flutter - 在Dart _type错误中的模型类中解析数据?

dart - 在 flutter 中改变按钮的状态

flutter - flutter 覆盖文本字段上/下键行为

dart - Flutter:如何解决错误导入包:http/http.dart

Flutter 驱动程序 - 在屏幕外的字段中输入文本

dart - 带有容器高度的图标上的Flutter TextFormField