簡體   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