2017-08-01 57 views
2

我想使用枚舉來使用按鈕(在Flutter SDK中)在主題之間切換。我有一個名爲ThemeMode的枚舉,裏面有兩個變量(「one」和「two」)。我將ThemeMode初始化爲themeMode作爲ThemeMode.one。變量不能用作setter,因爲它是最終的(枚舉)

enum ThemeMode {one,two} 
ThemeMode themeMode = ThemeMode.one; 

然後,我嘗試創建一個主題變量,該主題變量表示根據themeMode應用程序應該使用的ThemeData。

ThemeData get theme { 
    switch(themeMode) { 
    case ThemeMode.one : return new ThemeData(
     brightness: Brightness.light, 
     primarySwatch: Colors.blue, 
    ); 
    case ThemeMode.two : return new ThemeData(
     brightness: Brightness.dark, 
     primaryColor: Colors.green, 
    ); 
    } 
    return null; 
} 

然後,當我嘗試使用按鈕更改主題時,出現錯誤:「'主題'不能用作setter,因爲它是最終的」。

theme = newTheme; 

我應該如何初始化主題,或嘗試改變它,以便它的工作?

+0

您必須留下一些東西的代碼。我看到的主要問題是你只有'getter'for'theme',並且沒有setter。但在這種情況下的錯誤將是「沒有setter爲'主題'定義」。你有沒有其他的代碼可以解釋這個問題? –

+0

@HarryTerkelsen這是整個文件的要點:https://gist.github.com/g0bbl3z/233f23790c146036b076e002e35adae5 註釋的方法是發生錯誤的地方。 – ZekeZeke

+0

爲什麼要將主題設置爲函數名稱? 無論哪種方式,如果你希望孩子改變themedata 你應該看看這裏的股票應用例子 https://github.com/flutter/flutter/blob/master/examples/stocks/lib /stock_settings.dart 編輯:nvm,你應該創建一個setter函數 https://www.dartlang.org/resources/dart-tips/dart-tips-ep-10 – user1462442

回答

3

問題是沒有安裝者theme。只有你定義的吸氣劑。目前還不清楚你想要做什麼。只有在theme沒有給出明確的值時,您是否想要使用從themeMode導出theme的邏輯?

你可以添加一個setter和修改吸氣這樣的工作:

ThemeData _theme; 

ThemeData get theme { 
    if (_theme != null) return _theme; 
    switch(themeMode) { 
    case ThemeMode.one : return new ThemeData(
     brightness: Brightness.light, 
     primarySwatch: Colors.blue, 
    ); 
    case ThemeMode.two : return new ThemeData(
     brightness: Brightness.dark, 
     primaryColor: Colors.green, 
    ); 
    } 
    return null; 
} 

set theme(ThemeData newTheme) { 
    _theme = newTheme; 
} 
相關問題