主题切换应用


欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

适配的第三方库地址:

  • shared_preferences: https://pub.dev/packages/shared_preferences
  • animations: https://pub.dev/packages/animations
  • quick_actions: https://pub.dev/packages/quick_actions
  • google_fonts: https://pub.dev/packages/google_fonts

一、项目概述

运行效果图

image-20260412171404392

image-20260412171413385

image-20260412171418606

image-20260412171424588

image-20260412171428754

1.1 应用简介

主题切换应用是一款专业的界面主题管理工具,帮助用户轻松管理和切换应用的主题风格。通过丰富的预设主题和强大的自定义功能,用户可以根据个人喜好打造独特的视觉体验。应用支持亮色、暗色、跟随系统等多种主题模式,以及多种颜色主题预设,让界面焕然一新。

应用以多彩的色调为主题,象征个性与创意。涵盖主题管理、自定义主题、主题预览、已保存主题四大核心模块。用户可以快速切换预设主题、自定义主题颜色、预览主题效果、保存常用主题配置。

1.2 核心功能

功能模块 功能描述 实现方式
主题切换 快速切换不同主题 状态管理
预设主题 多种颜色主题预设 枚举定义
自定义主题 自定义主色调和亮度 颜色选择器
主题预览 实时预览主题效果 组件展示
主题保存 保存自定义主题配置 本地存储
明暗切换 快速切换明暗模式 主题模式
颜色选择 丰富的颜色调色板 颜色组件
主题编辑 编辑已保存的主题 表单编辑

1.3 预设主题定义

序号 主题名称 Emoji 图标 种子颜色 亮度
1 跟随系统 🔄 brightness_auto 蓝色 跟随系统
2 亮色主题 ☀️ light_mode 琥珀色 亮色
3 暗色主题 🌙 dark_mode 靛蓝色 暗色
4 海洋主题 🌊 water_drop 青色 亮色
5 森林主题 🌲 forest 绿色 亮色
6 日落主题 🌅 wb_sunny 橙色 亮色
7 薰衣草主题 💜 local_florist 紫色 亮色
8 玫瑰主题 🌹 favorite 粉色 亮色
9 自定义主题 🎨 palette 自定义 可选

1.4 页面模块定义

序号 页面名称 Emoji 描述 主要功能
1 主题页 🎨 主题选择与切换 预设主题、快速切换
2 自定义页 🔧 自定义主题配置 颜色选择、亮度调整
3 预览页 👁️ 主题效果预览 组件展示、样式预览
4 已保存页 💾 已保存主题管理 主题列表、编辑删除

1.5 技术栈

技术领域 技术选型 版本要求
开发框架 Flutter >= 3.0.0
编程语言 Dart >= 2.17.0
设计规范 Material Design 3 -
状态管理 StatefulWidget -
数据存储 SharedPreferences >= 2.0.0
动画效果 AnimationController -
目标平台 鸿蒙OS / Web API 21+

1.6 项目结构

lib/
└── main_theme_switcher.dart
    ├── ThemeSwitcherApp                 # 应用入口(状态管理)
    ├── AppTheme                         # 预设主题枚举
    ├── CustomTheme                      # 自定义主题模型
    ├── ThemeSwitcherHomePage            # 主页面(底部导航)
    ├── _buildThemePage                  # 主题选择页
    ├── _buildCustomizePage              # 自定义主题页
    ├── _buildPreviewPage                # 主题预览页
    ├── _buildSavedThemesPage            # 已保存主题页
    ├── _buildColorPalette               # 颜色调色板
    └── _buildThemeCard                  # 主题卡片组件

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
ThemeSwitcherHomePage

主题页

自定义页

预览页

已保存页

基础主题

预设主题

快速切换

颜色选择

亮度调整

应用主题

按钮预览

卡片预览

输入框预览

主题列表

主题操作

主题管理器
ThemeManager

颜色选择器
ColorPicker

主题存储
ThemeStorage

AppTheme
预设主题

CustomTheme
自定义主题

ThemeData
Flutter主题

2.2 类图设计

uses

manages

accesses

ThemeSwitcherApp

-AppTheme _currentTheme

-Color _customSeedColor

-Brightness _brightness

+setTheme(AppTheme theme)

+setCustomColor(Color color)

+toggleBrightness()

+Widget build()

«enumeration»

AppTheme

+String label

+IconData icon

