# Changelog All notable changes to this project will be documented in this file. ## [0.15.0] - 2026-04-08 ### Added - 🏗️ **全局 Binding 系统** - 解决 Controller 重复与生命周期问题 - 新增 `AppBinding` 统一管理全局 Service 与 Controller 依赖 - 使用 `Get.lazyPut` + `fenix: true` 确保单例与自动重建 - 在 `main.dart` 中通过 `initialBinding` 接入 - 🚫 **强制页面规范校验中间件** - 不合规页面直接拦截 - 新增 `PageStandardsMiddleware` 在路由进入前校验 `PageRegistry` - 未注册页面或校验失败自动跳转至违规页 - 新增 `StandardsViolationPage` 展示拦截原因与失败项 - 📦 **统一异常模型** - 网络层结构化错误 - 新增 `ApiException` 与 `ApiExceptionType` 枚举 - `ApiService` 所有方法统一抛出 `ApiException` - 支持超时/无网络/错误响应/取消/未知等类型 - 📏 **ScreenUtilConfig 真正初始化** - 响应式适配生效 - 实现 `ensureScreenSizeAndInit()` 根据屏幕尺寸动态调整设计稿 - 自动分档:手机(375×812)/平板(768×1024)/桌面(1440×1024) - `PageStandards` 中 `scaled` 系列方法已生效 - 🧾 **修复定时通知** - scheduleNotification 真正延迟 - 修改 `NotificationService.scheduleNotification()` 使用 `zonedSchedule` - 支持按 `delay` 参数延迟触发,不再立即显示 - 🧾 **规范 ProductModel** - 字段语义化 - 增加 `id` 与 `emoji` 字段,`imageUrl` 改为可选 - 提供工厂方法 `ProductModel.mock` 用于测试数据 - 购物车改用 `product.id` 而非 `name` 去重 ### Changed - 🔧 统一页面注册权威来源 - 移除 `AppPages` 重复定义,仅保留 `AppRoutes.registerAllPages()` - 所有页面注册与 `requiredStandards` 统一在 `AppRoutes` 管理 - 路由中间件与页面注册表保持一致 - 🔧 页面改用 `Get.find()` 替代 `Get.put()` - `HomePage`、`CartPage`、`ProfilePage` 不再重复创建 Controller - 依赖由 `AppBinding` 统一注入,全局状态一致 - 🔧 路由校验体系正式接入 - `main.dart` 中 `initialBinding` 与 `routingCallback` 已生效 - Debug 模式下自动拦截不合规页面 ## [0.14.0] - 2026-04-08 ### Fixed - 🔧 **fluttertoast 类型提升错误修复** - 修复编译错误 - 修复 `packages/fluttertoast/lib/fluttertoast.dart:279` 中的类型提升错误 - 将公共属性 `context` 赋值给局部变量 `ctx`,解决 Dart 3.2 以下版本的类型提升限制 - 修复 `packages/fluttertoast/lib/fluttertoast.dart:182-195` 中相同的问题 - 项目现在可以成功编译 ### Technical - 解决公共字段无法类型提升的问题,使用局部变量作为变通方案 - 构建成功,生成 app-debug.apk ## [0.13.0] - 2026-04-08 ### Fixed - 🔧 **核心错误修复** - 修复多个严重的代码错误 - 修复 `page_standards.dart` 中 `DeviceType.desktop` 缺失问题,添加 `desktop` 到枚举 - 修复 `SystemChrome.setSystemUiOverlayStyle` 方法名拼写错误 - 移除未使用的 `toast_service.dart` 导入 - 修复 `profile_controller.dart` 中使用 `await` 在非 Future 类型上的问题 - 修复 `common_utils.dart` 中未使用的 `timer` 变量和 BuildContext 异步使用问题 - 修复 `adaptive_page_interface.dart` 中未使用的 `primary` 变量 - 修复 `standard_dialog.dart` 中死代码问题(多余的 ?? 操作符) - 移除不必要的 `!` 强制解包操作符 ### Technical - 代码质量提升,所有严重错误已修复,项目可正常编译运行 - 保持 CHANGELOG.md 只保留最近 5 个版本号的规范 ## [0.12.0] - 2026-04-08 ### Fixed - 🔧 **繁体中文语言切换修复** - 修复繁体中文选择无效问题 - 更新 `l10n.yaml` 添加 `zh_Hant` 支持 - 修复 `app_localizations.dart` 中 `_AppLocalizationsDelegate.isSupported()` 方法,支持 `zh_Hant` 脚本 - 修复 `ThemeService.setLocale()` 方法,正确处理 `zh_Hant` locale - 验证繁体中文翻译文件 `app_zh_Hant.arb` 正确加载 - 🔧 **弹窗和 Toast 样式配置验证** - 确认样式配置正常工作 - 验证 `DialogStyle` 和 `ToastStyleType` 枚举正确定义 - 确认 `ThemeService` 中的样式配置持久化正常 - 确认 `ToastService` 和 `StandardDialog` 正确响应样式变化 - 🔧 **fluttertoast 空值检查修复** - 修复 `fluttertoast.dart` 中的空值异常 - 在 `packages/fluttertoast/lib/fluttertoast.dart:277-284` 添加 try-catch 保护 - 添加 context 空值检查,避免 `Null check operator used on a null value` 异常 ## [0.11.0] - 2026-04-08 ### Added - 📋 **页面注册系统集成** - 在 main.dart 中添加页面检测和验证 - 在应用启动时自动注册所有页面到 PageRegistry - 调试模式下显示注册状态和配置信息 - 使用 routingCallback 监听路由变化 - 路由切换时自动触发页面规范验证 - 🎯 **AppRoutes 页面注册功能** - 在 app_routes.dart 中集成 PageRegistry - 添加 registerAllPages() 静态方法 - 为每个页面定义 PageInfo 配置 - 配置每个页面的 requiredStandards 检查项 - 包含 Home、Theme、Example、Cart、Profile、Main 等页面 - 🎨 **PageStandards 增强** - 添加新增的弹窗和 Toast 样式访问 - 添加 dialogStyle 访问弹窗样式 - 添加 toastStyleType 访问 Toast 样式类型 - 在 PageStandardsMixin 中也添加对应访问方法 - 更新 PageStandards 导入 page_validator.dart ### Changed - 🔧 修改 `main.dart` 集成页面注册和验证系统 - 导入 PageRegistry 和 AppLogger - 在 debug 模式下注册所有页面 - 在 GetCupertinoApp 中添加 routingCallback - 路由变化时自动调用 PageValidator.validate() - 🔧 修改 `app_routes.dart` 集成 PageRegistry - 导入 page_validator.dart - 添加 registerAllPages() 方法 - 为所有现有页面注册 PageInfo - 配置每个页面的标准检查项 - 🔧 修改 `page_standards.dart` 新增样式访问 - 导入 page_validator.dart - 添加 dialogStyle 和 toastStyleType 属性 - 在 PageStandardsMixin 中同步添加 ## [0.10.0] - 2026-04-08 ### Added - 💬 **弹窗样式选择功能** - 支持 4 种弹窗样式 - GetX Style:使用 Get.dialog 的自定义弹窗样式 - Native Style:原生 CupertinoAlertDialog 样式 - Toast Style:类似 Toast 的彩色背景弹窗样式 - Hybrid Style:混合样式,原生弹窗 + 动态主题色 - 所有样式都支持动态主题色和字体大小 - 🚀 **Toast 样式选择功能** - 支持 3 种 Toast 样式 - GetX Snackbar:使用 Get.snackbar 的样式 - Native Toast:使用 Fluttertoast 的原生样式 - Custom Style:自定义 FToast 样式 - 所有样式都支持动态主题色和字体大小 - 🎨 **主题设置页面增强** - 在 `theme_demo_page.dart` 新增样式选择 UI - Dialog Style 选择器 - Toast Style 选择器 - 实时显示当前选中的样式名称 ### Changed - 🔧 修改 `ThemeService` 添加弹窗和 Toast 样式配置 - `DialogStyle` 枚举定义弹窗样式 - `ToastStyleType` 枚举定义 Toast 样式 - 支持持久化存储用户选择 - 添加 `setDialogStyle` 和 `setToastStyle` 方法 - 🔧 修改 `ToastService` 支持多种样式 - 根据 ThemeService 配置自动选择样式 - `_showGetxToast` 实现 GetX Snackbar 样式 - 所有样式都使用动态主题色和字体大小 - 🔧 修改 `StandardDialog` 支持多种样式 - 根据 ThemeService 配置自动选择样式 - `_showGetxDialog` 实现 GetX 自定义弹窗 - `_showToastStyleDialog` 实现 Toast 风格弹窗 - `_showHybridDialog` 实现混合样式弹窗 - 弹窗背景使用 GetX 默认,字体色使用动态主题色 ## [0.9.0] - 2026-04-08 ### Added - 🧪 **主题设置页面测试按钮** - 在 `theme_demo_page.dart` 添加测试组件 - 4 种 Toast 测试按钮(Info、Success、Warning、Error) - Standard Dialog 测试按钮 - 所有测试组件响应动态主题变化 - 初始化 ToastService ### Fixed - 🔧 修复深色模式切换时字体色和背景色未自动更新问题 - 🔧 修复 `theme_service.dart` 中 `Color` 与 `MaterialColor` 类型不匹配问题 - 🔧 修复 `adaptive_scaffold.dart` 和 `adaptive_page_interface.dart` 响应式变量访问错误 --- ## 开发进度 ### 已完成功能 - ✅ 主题服务(ThemeService) - ✅ 动画服务(AnimationService) - ✅ 国际化支持(en, zh, zh_Hant) - ✅ 权限管理服务 - ✅ 自适应布局系统 - ✅ GetX 全局状态管理 - ✅ 标准组件库 - ✅ 路由守卫系统 ### 开发中功能 - 🔄 产品列表页面 - 🔄 购物车功能 - 🔄 用户个人中心 ### 待开发功能 - 📋 订单管理 - 📋 支付集成 - 📋 消息通知 --- ## 技术栈 - **框架**: Flutter - **状态管理**: GetX - **响应式布局**: flutter_adaptive_scaffold - **动画系统**: animations - **国际化**: flutter_localizations + intl - **权限管理**: permission_handler --- ## 贡献指南 1. 遵循 iOS 风格设计规范 2. 使用主题服务统一管理颜色和字体 3. 使用动画服务统一管理动画效果 4. 新增功能需更新 CHANGELOG.md 5. 代码提交前运行 `flutter analyze` 确保无错误 6. **新建页面必须支持 GetX 状态管理**