我是一个自学编码的初学者,在一项自行设置的任务中失败了。任务的目的最终是找出语法。。。但我现在花了几个小时。所以…请帮忙!警告:我完全弄糊涂了。。。所以,不要指望我的尝试是美丽的。
我想在这个地图上使用迭代:
const marginsCard = [
{
'ID': 0,
'margins': [
{'marginLeft': 0},
{'marginRight': 5},
{'marginBottom': 0},
{'marginTop': 20},
],
},
{
'ID': 1,
'margins': [
{'marginLeft': 5},
{'marginRight': 0},
{'marginBottom': 0},
{'marginTop': 20,},
],
},
{
'ID': 2,
'margins': [
{'marginLeft': 5},
{'marginRight': 0},
{'marginBottom': 0},
{'marginTop': 20,},
],
},
];
目标是
- 迭代'ID'
- 将边距的值移交给构造函数方法
- 交回指定边距的卡片
- 把那些卡片放在一张单子里
在当前状态下调用构造函数的函数:
buildCardElementList(){
cardElementsList = [
...(marginsCard[int.parse('ID')] as List<Map<String,Object>>).map((cardElement){
return buildCardElement(cardElement['marginLeft'], cardElement['marginRight'], cardElement['marginBottom'], cardElement['marginTop']);
}).toList()];
return cardElementsList;
}
这里面有太多的尝试,我相信有多个问题。有人能帮我弄清楚语法吗?这样我就可以重新开始理解我在做什么了?
谢谢!
编辑//附言:我省略了接收/构建功能;这不是问题所在。
Enjoy;(
void main() {
final cards = marginsCard.map(_buildCard).toList();
print(cards);
}
Card _buildCard(Map<String, Object> cardElement) {
return Card(
marginLeft: resolveMargin(cardElement, 'marginLeft'),
marginRight: resolveMargin(cardElement, 'marginRight'),
marginBottom: resolveMargin(cardElement, 'marginBottom'),
marginTop: resolveMargin(cardElement, 'marginTop'),
);
}
num resolveMargin(Map<String, Object> cardElement, String marginName) {
final marginElements = cardElement['margins'] as List<Map<String, Object>>;
return marginElements.firstWhere((marginElement) => marginElement.containsKey(marginName))[marginName] as num;
}
class Card {
final num marginLeft, marginRight, marginBottom, marginTop;
Card({required this.marginLeft, required this.marginRight, required this.marginBottom, required this.marginTop});
@override
String toString() => "marginLeft: $marginLeft; marginRight: $marginRight; marginBottom: $marginBottom; marginTop: $marginTop";
}
const marginsCard = [
{
'ID': 0,
'margins': [
{'marginLeft': 0},
{'marginRight': 5},
{'marginBottom': 0},
{'marginTop': 20},
],
},
{
'ID': 1,
'margins': [
{'marginLeft': 5},
{'marginRight': 0},
{'marginBottom': 0},
{'marginTop': 20,},
],
},
{
'ID': 2,
'margins': [
{'marginLeft': 5},
{'marginRight': 0},
{'marginBottom': 0},
{'marginTop': 20,},
],
},
];