微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更新时所有下拉菜单更新 ||颤动||

如何解决更新时所有下拉菜单更新 ||颤动||

我有一个代码,其中我使用 listview.builder 创建不同的下拉菜单项,我面临的问题是,当任何一个更新时,不同下拉菜单中的所有项目都会更新。

我在下面附上了我的代码。您对解决此问题的帮助将不胜感激。 为了更容易理解,我还附上了具体发生了什么的屏幕截图。 enter image description here

StreamBuilder<QuerySnapshot>(
                      stream: FirebaseFirestore.instance
                          .collection(
                              '${widget.destination}rates'.toLowerCase())
                          .snapshots(),builder: (context,snapshot) {
                        if (!snapshot.hasData) {
                          return Text('Loading..');
                        } else {
                          List<DropdownMenuItem> tourName = [];
                          var selectedTour =
                              List(int.parse(widget.duration) + 1);
                          for (int i = 0;
                              i < snapshot.data.docs.length;
                              i++) {
                            DocumentSnapshot snap = snapshot.data.docs[i];
                            tourName.add(
                              DropdownMenuItem(
                                child: Text(snap['name']),value: '${snap['name']}',),);
                          }
                          return DropdownButton(
                            items: tourName,onChanged: (value) {
                              setState(() {
                                selectedTour[i] = value;
                                print(selectedTour);
                              });
                            },value: selectedTour[i],isExpanded: true,hint: Text('Select Tour'),);
                        }
                      },

解决方法

您与所有磁贴共享相同的变量 selectedTour。 因此,当您更新选择时:

setState(() {
    selectedTour = value;
});

它会在所有 selectedTour 用于显示所选值的地方更新。

您可以使用新的局部变量:

                } else {
                  List<DropdownMenuItem> tourName = [];
                  var selectedTourLocal = null;
                  for (int i = 0; i < snapshot.data.docs.length; i++)  
...
                      setState(() {
                        selectedTourLocal = value;
                      });  
...
                    value: selectedTourLocal,

或者使用数组将值存储到相应的日期。

// declare your array
selectedTour = new List(widget.duration);
...
                      setState(() {
                        selectedTour[i] = value;
                      });
...
                    value: selectedTour[i],

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?