变量不能用作setter,因为它是final(枚举)

时间:2017-08-01 16:04:06

标签: dart flutter

我正在尝试使用枚举来使用按钮(在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 = newTheme;

我应该如何初始化主题,或尝试更改主题以使其有效?

1 个答案:

答案 0 :(得分:3)

问题是theme没有设置器。只有你定义的吸气剂。目前还不清楚你在做什么。仅当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;
}