我有一个像这样的json:
Map<String, dynamic> optionsContainer() {
return {
"color": Colors.red,
"height": MediaQuery.of(context).size.height * 0.40,
"margin": EdgeInsets.all(10)
};
}
.
.
.
Container(
child:Text("mytext"),
optionsContainer(),
)
尝试将其分配给元素的属性时遇到错误,在这种情况下为container
有什么办法吗?
我收到此错误:
“位置参数过多:预期为0,但找到1。 尝试删除多余的位置参数,或为命名参数指定名称。“
我的想法是回收代码并在类中定义这些属性,以免再次重复。
注意:我不使用theme
来执行此操作,因为这仅适用于我的应用程序中的一个类,我不希望它覆盖其他样式。
答案 0 :(得分:2)
如果您知道map中所有可能的键,则可以提取值并将其作为通常的命名参数传递:
null
final options = optionsContainer();
或者,您可以为容器数据创建一个类,并使用它来代替提供编译时类型检查的map:
Container(
color: options["color"],
height: options["height"],
margin: options["margin"],
)
class ContainerData {
final Color color;
final double height;
final EdgeInsets margin;
ContainerData({
@required this.color,
@required this.height,
@required this.margin,
});
}
ContainerData getOptions() {
return ContainerData(
color: Colors.red,
height: MediaQuery.of(context).size.height * 0.40,
margin: EdgeInsets.all(10),
);
}
final options = getOptions();