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);
});
}
}
答案 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);
中编辑简单的飞镖示例
更新:
请确保在迭代之外添加Map<String, dynamic> newPeca = Map();
。这样,您不必为每个迭代都创建Map。您要添加到同一张地图,并且该地图应该在每次迭代后添加到List
或只是在每次迭代中创建一个空列表分配为新列表(顺便说一句,不是高效的方式)。
第二,当您在迭代过程中将列表添加到列表时,地图每次都会添加到列表中。
最后,即使您做对了,您的地图也不会与title拥有相同的值,因为原因是您的地图条目的key
为title
,并且在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