我正在尝试构建Flutter自定义主题,并使用枚举来定义属性。我试图对通用主题属性进行分组,并在我的自定义主题(两个枚举映射)中使用它们,但是我无法使其正常工作。
enum AppCommonTheme {
AppDark,
AppLight,
}
final appCommonTheme = {
AppCommonTheme.AppDark: ThemeData(
brightness: Brightness.dark,
scaffoldBackgroundColor: const Color(0xFFEFEFEF),
),
AppCommonTheme.AppLight: ThemeData(
brightness: Brightness.light,
scaffoldBackgroundColor: const Color(0xFFEFEFEF),
),
}
enum AppTheme {
GreenLight,
GreenDark,
BlueLight,
BlueDark,
}
final appThemeData = {
AppTheme.GreenLight: ThemeData(
brightness: AppCommonTheme.AppLight[brightness],
primaryColor: Colors.green,
accentColor: Colors.green[100],
),
AppTheme.GreenDark: ThemeData(
brightness: AppCommonTheme.AppDark[brightness],
primaryColor: Colors.green,
accentColor: Colors.green[50],
),
};
在上面的代码中,我试图从brighness
中的AppTheme.GreenLight
派生brightness
中的AppCommonTheme.AppLight
。上面的代码brightness: AppCommonTheme.AppLight[brightness]
或我尝试过的所有版本均无效。
这可能吗?还是有更好的方法进行这种继承?
我觉得我可以使用extension methods
,但是不知道如何使用枚举。我看到的所有示例都处理没有复杂映射的简单枚举方案,因此我在这里有些迷惑。
预先感谢您的帮助。
答案 0 :(得分:0)
它是“ appCommonTheme [AppCommonTheme.AppLight] .brightness”,因为AppCommonTheme.AppLight只是appCommonTheme映射中的一个键,而不是ThemeData对象本身。
对于“更好的方法”,您可以尝试从基本主题中使用.copyWith():
import 'package:flutter/material.dart';
final baseThemeDark = ThemeData(
brightness: Brightness.dark,
scaffoldBackgroundColor: const Color(0xFFEFEFEF),
);
final baseThemeLight = ThemeData(
brightness: Brightness.light,
scaffoldBackgroundColor: const Color(0xFFEFEFEF),
);
final greenThemeDark = baseThemeDark.copyWith(
primaryColor: Colors.green,
accentColor: Colors.green[100],
);
// etc