You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter开发:Dart类初始化如何复用值避免重复颜色定义

解决方案

你完全不需要维护两份重复的浅色模式色值配置,只需要调整ThemeNotifier类内的成员声明顺序,让初始colors属性直接复用提前定义好的lightColors实例即可。
Dart 类的实例成员是按照从上到下的顺序初始化的,只要把浅色、深色的颜色实例定义挪到colors属性之前,初始化colors时直接赋值为lightColors,就不会出现初始化时找不到值的问题,也彻底消除了重复代码。
修改后的ThemeNotifier代码如下:

class ThemeNotifier with ChangeNotifier {
  var darkMode = false;

  // 先定义浅色模式颜色(作为默认初始值)
  final lightColors = AppColors(
    alpha: const Color(0xFFFFFFFF),
    bravo: const Color(0xFFF5F5F6),
  );

  // 深色模式颜色
  final darkColors = AppColors(
    alpha: const Color(0xFF222630),
    bravo: const Color(0xFF171920),
  );

  // 初始化直接复用已定义的lightColors,无需重复写色值
  AppColors colors = lightColors;

  ThemeNotifier() {
    Storage.read('darkMode').then((value) {
      darkMode = value ?? false;
      colors = darkMode ? darkColors : lightColors;
      notifyListeners();
    });
  }

  void setDarkMode() async {
    colors = darkColors;
    darkMode = true;
    Storage.save('darkMode', true);
    notifyListeners();
  }

  void setLightMode() async {
    colors = lightColors;
    darkMode = false;
    Storage.save('darkMode', false);
    notifyListeners();
  }
}

优化建议

如果想让代码更易维护,你还可以把固定的浅色、深色配置抽到AppColors类里作为静态常量,后续新增颜色属性只需要修改AppColors一处即可,不需要动主题切换相关逻辑:

class AppColors {
  Color alpha;
  Color bravo;

  AppColors({
    required this.alpha,
    required this.bravo,
  });

  // 全局固定主题色配置
  static final AppColors light = AppColors(
    alpha: const Color(0xFFFFFFFF),
    bravo: const Color(0xFFF5F5F6),
  );
  static final AppColors dark = AppColors(
    alpha: const Color(0xFF222630),
    bravo: const Color(0xFF171920),
  );
}

调整后ThemeNotifier里不需要单独定义lightColors、darkColors变量,直接通过AppColors.light、AppColors.dark引用即可。

内容的提问来源于stack exchange,提问作者Clifton Labrum

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:36:22