是否可以在元素的属性中添加json?

时间:2020-05-28 20:08:46

标签: flutter

我有一个像这样的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来执行此操作,因为这仅适用于我的应用程序中的一个类,我不希望它覆盖其他样式。

1 个答案:

答案 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();
相关问题