diff --git a/.trae/rules/design-rules.md b/.trae/rules/design-rules.md
index 2d35491..2c92f33 100644
--- a/.trae/rules/design-rules.md
+++ b/.trae/rules/design-rules.md
@@ -131,54 +131,15 @@ src/
日志:关键操作(如点赞、API调用)添加 console.log 便于追踪,上线前可移除。
4. API 设计规范
-接口地址:/pms.php (支持 GET/POST)
-参数说明
-参数 类型 必填 说明
-lid int 否 点赞ID(存在时直接对该站点点赞/取消点赞,忽略其他参数)
-id int 否 站点ID,获取指定信息
-like flag 否 无值参数,表示对本次返回的站点执行点赞/取消点赞
-dyn string 否 朝代(英文逗号分隔,如 宋代,唐代)
-tag string 否 标签(英文逗号分隔,如 友情,柳树)
-优先级:lid > id > 随机推荐。
-返回格式
-json
-{
- "code": 0, // 0成功,非0失败
- "msg": "success", // 提示信息
- "data": { ... } // 站点完整信息(含浏览次数、点赞数等)
-}
-重要:只要成功返回 data,该站点的日、月、总浏览次数自动 +1。
-
-注意事项
-朝代对应数据库字段 alias,标签对应 keywords。
-
-点赞/取消点赞基于 IP 限制,同一 IP 可切换状态。
-
-频率限制:每个 IP 每秒最多 2 次,超出返回 429。
5. 功能开发与测试(以点赞为例)
点赞逻辑核心要点
状态计算:使用新状态变量,避免旧状态干扰。
-javascript
-const newLikedState = !this.data.isLiked;
-// 先计算新状态,再更新UI和存储
-存储结构:本地存储 likedPoetry 为数组,包含诗词完整信息及 savedTime。
-状态同步:页面加载时检查当前诗词是否已收藏(checkIfLiked)。
-测试步骤
-首页加载 → 点击点赞 → 按钮变为“取消点赞”,诗词存入收藏。
-
-进入收藏页 → 能看到刚点赞的诗词。
-
-返回首页 → 点赞状态保持为“取消点赞”。
-
-点击取消点赞 → 按钮变回“点赞”,收藏页中该诗词消失。
-
-重复上述步骤,确保状态切换正确,无重复提示。
6. AI协作规范
当使用AI辅助开发时,遵循以下指令模板可大幅提升产出质量:
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 0000000..637509e
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,21 @@
+优先使用ios风格的组件,若Cupertino 无对应组件 再使用material
+每个文件头部需要增加标准注释,时间名称作用上次更新内容,部分类和方法也需要注释
+
+软件要求风格统一,如颜色圆角按钮显示,每次修改页面需按照已经规定的值进行
+若修改的文件,在赋值文件中无值,需增加一个
+软件中可根据情况 添加调式按钮/布局 方便开发者测试数据
+
+关于 CHANGELOG.md
+每次对代码修改,功能的增删必须写日志记录和功能变更,变化大的需修改版本号,
+CHANGELOG.md 里面必须包含说明文档,不可删除CHANGELOG.md
+ CHANGELOG.md的内容需确保更换其他ai coder后也能看懂当前项目,
+CHANGELOG.md仅保留5个版本号信息,去除较早的版本号,
+已去除的版本号写入软件特性功能,已开发完成或开发中在开发进度中,
+若多次提到的功能需提升优先级,优先级值1-5。
+
+Flutter项目 优先 处理状态 组件和布局要求响应式
+要求符合ios 风格ui ,使用主题色 主题背景 主题字体 主题样式
+
+你现在是苹果前端工程师,这个项目经过多人之手,不同的人设计略有差异,
+请设计风格跟苹果集团一体的页面,如果风格不一致我就换其他 ai 了
+软件风格需要图文并茂,尽量使用icon,若无icon则使用通用的emoji代替
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index b0f69ff..6e90ef6 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -42,4 +42,9 @@
+
+
+
+
+
diff --git a/lib/main.dart b/lib/main.dart
index 51e2e0c..fade0e9 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -8,10 +8,10 @@ import 'package:mom_kitchen/src/l10n/app_localizations.dart';
// 文件: lib/src/routes/app_routes.dart
import 'package:mom_kitchen/src/routes/app_routes.dart';
-import 'package:mom_kitchen/src/services/app_service.dart';
-import 'package:mom_kitchen/src/services/orientation_service.dart';
-import 'package:mom_kitchen/src/services/theme_service.dart';
-import 'package:mom_kitchen/src/services/toast_service.dart';
+import 'package:mom_kitchen/src/services/core/app_service.dart';
+import 'package:mom_kitchen/src/services/device/orientation_service.dart';
+import 'package:mom_kitchen/src/services/ui/theme_service.dart';
+import 'package:mom_kitchen/src/services/ui/toast_service.dart';
// 📋 页面注册表和验证器 - 管理页面注册和规范验证
// 文件: lib/src/standards/page_validator.dart
diff --git a/lib/src/bindings/app_binding.dart b/lib/src/bindings/app_binding.dart
index 56bc1e4..bff101b 100644
--- a/lib/src/bindings/app_binding.dart
+++ b/lib/src/bindings/app_binding.dart
@@ -3,7 +3,9 @@ import 'package:mom_kitchen/src/controllers/cart_controller.dart';
import 'package:mom_kitchen/src/controllers/home_controller.dart';
import 'package:mom_kitchen/src/controllers/profile_controller.dart';
import 'package:mom_kitchen/src/controllers/personalization_controller.dart';
-import 'package:mom_kitchen/src/services/app_service.dart';
+import 'package:mom_kitchen/src/controllers/main_navigation_controller.dart';
+import 'package:mom_kitchen/src/services/core/app_service.dart';
+import 'package:mom_kitchen/src/services/ui/theme_service.dart';
class AppBinding extends Bindings {
@override
@@ -11,7 +13,6 @@ class AppBinding extends Bindings {
// 全局服务(已在 AppService 中单例化,这里用 Get.lazyPut 延迟注入)
Get.lazyPut(() => AppService.instance.api, fenix: true);
Get.lazyPut(() => AppService.instance.storage, fenix: true);
- Get.lazyPut(() => AppService.instance.theme, fenix: true);
Get.lazyPut(() => AppService.instance.permission, fenix: true);
Get.lazyPut(() => AppService.instance.logger, fenix: true);
Get.lazyPut(() => AppService.instance.animation, fenix: true);
@@ -19,10 +20,14 @@ class AppBinding extends Bindings {
Get.lazyPut(() => AppService.instance.appInfo, fenix: true);
Get.lazyPut(() => AppService.instance.toast, fenix: true);
+ // 全局主题服务和个性化控制器(确保全局动态主题生效)
+ Get.put(ThemeService.instance, permanent: true);
+ Get.put(PersonalizationController(), permanent: true);
+
// 全局 Controller(全局单例)
- Get.lazyPut(() => CartController(), fenix: true);
- Get.lazyPut(() => HomeController(), fenix: true);
- Get.lazyPut(() => ProfileController(), fenix: true);
- Get.lazyPut(() => PersonalizationController(), fenix: true);
+ Get.put(CartController(), permanent: true);
+ Get.put(HomeController(), permanent: true);
+ Get.put(ProfileController(), permanent: true);
+ Get.put(MainNavigationController(), permanent: true);
}
}
diff --git a/lib/src/config/app_config.dart b/lib/src/config/app_config.dart
index 1c2278d..e677655 100644
--- a/lib/src/config/app_config.dart
+++ b/lib/src/config/app_config.dart
@@ -1,4 +1,4 @@
-import 'package:mom_kitchen/src/services/app_info_service.dart';
+import 'package:mom_kitchen/src/services/core/app_info_service.dart';
class AppConfig {
// 应用名称
diff --git a/lib/src/controllers/base/base_controller.dart b/lib/src/controllers/base/base_controller.dart
index 8c226a6..51e843b 100644
--- a/lib/src/controllers/base/base_controller.dart
+++ b/lib/src/controllers/base/base_controller.dart
@@ -1,5 +1,5 @@
import 'package:get/get.dart';
-import 'package:mom_kitchen/src/services/logger_service.dart';
+import 'package:mom_kitchen/src/services/log/logger_service.dart';
abstract class BaseController extends GetxController {
final RxBool isLoading = false.obs;
diff --git a/lib/src/controllers/main_navigation_controller.dart b/lib/src/controllers/main_navigation_controller.dart
new file mode 100644
index 0000000..5e88631
--- /dev/null
+++ b/lib/src/controllers/main_navigation_controller.dart
@@ -0,0 +1,15 @@
+/*
+ * 文件: main_navigation_controller.dart
+ * 说明: 主导航控制器,管理底部 tab 索引
+ * 更新时间: 2026-04-08
+ */
+
+import 'package:get/get.dart';
+
+class MainNavigationController extends GetxController {
+ final currentIndex = 0.obs;
+
+ void switchPage(int index) {
+ currentIndex.value = index;
+ }
+}
diff --git a/lib/src/controllers/personalization_controller.dart b/lib/src/controllers/personalization_controller.dart
index 00f4542..13e9d23 100644
--- a/lib/src/controllers/personalization_controller.dart
+++ b/lib/src/controllers/personalization_controller.dart
@@ -1,9 +1,9 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:mom_kitchen/src/controllers/base/base_controller.dart';
-import 'package:mom_kitchen/src/services/app_service.dart';
-import 'package:mom_kitchen/src/services/theme_service.dart';
-import 'package:mom_kitchen/src/services/animation_service.dart';
+import 'package:mom_kitchen/src/services/core/app_service.dart';
+import 'package:mom_kitchen/src/services/ui/theme_service.dart';
+import 'package:mom_kitchen/src/services/ui/animation_service.dart';
class PersonalizationController extends BaseController {
late ThemeService _themeService;
diff --git a/lib/src/controllers/profile_controller.dart b/lib/src/controllers/profile_controller.dart
index f3b8da8..434711e 100644
--- a/lib/src/controllers/profile_controller.dart
+++ b/lib/src/controllers/profile_controller.dart
@@ -1,6 +1,6 @@
import 'package:get/get.dart';
import 'package:mom_kitchen/src/controllers/base/base_controller.dart';
-import 'package:mom_kitchen/src/services/app_service.dart';
+import 'package:mom_kitchen/src/services/core/app_service.dart';
class UserModel {
final String id;
diff --git a/lib/src/pages/cart_page.dart b/lib/src/pages/cart/cart_page.dart
similarity index 98%
rename from lib/src/pages/cart_page.dart
rename to lib/src/pages/cart/cart_page.dart
index ddd4e25..fde3867 100644
--- a/lib/src/pages/cart_page.dart
+++ b/lib/src/pages/cart/cart_page.dart
@@ -1,7 +1,7 @@
import 'package:flutter/cupertino.dart';
import 'package:get/get.dart';
import 'package:mom_kitchen/src/controllers/cart_controller.dart';
-import 'package:mom_kitchen/src/services/theme_service.dart';
+import 'package:mom_kitchen/src/services/ui/theme_service.dart';
class CartPage extends StatelessWidget {
const CartPage({super.key});
diff --git a/lib/src/pages/chat_module/chat_page.dart b/lib/src/pages/chat_module/chat_page.dart
new file mode 100644
index 0000000..bca08fc
--- /dev/null
+++ b/lib/src/pages/chat_module/chat_page.dart
@@ -0,0 +1,74 @@
+import 'package:flutter/cupertino.dart';
+import 'package:get/get.dart';
+import 'package:mom_kitchen/src/services/core/app_service.dart';
+import 'package:mom_kitchen/src/services/ui/theme_service.dart';
+import 'package:mom_kitchen/src/widgets/chat_bubble.dart';
+
+class ChatPage extends StatefulWidget {
+ const ChatPage({super.key});
+
+ @override
+ State createState() => _ChatPageState();
+}
+
+class _ChatPageState extends State {
+ final ThemeService _theme = AppService.instance.theme;
+ final TextEditingController _ctrl = TextEditingController();
+ final List