【问题标题】:Flutter, dart. How to add key and value to a map颤抖,飞镖。如何向地图添加键和值
【发布时间】:2021-08-09 18:01:05
【问题描述】:

我对飞镖有点陌生。我试图添加可以传递给另一个类的值。我正在使用 onTap 函数并创建了一个空映射和一个计数器变量(以便能够传递多少个抽头)。用户应该在图像上点击屏幕,图像和 int 应该存储在地图中。似乎密钥一直被覆盖,只有增量在工作(多少次点击)。希望大家能解读一下,给点建议!

这是我的代码:

final String image;
Map<String, int> _passover = {};
final int tapsCount = 1;


              onTap: () {
                if (_passover.containsKey(image)) {
               
                  _passover.update(image, (tapsCount) => tapsCount + 1);
                } else {
                  
                  _passover.putIfAbsent(image, () => tapsCount);
                  
                }
                //Should print all keys or all values

                print(_passover.entries);
                
              },
              
            ),

这是点击不同图片时的输出。如您所见,只存储了一个密钥,而前一个密钥被覆盖了还是什么?

Performing hot reload...
Syncing files to device AOSP on IA Emulator...
Reloaded 1 of 561 libraries in 255ms.
I/flutter ( 8812): (MapEntry(images/redOnion.png: 1))
I/flutter ( 8812): (MapEntry(images/milkRed.png: 1))
I/flutter ( 8812): (MapEntry(images/milkBlue.png: 1))
I/flutter ( 8812): (MapEntry(images/milkBlue.png: 2))
I/flutter ( 8812): (MapEntry(images/milkGreen.png: 1))
I/flutter ( 8812): (MapEntry(images/milkGreen.png: 2))
I/flutter ( 8812): (MapEntry(images/milkRed.png: 1))
I/flutter ( 8812): (MapEntry(images/potatoes.png: 1))

          

【问题讨论】:

    标签: flutter dictionary dart


    【解决方案1】:

    我的猜测是您为此目的使用了无状态小部件。当您希望根据用户交互更改数据时,您应该使用有状态的小部件,否则每次都会覆盖数据。所以这个使用有状态小部件的代码将是这样的:

    onTap: () {
            if (_passover.containsKey(image)) {
                setState(() {
                    _passover.update(image, (tapsCount) => tapsCount + 1);
    
                            });
            } else {
                setState(() {
              _passover.putIfAbsent(image, () => tapsCount);
    
                        });
              
            }
            //Should print all keys or all values
    
            print(_passover.entries);
            
          },
    

    【讨论】:

    • 谢谢!我会试试这个。我可以看到,如果我将其更改为有状态,我还必须实现一个 crateState 方法。我会阅读这个。
    • 我将无状态转换为有状态并实现了setstate。我还创建了一个 onTap 中的代码方法,我在 onTap 中调用它。但不幸的是,它是相同的输出。那是我可以看到的只有一个键保存在地图中。这也有点奇怪,增加的值似乎工作但地图没有增长,并且一次输出一个值:I/flutter (11597): (MapEntry(images/redOnion.png: 3)) I/ flutter (11597): (MapEntry(images/redOnion.png: 4)) I/flutter (11597): (MapEntry(images/potatoes.png: 1))
    • 尝试打印( print(_passover); )而不是条目并查看值
    • 是一样的。 n显示的键不超过一个,但 int 正在递增。
    • 也许我应该从一开始就提到我已经从我的主代码中提取了这个小部件(它变成了一个无字的),但是如上所述我已经用 setstate 把它变成了一个有状态的。然后我调用小部件并从 main 中插入一个图像,如下所示:ImageCircle(image: 'images/milkBlue.png'), ImageCircle(image: 'images/milkRed.png'),
    【解决方案2】:

    我自己解决了这个问题,问题是我没有使用全局变量。但是,当我使用全局变量时,它可以正常工作,并且地图会按应有的方式存储所有内容,并且不会被覆盖。感谢 Benjyamin 提出修复我的代码的建议!

    【讨论】:

      猜你喜欢
      • 2022-07-27
      • 2020-05-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-31
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      相关资源
      最近更新 更多