在Flutter Dart中的另一个枚举图中使用枚举映射的属性值

时间:2020-08-09 05:26:31

标签: flutter dart enums

我正在尝试构建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,但是不知道如何使用枚举。我看到的所有示例都处理没有复杂映射的简单枚举方案,因此我在这里有些迷惑。

预先感谢您的帮助。

1 个答案:

答案 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