【发布时间】: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;
我应该如何初始化主题,或者尝试更改它以使其正常工作?
【问题讨论】:
-
你一定是在你的代码中遗漏了一些东西。我看到的主要问题是
theme只有一个“getter”,而没有 setter。但这种情况下的错误将是“没有为'主题'定义设置器”。您是否有其他代码可以阐明这个问题? -
@HarryTerkelsen 这是整个文件的要点:gist.github.com/g0bbl3z/233f23790c146036b076e002e35adae5 注释的方法是错误发生的地方。
-
为什么要将主题设置为函数名?无论哪种方式,如果您希望孩子们更改主题数据,您应该在这里查看股票应用示例 github.com/flutter/flutter/blob/master/examples/stocks/lib/… 编辑:nvm,您应该创建一个 setter 函数 dartlang.org/resources/dart-tips/dart-tips-ep-10