# App 导航重构说明 > commit: `d5930ff` — feat(app): redesign navigation — floating robot FAB + 4-tab layout > 日期: 2026-03-07 --- ## 一、重构背景 原设计沿用"传统运维工具"思维(仪表盘 / 对话 / 任务 / 告警 / 设置),与产品真实定位不符。 iAgent App 的核心是一个 **AI 元智能体**——用户通过对话让 iAgent 帮助创建、部署、管理其他智能体(OpenClaw 等),而非手动填表操作服务器。 新设计围绕这个定位重构导航结构,使「对话」成为随时可呼出的浮层入口,Tab 展示的是 AI 已经为用户创建的成果。 --- ## 二、导航结构对比 | 位置 | 旧版 | 新版 | |------|------|------| | Tab 1 | 仪表盘(服务器概览) | **主页**(智能体卡片 + 引导) | | Tab 2 | 对话(核心功能) | **我的创建**(已创建的智能体) | | Tab 3 | 任务(运维任务列表) | **账单**(套餐 / 用量 / 充值) | | Tab 4 | 告警(告警事件列表) | **我**(个人资料 + 设置) | | Tab 5 | 设置 | ~~合并进"我"~~ | | 悬浮 | 无 | **机器人 FAB**(→ 对话页) | --- ## 三、新增文件说明 ### `lib/core/widgets/robot_painter.dart` 纯 Flutter `CustomPainter` 实现的机器人画师,**无需任何外部动画资源**。 绘制内容: - 天线(竖线 + 顶部光球) - 头部(圆角矩形 + 彩色边框) - 眼睛(支持正常/旋转弧/闭眼 3 种形态) - 嘴巴(支持微笑弧/波形/横线 3 种形态) - 身体(圆角矩形 + 胸口小圆点) - 光晕(头部周围的模糊光圈) 5 种状态的视觉表现: | 状态 | 颜色 | 眼睛 | 嘴巴 | 光晕 | |------|------|------|------|------| | `idle` | 靛蓝 `#6366F1` | 正常椭圆 + 眨眼 | 微笑弧 | 慢脉冲 | | `thinking` | 橙色 `#F59E0B` | 旋转加载弧 | 浅弧 | 中速脉冲 | | `executing` | 橙红 `#F97316` | 旋转弧(更快) | 浅弧 | 快脉冲 | | `speaking` | 青色 `#0EA5E9` | 正常 | 波形动画 | 中速脉冲 | | `alert` | 红色 `#EF4444` | 正常 | 横线闪烁 | 红色快闪 | ### `lib/core/widgets/robot_avatar.dart` 封装 `RobotPainter` 的动画组件,使用 `TickerProviderStateMixin` 驱动两个 `AnimationController`: - `_mainCtrl`:主动画(呼吸/旋转/波形),速率随状态变化 - idle: 2400ms 来回 - thinking: 900ms 循环 - executing: 600ms 循环 - speaking: 700ms 循环 - alert: 500ms 循环 - `_blinkCtrl`:眨眼(150ms),每隔 2~5 秒随机触发,`thinking/executing` 状态时跳过 使用方式: ```dart RobotAvatar(state: RobotState.idle, size: 56) RobotAvatar(state: RobotState.thinking, size: 32) // AppBar 里的小版本 ``` ### `lib/core/widgets/floating_robot_fab.dart` 悬浮机器人按钮,包含: 1. **`robotStateProvider`**:将 `chatProvider` 的 `AgentStatus` 映射为 `RobotState` ``` idle → RobotState.idle thinking → RobotState.thinking executing → RobotState.executing awaitingApproval → RobotState.alert error → RobotState.alert ``` 2. **`FloatingRobotFab`**:圆形容器包裹 `RobotAvatar(size: 52)`, - 外圈光晕颜色跟随机器人状态 - 点击触发 `PageRouteBuilder` 从底部滑入 `ChatPage`(`transitionDuration: 350ms`,`fullscreenDialog: true`) ### `lib/features/home/presentation/pages/home_page.dart` "主页" Tab,包含: - **`_AgentStatusCard`**:实时展示 iAgent 当前状态(`RobotAvatar` + 状态文字 + 消息数),点击暗示可进入对话 - **`_OfficialAgentsRow`**:3 张 IT0 官方智能体横向滑动卡片(运维助手 / 安全审计 / 数据库巡检),纯展示,后续可接入后端 - **`_MyAgentsPlaceholder`**:用户无自建智能体时的引导(目前硬编码,后续接 `my_agents` 数据) - **`_QuickTipsCard`**:示例对话语句,引导用户主动使用 AI ### `lib/features/my_agents/presentation/pages/my_agents_page.dart` "我的创建" Tab,包含: - **`myAgentsProvider`**:请求 `GET /api/v1/agent/configs`,失败时返回空列表(不 crash) - 无数据时显示 **3步引导** + **4格模板 Grid**(OpenClaw 编程助手 / 运维自动化 / 数据分析 / 安全巡检) - 有数据时显示 **`_AgentListCard`** 列表,展示名称 / 描述 / 引擎类型 / 创建时间 ### `lib/features/profile/presentation/pages/profile_page.dart` "我" Tab,整合原 `SettingsPage` 全部功能,新增: - 账单入口在**最显眼位置**(个人卡片正下方),显示当前套餐名(当前为 "Free",后续接 `billingProvider`) - 其余设置项(主题 / 语言 / 引擎 / 音色 / 风格 / 通知 / 改密码 / 版本 / 检查更新)完整保留 --- ## 四、修改文件说明 ### `lib/core/router/app_router.dart` **完全重写**,主要变化: - Shell 路由从 5 个减至 4 个:`/home` / `/my-agents` / `/billing` / `/profile` - `ScaffoldWithNav.routes` 静态常量更新 - `Scaffold` 新增 `floatingActionButton: FloatingRobotFab()`,位置 `FloatingActionButtonLocation.endFloat` - Splash 跳转目标从 `/dashboard` 改为 `/home` ### `lib/features/chat/presentation/pages/chat_page.dart` - 导入 `robot_avatar.dart` 和 `floating_robot_fab.dart` - AppBar `title` 从纯文字改为 `Consumer` 内嵌的 `Row(RobotAvatar(size:32) + Text('iAgent'))` - 机器人颜色实时反映 Agent 工作状态(用户打开对话窗口时一眼可感知) - 其他逻辑**完全不变**(消息列表 / 输入框 / 工具卡片 / 审批卡片 / 语音按钮) ### `lib/core/config/api_endpoints.dart` 新增: ```dart static const String agentConfigs = '$agent/configs'; // → /api/v1/agent/configs ``` 对应 `agent-service` 的 `AgentConfig` 实体 CRUD(已有后端实现)。 --- ## 五、未来扩展方向 1. **主页智能体卡片动态化**:接入 `GET /api/v1/agent/configs` 替换当前硬编码官方卡片 2. **账单 Tab 套餐显示**:在 ProfilePage 账单入口展示实时套餐名(接 `billingProvider`) 3. **RobotState.speaking**:当 TTS 播放时切换为 `speaking` 状态(需要 voice provider 信号) 4. **我的创建 → 智能体详情页**:点击列表项进入配置/对话/用量详情 5. **长按机器人 FAB**:弹出快速切换智能体列表(多智能体场景)