【问题标题】:Adding map to a list changes all maps in list to the latest map's values将地图添加到列表会将列表中的所有地图更改为最新地图的值
【发布时间】:2021-06-02 21:25:45
【问题描述】:

我正在尝试向我的应用程序添加收藏夹功能,当用户选择项目时,项目详细信息将添加到地图列表中,其中每个地图都有所选项目的详细信息。

我认为这将是一个易于实现的简单系统,但我显然做错了 - 我对飞镖也很陌生 - 抱歉,如果这是一个愚蠢的语法问题。任何帮助将不胜感激,这是我的代码:

class FavoriteServices{
  List<Map<String, dynamic>> favoritesList = [{}];
  Map<String, dynamic> favoriteMap = {};

  void addFavoriteItemNEW(
      String objectID,
      String name,
      String author,
      String publisher,
      String price,
      String condition,
      String image,
  ) {
    favoriteMap["objectID"] = objectID;
    print(favoriteMap);
    favoritesList.add(favoriteMap);
    print(favoritesList);
    }
}

最后添加的地图的值也将是之前所有地图的值。因此,对于列表的长度,这似乎是最新地图的重复。我确信这很愚蠢,但我已经为此苦苦挣扎了一段时间。

提前感谢您的帮助!

【问题讨论】:

    标签: list flutter syntax maps


    【解决方案1】:

    TLDR;

    favoriteMap 的范围更改为addFavoriteItemNEW 应该可以解决它。

    
      void addFavoriteItemNEW(
          String objectID,
          String name,
          String author,
          String publisher,
          String price,
          String condition,
          String image,
      ) {
        Map<String, dynamic> favoriteMap = {};
        favoriteMap["objectID"] = objectID;
        print(favoriteMap);
        favoritesList.add(favoriteMap);
        print(favoritesList);
        }
    }
    

    但到底发生了什么?

    Dart 为Map 使用引用调用

    看看这个。

    ain() {
      Map a = {"test": "test"};
      Map b = a;
      a["test"] = "test2";
      print(b); // Prints {"test": "test2"};
    }
    

    但是我们没有编辑b,所以发生了什么?

    无论何时您在某处使用 Map 对象,无论您在何处更改其属性(在同一范围内),它都会在任何使用它的地方得到更新。

    您的情况也发生了同样的事情: 因为您不断将favoriteMap(哪个生命周期在类中)添加到列表中,所以只要您更改其任何属性,它就会随着列表中favoriteMap 的每次出现而更改。

    【讨论】:

    • 非常感谢!下次我肯定需要考虑我的变量的范围是什么
    猜你喜欢
    • 2014-12-20
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2020-07-06
    • 2020-07-06
    相关资源
    最近更新 更多