# HomeAssistant **Repository Path**: tomorrowgit/home-assistant ## Basic Information - **Project Name**: HomeAssistant - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-06-16 - **Last Updated**: 2025-06-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🏠 Home Assistant Flutter App
![Flutter](https://img.shields.io/badge/Flutter-3.32.4-blue.svg) ![Dart](https://img.shields.io/badge/Dart-3.8.1-blue.svg) ![Platform](https://img.shields.io/badge/Platform-iOS%20%7C%20Android%20%7C%20macOS%20%7C%20Web-lightgrey.svg) ![License](https://img.shields.io/badge/License-MIT-green.svg) ![Build Status](https://img.shields.io/badge/Build-Passing-brightgreen.svg) **现代化智能家居管理平台 + 完整UI配置系统** 一个基于Flutter构建的跨平台智能家居管理应用,提供直观、美观的用户界面和完整的设备控制功能。 **特色功能:用户可在APP内直接自定义所有UI参数!** [功能特性](#-功能特性) • [快速开始](#-快速开始) • [UI配置系统](#-ui配置系统) • [项目结构](#-项目结构) • [开发指南](#-开发指南)
--- ## 📱 应用预览
🏠 仪表板 🔌 设备管理 🎭 场景控制 🎨 UI设置
• 系统状态概览
• 设备统计信息
• 快速操作按钮
• 智能设备列表
• 实时状态显示
• 设备控制开关
• 预设场景管理
• 一键执行功能
• 场景状态指示
• 实时UI配置
• 60+可调参数
• 预设主题切换
## ✨ 功能特性 ### 🎯 核心功能 - **🏠 智能仪表板** - 系统状态一目了然,快速操作触手可及 - **🔌 设备管理** - 支持多种智能设备的统一管理和控制 - **🎭 场景控制** - 自定义场景模式,一键切换生活状态 - **🤖 自动化规则** - 基于条件的智能自动化,让家居更智能 - **🎨 UI配置系统** - **用户可在APP内直接自定义所有UI参数** ### 🎨 UI配置系统亮点 ⭐ - **🎯 实时配置** - 在设置页面直接修改UI参数,立即生效 - **💾 自动保存** - 所有配置更改自动保存到本地存储 - **🎨 60+配置项** - 颜色、尺寸、间距、字体、动画等全面可配置 - **🌈 预设主题** - 6种预设主题(蓝色、绿色、紫色、橙色、红色、深色) - **📱 响应式设计** - 完美适配手机、平板、桌面等多种设备 - **🔄 导入导出** - 支持配置文件的导入导出和分享 ### 🚀 技术亮点 - **跨平台支持** - 一套代码,支持iOS、Android、macOS、Web - **高性能架构** - 优化的代码结构,快速响应用户操作 - **模块化设计** - 清晰的代码组织,便于维护和扩展 - **状态管理** - 使用Riverpod进行高效的状态管理 - **类型安全** - 完整的类型检查,减少运行时错误 ## 🛠 技术栈 ### 核心框架 - **Flutter** `3.32.4` - Google跨平台UI框架 - **Dart** `3.8.1` - 现代化编程语言 ### 状态管理与存储 - **Flutter Riverpod** `2.4.9` - 现代化状态管理解决方案 - **SharedPreferences** `2.2.2` - 本地配置存储 - **Hive** `2.2.3` - 高性能本地数据库 ### 网络与数据 - **Dio** `5.3.2` - 强大的HTTP客户端 - **JSON Annotation** `4.8.1` - JSON序列化支持 - **Build Runner** `2.4.7` - 代码生成工具 ### 开发工具 - **Flutter Lints** `3.0.0` - 代码质量检查工具 - **Flutter Test** - 内置测试框架 ## 🏗️ 架构设计 ### Clean Architecture分层 ``` ┌─────────────────────────────────────┐ │ Presentation Layer │ ← UI层:Pages, Widgets, Providers ├─────────────────────────────────────┤ │ Domain Layer │ ← 领域层:Entities, Use Cases, Repositories ├─────────────────────────────────────┤ │ Data Layer │ ← 数据层:Models, Data Sources, Repository Impl ├─────────────────────────────────────┤ │ Infrastructure Layer │ ← 基础设施层:Network, Storage, Error Handling └─────────────────────────────────────┘ ``` ### 核心特性 - **🎯 依赖注入**: 基于Riverpod的完整DI体系 - **🔄 状态管理**: 响应式状态管理和数据流 - **🌐 网络层**: 统一的API客户端和错误处理 - **💾 存储层**: 多层缓存策略和本地存储 - **📝 日志系统**: 分级日志和性能监控 - **🛡️ 错误处理**: 统一异常处理和用户友好提示 ## 📋 重构说明 ### 重构目标 本项目已完成全面重构,采用现代化的Flutter架构模式,实现了: - ✅ **可维护性提升**: 清晰的分层和模块化设计 - ✅ **可测试性增强**: 完整的依赖注入和测试架构 - ✅ **可扩展性优化**: Feature-first的目录结构 - ✅ **性能优化**: 合理的状态管理和缓存策略 - ✅ **代码质量**: 统一的编码规范和最佳实践 ### 重构成果 #### 🏗️ 架构升级 - 从简单分层架构升级为**Clean Architecture** - 采用**Feature-First**目录组织 - 实现完整的**依赖注入体系** #### 🌐 网络层重构 - 统一的**Dio客户端封装** - 完善的**API拦截器**和**重试机制** - 标准化的**响应数据封装** #### 🛡️ 错误处理 - 统一的**异常定义和处理** - 用户友好的**错误提示** - 完整的**日志记录系统** #### 💾 存储优化 - 多层**缓存策略** - 统一的**存储服务接口** - 智能的**数据同步机制** ## 🚀 快速开始 ### 环境要求 ```bash Flutter SDK: >=3.10.0 Dart SDK: >=3.0.0 ``` ### 安装步骤 1. **克隆项目** ```bash git clone https://github.com/your-username/home-assistant-flutter.git cd home-assistant-flutter ``` 2. **安装依赖** ```bash flutter pub get ``` 3. **运行应用** ```bash # 标准版本 flutter run # UI配置版本 (推荐体验) flutter run lib/main_ui_settings.dart ``` ### 🎨 体验UI配置系统 运行UI配置版本后: 1. 点击底部导航的 **"UI设置"** 标签 2. 尝试不同的 **预设主题** 3. 在 **颜色** 标签页调整应用配色 4. 在 **尺寸** 标签页调整组件大小 5. 在 **间距** 标签页调整布局间距 6. 实时查看界面变化! ## 🎨 UI配置系统 ### 📋 配置分类
🎨 主题配置 🌈 颜色配置 📏 尺寸配置
• 主题模式切换
• Material 3开关
• 全局圆角阴影
• 预设主题选择
• 主色调配置
• 状态颜色设置
• 设备状态色
• 导航栏颜色
• 图标尺寸调整
• 按钮大小设置
• 卡片样式配置
• 输入框尺寸
📐 间距配置 🔤 字体配置 🎬 动画配置
• 基础间距调整
• 页面边距设置
• 组件间距配置
• 列表项间距
• 字体大小调整
• 字体权重设置
• 行高配置
• 字母间距
• 动画时长调整
• 动画开关控制
• 页面切换效果
• 交互动画
### 🎯 预设主题 | 主题名称 | 主色调 | 适用场景 | |---------|--------|----------| | 🔵 蓝色主题 | `#2196F3` | 经典商务风格 | | 🟢 绿色主题 | `#4CAF50` | 自然清新风格 | | 🟣 紫色主题 | `#9C27B0` | 优雅神秘风格 | | 🟠 橙色主题 | `#FF9800` | 活力温暖风格 | | 🔴 红色主题 | `#F44336` | 热情动感风格 | | ⚫ 深色主题 | `#BB86FC` | 护眼夜间模式 | ### 🔧 配置使用示例 ```dart // 获取配置 final config = ref.watch(uiConfigProvider); // 使用配置化样式 Container( padding: EdgeInsets.all(config.spacing.md), decoration: BoxDecoration( color: config.colors.primaryColor.toColor(), borderRadius: BorderRadius.circular(config.sizes.cardRadius), ), child: Text( '配置化组件', style: TextStyle(fontSize: config.fonts.title), ), ) // 修改配置 ref.read(uiConfigProvider.notifier).updateSingleColor( 'primaryColor', '#4F46E5' ); ``` ## 📁 项目结构 ### 🏗️ 重构后的Clean Architecture架构 本项目采用**Clean Architecture + Riverpod + Feature-First**架构模式,实现了企业级的代码组织和最佳实践: ``` lib/ ├── app/ # 应用级配置 │ ├── config/ │ │ └── app_config.dart # 统一应用配置管理 │ └── di/ │ └── app_providers.dart # 应用级依赖注入 ├── core/ # 核心基础设施 │ ├── error/ # 统一错误处理 │ │ ├── app_exception.dart # 应用异常定义 │ │ └── error_handler.dart # 错误处理器 │ ├── network/ # 网络层封装 │ │ ├── api_interceptor.dart # API拦截器 │ │ ├── api_result.dart # 统一响应封装 │ │ └── dio_client.dart # Dio客户端封装 │ ├── storage/ │ │ └── storage_service.dart # 统一存储服务 │ └── utils/ │ └── logger.dart # 统一日志管理 ├── features/ # 功能模块 (Feature-First) │ └── device/ # 设备管理功能 │ ├── data/ # 数据层 │ │ ├── datasources/ # 数据源 │ │ ├── models/ # 数据模型 │ │ └── repositories/ # 仓库实现 │ ├── domain/ # 领域层 │ │ ├── entities/ # 业务实体 │ │ ├── repositories/ # 仓库接口 │ │ └── usecases/ # 用例 │ └── presentation/ # 表示层 │ ├── pages/ # 页面 │ └── providers/ # 状态管理 │ │ └── app_config.dart # 应用配置 │ ├── extensions/ # 扩展方法 │ │ └── color_extensions.dart # 颜色扩展 (十六进制转换) │ └── utils/ # 工具类 ├── providers/ # 状态管理 │ ├── ui_config_provider.dart # UI配置状态管理 ⭐ │ └── theme_provider.dart # 主题管理 ├── presentation/ # 表现层 │ ├── pages/ # 页面组件 │ │ ├── devices/ # 设备管理页面 │ │ │ ├── configurable_devices_page.dart # 配置化设备页面 │ │ │ └── device_detail_page.dart │ │ ├── scenes/ # 场景控制页面 │ │ ├── settings/ # 设置页面 │ │ │ └── ui_settings_page.dart # UI设置页面 ⭐ │ │ └── automation/ # 自动化页面 │ └── widgets/ # 组件库 │ ├── configurable_device_card.dart # 配置化设备卡片 │ ├── color_picker_widget.dart # 颜色选择器 ⭐ │ ├── slider_setting_widget.dart # 滑块设置组件 ⭐ │ ├── dropdown_setting_widget.dart # 下拉选择组件 ⭐ │ └── switch_setting_widget.dart # 开关设置组件 ⭐ ├── shared/ # 共享资源 │ └── themes/ # 主题配置 │ ├── app_theme.dart # 应用主题 │ └── configurable_theme.dart # 配置化主题 ⭐ ├── main.dart # 标准应用入口 ├── main_ui_settings.dart # UI配置应用入口 ⭐ ├── main_configurable.dart # 配置化组件入口 └── assets/config/ # 配置文件 └── ui_config.json # JSON配置文件 ``` **⭐ 标记的文件是UI配置系统的核心文件** ## 🎨 UI配置系统详细说明 ### 🔧 配置管理架构 ```dart // 1. 详细配置类 (60+配置项) class DetailedUIConfig { ThemeConfig theme; // 主题配置 DetailedColorConfig colors; // 颜色配置 (20+颜色) DetailedSizeConfig sizes; // 尺寸配置 (15+尺寸) DetailedSpacingConfig spacing; // 间距配置 (12+间距) DetailedFontConfig fonts; // 字体配置 DetailedAnimationConfig animations; // 动画配置 LayoutConfig layout; // 布局配置 } // 2. 状态管理 (Riverpod) final uiConfigProvider = StateNotifierProvider(); // 3. 自动保存 (SharedPreferences) class UIConfigNotifier extends StateNotifier { // 自动保存到本地存储 Future _saveConfig() async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('ui_config', json.encode(state.toJson())); } } ``` ### 🎨 UI设置页面功能 #### 主题标签页 - **预设主题选择器** - 6种主题一键切换 - **主题模式** - 浅色/深色/跟随系统 - **Material 3开关** - 启用最新设计规范 - **全局样式** - 圆角大小、阴影深度 #### 颜色标签页 - **主要颜色** - 主色调、次要色配置 - **状态颜色** - 成功、警告、错误、信息色 - **设备颜色** - 设备开启、关闭、不可用状态色 - **颜色选择器** - 20种预设色 + 自定义十六进制输入 #### 尺寸标签页 - **图标尺寸** - 小(16px)、中(24px)、大(32px)图标 - **按钮尺寸** - 高度(32-64px)、圆角(0-32px) - **卡片尺寸** - 圆角、阴影效果 - **实时滑块** - 拖动滑块实时预览效果 #### 间距标签页 - **基础间距** - XS(4px) 到 XL(32px) - **页面间距** - 水平、垂直边距 - **组件间距** - 卡片、列表、按钮间距 - **精确控制** - 0-64像素范围调整 #### 字体标签页 - **字体大小** - 标题、正文、说明字体 - **字体权重** - 轻、常规、中等、粗体 - **行高间距** - 紧凑、正常、宽松 - **实时预览** - 字体变化立即可见 #### 动画标签页 - **动画开关** - 全局动画启用/禁用 - **动画速度** - 快速(150ms)到慢速(1000ms) - **页面切换** - 滑动、淡入、缩放效果 - **性能优化** - 可关闭动画提升性能 ### 🔄 配置持久化 ```dart // 自动保存配置 void updateSingleColor(String colorKey, String colorValue) { // 更新配置 final newColors = DetailedColorConfig.fromJson(state.colors.toJson()); newColors.primaryColor = colorValue; // 自动保存到本地 updateColorConfig(newColors); _saveConfig(); // 自动调用 } // 配置导入导出 String exportConfig() => json.encode(state.toJson()); void importConfig(String configString) { final configJson = json.decode(configString); state = DetailedUIConfig.fromJson(configJson); _saveConfig(); } ``` ### 🎯 实际应用示例 #### 配置化设备卡片 ```dart class ConfigurableDeviceCard extends ConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final config = ref.watch(uiConfigProvider); return Card( elevation: config.sizes.cardElevation, // 可配置阴影 shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(config.sizes.cardRadius), // 可配置圆角 ), margin: EdgeInsets.all(config.spacing.cardMargin), // 可配置边距 child: Padding( padding: EdgeInsets.all(config.spacing.cardPadding), // 可配置内边距 child: Column( children: [ Icon( Icons.lightbulb, size: config.sizes.iconLarge, // 可配置图标大小 color: config.colors.deviceOnColor.toColor(), // 可配置颜色 ), SizedBox(height: config.spacing.sm), // 可配置间距 Text( '智能灯泡', style: TextStyle(fontSize: config.fonts.subtitle), // 可配置字体 ), ], ), ), ); } } ``` #### 配置化主题生成 ```dart ThemeData buildTheme(DetailedUIConfig config, Brightness brightness) { return ThemeData( useMaterial3: config.theme.useMaterial3, colorScheme: ColorScheme.fromSeed( seedColor: config.colors.primaryColor.toColor(), brightness: brightness, ), cardTheme: CardThemeData( elevation: config.sizes.cardElevation, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(config.sizes.cardRadius), ), ), textTheme: TextTheme( titleLarge: TextStyle(fontSize: config.fonts.headline6), bodyLarge: TextStyle(fontSize: config.fonts.body1), ), ); } ``` ## 🧪 测试 ### 运行测试 ```bash # 运行所有测试 flutter test # 运行UI配置测试 flutter test test/ui_config_test.dart # 生成测试覆盖率报告 flutter test --coverage ``` ### UI配置测试示例 ```dart void main() { group('UI配置测试', () { test('默认配置应该正确初始化', () { final config = DetailedUIConfig(); expect(config.colors.primaryColor, '#2196F3'); expect(config.sizes.iconMedium, 24.0); }); test('配置更新应该正确保存', () async { final container = ProviderContainer(); final notifier = container.read(uiConfigProvider.notifier); notifier.updateSingleColor('primaryColor', '#FF0000'); final config = container.read(uiConfigProvider); expect(config.colors.primaryColor, '#FF0000'); }); test('预设主题应该正确应用', () async { final container = ProviderContainer(); final notifier = container.read(uiConfigProvider.notifier); notifier.applyPresetTheme('green'); final config = container.read(uiConfigProvider); expect(config.colors.primaryColor, '#4CAF50'); }); }); } ``` ## 🔧 开发指南 ### 添加新的配置项 1. **在配置类中添加字段** ```dart class DetailedColorConfig { String newColor = '#000000'; // 新增配置项 // 在fromJson和toJson中添加支持 DetailedColorConfig.fromJson(Map json) { newColor = json['newColor'] ?? newColor; } Map toJson() { return { 'newColor': newColor, }; } } ``` 2. **在UI设置页面添加控制组件** ```dart ColorPickerWidget( title: '新颜色', color: config.colors.newColor, onColorChanged: (color) { ref.read(uiConfigProvider.notifier).updateSingleColor( 'newColor', color.toHex(), ); }, ), ``` 3. **在Provider中添加更新逻辑** ```dart void updateSingleColor(String colorKey, String colorValue) { switch (colorKey) { case 'newColor': newColors.newColor = colorValue; break; } } ``` ### 代码规范 - **配置命名** - 使用描述性名称,保持一致性 - **性能优化** - 使用`select`监听特定配置变化 - **错误处理** - 配置更新前进行验证 - **测试覆盖** - 为新配置项添加测试用例 ## 📦 构建和部署 ### 构建不同版本 ```bash # 标准版本 flutter build apk --release # UI配置版本 flutter build apk --release --target=lib/main_ui_settings.dart ``` ### 多环境配置 ```bash # 开发环境 - 启用调试功能 flutter run --dart-define=ENVIRONMENT=development # 生产环境 - 优化性能 flutter run --dart-define=ENVIRONMENT=production lib/main_ui_settings.dart ``` ## 🎯 使用场景 ### 🏢 企业定制 - **品牌色彩** - 快速应用企业品牌色 - **界面风格** - 适配不同行业需求 - **用户体验** - 针对特定用户群体优化 ### 👥 个人用户 - **个性化** - 根据个人喜好调整界面 - **无障碍** - 调整字体大小、对比度 - **护眼模式** - 深色主题、减少动画 ### 🧪 开发测试 - **快速原型** - 无需修改代码即可调整UI - **A/B测试** - 不同配置方案对比 - **用户反馈** - 收集用户对不同样式的偏好 ## 📋 路线图 ### 🎯 近期计划 (v1.1.0) - [x] ✅ 完整UI配置系统 - [x] ✅ 实时配置预览 - [x] ✅ 配置持久化存储 - [ ] 🔄 配置云端同步 - [ ] 🔄 更多预设主题 ### 🚀 中期计划 (v1.2.0) - [ ] 📱 配置分享功能 - [ ] 🎨 高级颜色选择器 - [ ] 📐 响应式配置 - [ ] 🌍 多语言支持 - [ ] 🔔 配置变更通知 ### 🌟 长期计划 (v2.0.0) - [ ] 🤖 AI智能配色建议 - [ ] 👥 社区主题商店 - [ ] 🎯 用户行为分析 - [ ] 🔧 插件化配置系统 - [ ] 📊 配置使用统计 ## ❓ 常见问题
Q: 如何重置UI配置? A: 在UI设置页面点击右上角的重置按钮,或调用 `ref.read(uiConfigProvider.notifier).resetToDefault()`
Q: 配置会自动保存吗? A: 是的,所有配置更改都会自动保存到本地存储,重启应用后配置依然生效。
Q: 如何添加自定义颜色? A: 在颜色设置页面,点击颜色块,在弹出的颜色选择器中输入十六进制颜色值(如 #4F46E5)。
Q: 可以导出配置给其他用户吗? A: 可以,在UI设置页面的菜单中选择"导出配置",将配置文件分享给其他用户导入。
Q: 如何在代码中使用配置? A: 使用 `final config = ref.watch(uiConfigProvider)` 获取配置,然后通过 `config.colors.primaryColor.toColor()` 等方式使用。
## 🤝 贡献指南 我们欢迎所有形式的贡献! ### 贡献方式 - 🐛 **报告Bug** - 发现问题请创建Issue - 💡 **功能建议** - 有好想法请告诉我们 - 🎨 **UI改进** - 提供更好的界面设计 - 💻 **代码贡献** - 提交Pull Request - 📝 **文档完善** - 帮助改进文档 ### 特别欢迎的贡献 - 🎨 **新的预设主题** - 设计更多漂亮的主题 - 🔧 **配置组件** - 开发新的配置控制组件 - 🌍 **国际化** - 添加多语言支持 - 📱 **平台适配** - 优化不同平台的体验 ### 提交规范 使用[Conventional Commits](https://conventionalcommits.org/)规范: ``` feat(ui-config): add new color picker component fix(theme): resolve dark mode color contrast issue docs(readme): update UI configuration guide ``` ## 📄 许可证 本项目采用 [MIT License](LICENSE) 开源协议。 ## 🙏 致谢 感谢以下开源项目和贡献者: - [Flutter](https://flutter.dev/) - Google的跨平台UI框架 - [Riverpod](https://riverpod.dev/) - 现代化状态管理解决方案 - [Material Design](https://material.io/) - Google的设计系统 - [SharedPreferences](https://pub.dev/packages/shared_preferences) - 本地存储解决方案 - 所有为项目贡献代码和建议的开发者们 ## 📞 联系我们 - **项目主页**: [GitHub Repository](https://github.com/your-username/home-assistant-flutter) - **问题反馈**: [GitHub Issues](https://github.com/your-username/home-assistant-flutter/issues) - **功能建议**: [GitHub Discussions](https://github.com/your-username/home-assistant-flutter/discussions) - **邮箱联系**: homeassistant.flutter@example.com ---
**🎨 体验完整的UI配置系统:`flutter run lib/main_ui_settings.dart`** **⭐ 如果这个项目对你有帮助,请给我们一个Star!** Made with ❤️ by Home Assistant Flutter Team