将所有地图放入一个列表

时间:2020-01-14 20:54:06

标签: arrays flutter

Flutter的问题在于,当我将数组转换为列表时,每个项目都是一个单独的列表,而我希望所有项目都在一个列表中。

放置2个项目时的示例输出: [{title: ITEM1}, {title: ITEM2}]

我想这样放: [{title: ITEM1, title: ITEM2}]

我希望你们能理解这个问题

  void _addPecas() {
    if ((_pecasController.text.isEmpty) ||
        ((_pecasController.text.trimLeft() == ("")))) {
      print("Campo Vazio");
    } else {
      setState(() {
        Map<String, dynamic> newPeca = Map();
        newPeca["title"] = _pecasController.text.trimLeft();
        _pecasController.text = "";
        _pecasList.add(newPeca);
        print(_pecasList);
      });
    }
  }

2 个答案:

答案 0 :(得分:0)

据我所知,您正在Map中请求一个List,并将值添加到该Map中,最后将其添加到List中。这是您的操作方法:

  Map<String, dynamic> newPeca = Map();
  if (_pecasController.text.isEmpty ||
      _pecasController.text.trimLeft() == ("")) { // you had too much unwanted brackets here
    print("Campo Vazio");
  } else {
    setState(() {
      newPeca["title"] = _pecasController.text.trimLeft(); // you have to have unique key if you want to keep in one Map. See the dart pad example I have provided a link below
      _pecasController.text = "";
      // _pecasList = [newPeca]; // this is also working without outside .add() but if the list is long, im not recommending this.
      print(_pecasList);
    });
  }
  // outside the iteration
  _pecasList.add(newPeca);

dartpad

中编辑简单的飞镖示例

更新:

请确保在迭代之外添加Map<String, dynamic> newPeca = Map();。这样,您不必为每个迭代都创建Map。您要添加到同一张地图,并且该地图应该在每次迭代后添加到List或只是在每次迭代中创建一个空列表分配为新列表(顺便说一句,不是高效的方式)。

第二,当您在迭代过程中将列表添加到列表时,地图每次都会添加到列表中。

最后,即使您做对了,您的地图也不会与title拥有相同的值,因为原因是您的地图条目的keytitle,并且在map和该列表应位于迭代之外。

答案 1 :(得分:0)

如果[{title: ITEM1, title: ITEM2}]是您想要实现的目标,

这里的问题是,每次函数运行时,您都在创建一个名为Map的新newPeca。 。

Map<String, dynamic> newPeca = Map();

因此,在您设置值时,您叫_pecasList.add(newPeca);,新地图将被追加到列表中,因此您得到[{title: ITEM1}, {title: ITEM2}]

假设您在_pecaList中只需要一张地图,_newPeca应该始终引用该一张地图

Map<String, dynamic> newPeca = _pecaList[0]

然后您可以添加所需的值newPeca["title"] = _pecasController.text.trimLeft();

您将遇到的另一个问题是,您希望Map中有重复的键,这是不可能的。 地图中较新的值将覆盖现有的值。 例如

    newPeca[title] = "Item 1"
    newPeca[title] = "Item 2"

newPeca[title]最终将是Item 2