繁体   English   中英

在运行时选择要包含在 dart class 构造函数中的命名参数

[英]Choosing which named parameters to include in a dart class constructor at run-time

这是一个新手问题。 我从 json 文件中读取了 flutter 应用程序的 ThemeData。 json 中可能存在也可能不存在某些属性。 例如,我收到了 primaryColor,但没有收到 primarySwatch,反之亦然。 我想知道是否有一种简单的方法来实例化 ThemeData object,具体取决于需要存在哪些命名参数(对应于 json 属性)。

我试图避免必须根据存在的值对多个 forms 构造函数进行编码。 请注意,ThemeData 属性的数量可能非常大。 这是一个涉及两个属性的示例,导致 4 个构造函数。

// When no attribute is present
    return ThemeData();
// When primaryColor is present
    return ThemeData(
      primaryColor: primaryColorFromJson,
    );

// When primarySwatch is present
    return ThemeData(
      primarySwatch: primarySwatchFromJson,
    );

// When both are present 
    return ThemeData(
      primarySwatch: primarySwatchFromJson,
      primaryColor: primaryColorFromJson,
    );

如果您只是将 null 传递给ThemeData构造函数,就可以了,以防您的 json 中没有该值。 看一下构造函数的一部分:

    primarySwatch ??= Colors.blue;
    primaryColor ??= isDark ? Colors.grey[900] : primarySwatch;

它将每个 null 参数值从构造函数设置为默认值。 将 null 传递给它或根本不设置它没有区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM