我正在尝试使用const Obeject用作Flutter主题。该对象必须是const,以便允许Hot Reload动态显示更改。
我尝试了静态const属性和最终实例属性的各种组合,但无法获得理想的效果。
以下内容无法编译:
import 'package:flutter/material.dart';
ThemeBase globalTheme;
abstract class ThemeBase {
final Color primaryColor;
final Color secondaryColor;
const ThemeBase();
}
class PurpleTheme extends ThemeBase {
final Color primaryColor;
final Color secondaryColor;
const PurpleTheme() :
primaryColor = Colors.deepPurpleAccent,
secondaryColor = Colors.black45;
}
class RedTheme extends ThemeBase {
final Color primaryColor;
final Color secondaryColor;
const RedTheme() :
primaryColor = Colors.redAccent,
secondaryColor = Colors.black45;
}
const Color kAppBarColor = globalTheme.primaryColor;
最终,“ globalTheme”对象将在main.dart中实例化以实现特定的构建风格,或者可以用于在亮/暗主题之间切换或允许用户选择主题-理论上,我可以将属性设置为非-final,但除了失去热Reload之外,这还会降低性能。