+Color seedColor

+Brightness brightness

+system()

+light()

+dark()

+ocean()

+forest()

+sunset()

+lavender()

+rose()

+custom()

CustomTheme

+String id

+String name

+Color primaryColor

+Color secondaryColor

+Brightness brightness

+DateTime createdAt

+copyWith()

ThemeSwitcherHomePage

-int _currentIndex

-List<CustomTheme> _customThemes

-Color _selectedColor

+applyCustomTheme()

+saveCustomTheme()

+applySavedTheme()

+deleteTheme()

2.3 页面导航流程

主题

自定义

预览

已保存

应用

编辑

删除

应用启动

主题页

底部导航

自定义页

预览页

已保存页

选择预设主题

应用主题

界面更新

选择颜色

调整亮度

应用自定义主题

保存主题?

保存到列表

查看已保存主题

操作选择

应用主题

编辑主题

删除主题

2.4 主题切换流程

Flutter框架 应用状态 主页面 用户 Flutter框架 应用状态 主页面 用户 选择主题 setTheme(theme) 更新_currentTheme 触发rebuild 构建新ThemeData 应用新主题 显示新界面 自定义颜色 setCustomColor(color) 更新_customSeedColor 触发rebuild 构建自定义ThemeData 应用自定义主题 显示自定义界面

三、核心模块设计

3.1 数据模型设计

3.1.1 预设主题枚举 (AppTheme)
enum AppTheme {
  system('跟随系统', Icons.brightness_auto, Colors.blue, Brightness.light),
  light('亮色主题', Icons.light_mode, Colors.amber, Brightness.light),
  dark('暗色主题', Icons.dark_mode, Colors.indigo, Brightness.dark),
  ocean('海洋主题', Icons.water_drop, Colors.cyan, Brightness.light),
  forest('森林主题', Icons.forest, Colors.green, Brightness.light),
  sunset('日落主题', Icons.wb_sunny, Colors.orange, Brightness.light),
  lavender('薰衣草主题', Icons.local_florist, Colors.purple, Brightness.light),
  rose('玫瑰主题', Icons.favorite, Colors.pink, Brightness.light),
  custom('自定义主题', Icons.palette, Colors.blue, Brightness.light);

  final String label;
  final IconData icon;
  final Color seedColor;
  final Brightness brightness;
  const AppTheme(this.label, this.icon, this.seedColor, this.brightness);
}
3.1.2 自定义主题模型 (CustomTheme)
class CustomTheme {
  final String id;
  final String name;
  final Color primaryColor;
  final Color secondaryColor;
  final Brightness brightness;
  final DateTime createdAt;

  const CustomTheme({
    required this.id,
    required this.name,
    required this.primaryColor,
    required this.secondaryColor,
    required this.brightness,
    required this.createdAt,
  });

  CustomTheme copyWith({
    String? name,
    Color? primaryColor,
    Color? secondaryColor,
    Brightness? brightness,
  }) {
    return CustomTheme(
      id: id,
      name: name ?? this.name,
      primaryColor: primaryColor ?? this.primaryColor,
      secondaryColor: secondaryColor ?? this.secondaryColor,
      brightness: brightness ?? this.brightness,
      createdAt: createdAt,
    );
  }
}
3.1.3 主题使用分布
35% 25% 20% 8% 7% 5% 主题使用分布示例 跟随系统 亮色主题 暗色主题 海洋主题 森林主题 自定义主题

3.2 页面结构设计

3.2.1 主页面布局

ThemeSwitcherHomePage

IndexedStack

主题页

自定义页

预览页

已保存页

NavigationBar

主题 Tab

自定义 Tab

预览 Tab

已保存 Tab

3.2.2 主题页结构

主题页

SliverAppBar

基础主题区

预设主题区

快速切换区

跟随系统

亮色主题

暗色主题

主题网格

海洋主题

森林主题

日落主题

薰衣草主题

玫瑰主题

明暗模式开关

3.2.3 自定义页结构

自定义页

SliverAppBar

颜色调色板

当前选择预览

亮度选择器

应用按钮

颜色网格

20种预设颜色

颜色预览块

RGB值显示

十六进制值

亮色选项

暗色选项

3.2.4 预览页结构

预览页

SliverAppBar

按钮样式预览

卡片样式预览

输入框样式预览

列表项样式预览

填充按钮

边框按钮

文字按钮

