AI 接入 V1.0

UI更新
This commit is contained in:
2026-09-24 14:24:34 +08:00
parent 34bc2e04b0
commit 9a144f159f
65 changed files with 1195 additions and 196 deletions
+3
View File
@@ -36,6 +36,9 @@
- 历史会话存后端(`chat_session` / `chat_message` 两张表),App 只发 `sessionId + content`。**工具调用的中间过程不入库**,所以 App 不用理解 tool 消息格式。
- 助手气泡用 `MarkdownBody` 渲染(回答里常有列表/代码块),用户气泡用 `SelectableText`。
- 后端未配 key 时不报错:`/api/ai/status` 返回 `enabled:false`,`/chat` 推一个 error 事件,页面顶部显示红色提示条。
- **AI 写库后必须让 App 侧的数据失效**(2026-09-24 修的真实 bug)。`AssistantNotifier.send` 里跟踪 SSE 的 `tool` 事件,命中 `_mutatingTools`(`create_bill` / `create_note`)就在对话结束后调 `invalidateBillData(ref)` 或失效那四个笔记 provider。
**为什么必须显式做**:`IndexedStack` 让首页仪表盘和「我的」页常驻,它们 watch 的 `monthlyStatisticsProvider` / `budgetProvider` / `accountProvider` **永远不会被 autoDispose 回收**,只靠「写操作后显式失效」更新。AI 是在服务端直接写库的,App 不知情 → 这三个一直是旧数。而 `billsProvider` 只被 push 出来的记账首页 watch,会被回收重取 —— 于是现象是**「账单列表对了、汇总和预算环没对」**,很有迷惑性。
回归测试在 `test/ai_refresh_test.dart`(用假 AiApi 吐 SSE 事件,断言 provider 的重建次数)。**加新的写工具时记得同步 `_mutatingTools`**,否则会静默失效。
## 设计规范(配色)
- 品牌主色:`#C8956E`(驼色/焦糖色),在 `app.dart` 中作为 `ColorScheme.fromSeed` 的 seedColor。