我正在尝试使用一个枚举,以便能够使用按钮(在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;
}

10-08 08:47