图标按钮

普通卡片

主题色卡片

用户名输入框

密码输入框

3.3 主题切换逻辑

预设主题

自定义主题

亮色

暗色

跟随系统

开始切换主题

主题类型

获取主题配置

获取自定义颜色

提取种子颜色

使用选中颜色

构建ThemeData

亮度模式

生成亮色主题

生成暗色主题

获取系统亮度

系统亮度

应用主题

触发界面重建

完成切换

3.4 颜色选择逻辑

继续选择

确认应用

保存主题

打开颜色选择

显示调色板

用户点击颜色

更新选中状态

显示颜色预览

用户操作

获取选中颜色

创建自定义主题

更新应用状态

触发主题重建

显示新主题

弹出保存对话框

输入主题名称

保存到列表

显示保存成功


四、鸿蒙Flutter适配说明

4.1 适配要点

适配项 说明 处理方式
主题系统 Material Design 3 主题 使用colorSchemeSeed
状态管理 全局主题状态 StatefulWidget + InheritedWidget
动画效果 主题切换动画 AnimatedContainer
数据持久化 主题设置保存 SharedPreferences
系统主题 跟随系统主题 ThemeMode.system

4.2 第三方库替代方案

原库 功能 鸿蒙替代方案
shared_preferences 设置存储 鸿蒙Preferences
animations 动画效果 AnimationController
quick_actions 快捷方式 鸿蒙ShortcutManager
google_fonts 字体加载 鸿蒙FontLoader

4.3 性能优化建议

性能优化

主题缓存

动画优化

状态管理

缓存ThemeData

避免重复构建

预加载主题

使用AnimatedContainer

控制动画时长

避免过度动画

最小化重建范围

使用const组件

延迟加载


五、开发计划

5.1 开发周期

2024-01-01 2024-01-03 2024-01-05 2024-01-07 2024-01-09 2024-01-11 2024-01-13 2024-01-15 2024-01-17 项目初始化 数据模型设计 基础页面搭建 主题页开发 自定义页开发 预览页开发 已保存页开发 主题切换逻辑 颜色选择器 主题保存功能 动画效果 性能优化 测试与修复 基础框架 核心功能 交互功能 完善优化 主题切换应用开发计划

5.2 功能清单

序号 功能模块 优先级 状态
1 预设主题枚举 ✅ 已完成
2 自定义主题模型 ✅ 已完成
3 主题页布局 ✅ 已完成
4 自定义页布局 ✅ 已完成
5 预览页布局 ✅ 已完成
6 已保存页布局 ✅ 已完成
7 主题切换功能 ✅ 已完成
8 颜色选择器 ✅ 已完成
9 亮度切换 ✅ 已完成
10 主题保存 ✅ 已完成
11 主题编辑 ✅ 已完成
12 主题删除 ✅ 已完成

六、使用说明

6.1 运行方式

# 进入项目目录
cd flutter_harmonyos

# 运行应用
flutter run -d harmonyos lib/main_theme_switcher.dart

# 或指定设备运行
flutter run -d <device_id> lib/main_theme_switcher.dart

6.2 操作说明

操作 说明
切换预设主题 在主题页点击主题卡片
快速切换明暗 在主题页使用快速切换开关
自定义颜色 在自定义页点击调色板颜色
调整亮度 在自定义页选择亮色/暗色
应用自定义主题 点击"应用自定义主题"按钮
保存主题 应用主题后点击保存按钮
查看已保存 切换到已保存页查看列表
编辑主题 点击主题卡片菜单选择编辑
删除主题 点击主题卡片菜单选择删除

6.3 注意事项

  1. 本应用使用模拟数据演示功能
  2. 实际项目中需接入SharedPreferences持久化存储
  3. 自定义主题的颜色会影响整体应用色调
  4. 建议在鸿蒙设备上进行真机测试

七、总结

主题切换应用通过直观的界面设计和流畅的交互体验,为用户提供了便捷的主题管理工具。应用支持丰富的预设主题和灵活的自定义功能,满足不同用户的个性化需求。Material Design 3 的设计规范确保了界面的一致性和美观性。

通过鸿蒙Flutter的跨平台能力,该应用可以轻松适配鸿蒙OS和其他平台,为用户提供一致的使用体验。后续可以进一步扩展主题同步、社区分享、动态主题等功能,打造更加完善的主题管理解决方案。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