【问题标题】:Variable can't be used as setter because it is final (enum)变量不能用作设置器,因为它是最终的(枚举)
【发布时间】:2017-08-01 16:04:05
【问题描述】:

我正在尝试使用枚举来使用按钮(在 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' can't be used as a setter because it is final”。

theme = newTheme;

我应该如何初始化主题,或者尝试更改它以使其正常工作?

【问题讨论】:

标签: dart flutter


【解决方案1】:

问题是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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2012-03-05
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2012-01-26
    • 2014-02-24
    相关资源
    最近更新 更多