我正在尝试使用一个枚举,以便能够使用按钮(在Flutter SDK中)在主题之间切换。我有一个名为ThemeMode的枚举,其中有两个变量(“一个”和“两个”)。我将名为themeMode的ThemeMode初始化为ThemeMode.one。
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;
}
然后,当我尝试使用按钮更改主题时,出现错误:“'theme'不能用作 setter ,因为它是最终的”。
theme = newTheme;
我应该如何初始化主题,或尝试更改主题以使其起作用?
最佳答案
问题是theme
没有 setter 。只有您定义的 setter/getter 。目前尚不清楚您要做什么。仅在没有为theme
给出明确值的情况下,才想使用从themeMode
派生theme
的逻辑吗?
您可以添加一个setter并修改该getter以使其工作:
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;
}